UPDATE_ROLLBACK_FAILED를 만났을 때 누르는 버튼

AWS Console 의 스택 페이지에 빨간 글자가 떠 있었습니다.

UPDATE_ROLLBACK_FAILED. 한참을 쳐다봤습니다. 롤백마저 같은 자리에서 막혔다는 뜻입니다. 콘솔 액션 버튼이 절반쯤 회색이 됩니다.

발단은 BucketDeployment 였습니다.

CDK 의 BucketDeployment 는 내부적으로 S3 sync 와 CloudFront invalidation 을 같이 합니다. invalidation 을 기다리는 Lambda 가 타임아웃이면 그 자리에서 FAILED 가 되고, 스택이 롤백하다가 같은 이유로 또 막힙니다.

복구 명령은 한 줄입니다.

aws cloudformation continue-update-rollback \
  --stack-name <stack> \
  --resources-to-skip <CDKBucketDeploymentResource>

이걸 처음 칠 때 손이 잠깐 떨립니다. resources-to-skip 이 일종의 면제권을 발급하는 느낌이라 그렇습니다. 면제권 없이는 스택이 영원히 그 자리에 끼어 있습니다. 떨림은 잠깐이고 누릅니다.

스킵하고 나면 스택이 UPDATE_ROLLBACK_COMPLETE 로 돌아옵니다. 한 가지 문제는 남습니다. 스킵된 리소스의 production 상태가 모호하다는 점입니다. 그래서 aws s3 sync 로 dist 를 다시 올리고 aws cloudfront create-invalidation 으로 패스를 직접 무효화합니다. CDK 가 자동으로 해주던 일을 손으로 한 번 더 합니다.

이 절차를 한 번 거치면 다음 사고의 손놀림이 빨라집니다. 처음에는 빨간 글자 앞에서 한참을 쳐다봤고, 두 번째에는 검색을 했고, 세 번째부터는 메모해둔 한 줄을 갖다 붙입니다. 사고 자체가 줄지는 않습니다. 사고 앞에서 굳어 있는 시간이 줄 뿐입니다. 이게 진전인지 같은 사고를 빨리 복구하는 숙련도가 늘었을 뿐인지는, 적어두고 보니 숙련도 쪽이 정직한 표현입니다.