1. 글을 작성하게 된 계기
Client 배포 과정에서 빌드가 실패했고, 그 이유를 정리하기 위해 글을 작성하게 되었습니다.
2. 문제 상황
Github Action을 사용해 배포를 하던 중, CloudFront의 캐시가 초기화되지 않는 이슈가 발생했습니다.
1
2
<botocore.awsrequest.AWSRequest object at 0x.....>
error Command failed with exit code 255.
문제가 됐던 스크립트는 다음과 같습니다. 왜 그럴까요? 별다른 실수가 있는 것도 아닌데요. 😡
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
name: Client Tasks Deploy
......
jobs:
deploy:
runs-on: ubuntu-latest
steps:
......
- name: Invalidate CloudFront Cache
env:
AWS_ACCESS_KEY_ID: $
AWS_SECRET_ACCESS_KEY: $
run: |
if [ "$" == "prod" ]; then
DISTRIBUTION_ID=$
else
DISTRIBUTION_ID=$
fi
aws cloudfront create-invalidation \
--distribution-id $DISTRIBUTION_ID \
--paths "/tasks/$/*"
3. 해결
해결책은 간단한데, Region 만 넣으면 됩니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
name: Client Tasks Deploy
......
jobs:
deploy:
runs-on: ubuntu-latest
steps:
......
- name: Invalidate CloudFront Cache
env:
AWS_ACCESS_KEY_ID: $
AWS_SECRET_ACCESS_KEY: $
AWS_DEFAULT_REGION: ap-northeast-2 # Region 추가
run: |
if [ "$" == "prod" ]; then
DISTRIBUTION_ID=$
else
DISTRIBUTION_ID=$
fi
aws cloudfront create-invalidation \
--distribution-id $DISTRIBUTION_ID \
--paths "/tasks/$/*"
이는 AWS CLI v2 2.0.15 버전 부터 Region을 지정하지 않으면 Null로 값을 할당하기 때문입니다. CloudFront는 글로벌 서비스로 별도의 리전이 필요하지 않을텐데 왜 그런지는 조금 더 살펴봐야 할 것 같네요.
4. 정리
Region을 지정하지 않으면 배포가 실패할 수 있습니다. 간단하지만 잊어버리기 쉬운데요, 이를 알고 잘 적용할 수 있도록 합니다.