Home AWS 배포 과정에서 Region을 지정하지 않아 발생한 이슈
Post
Cancel

AWS 배포 과정에서 Region을 지정하지 않아 발생한 이슈

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는 글로벌 서비스로 별도의 리전이 필요하지 않을텐데 왜 그런지는 조금 더 살펴봐야 할 것 같네요.

As noted above, this is due to a change in behavior between the V1 and V2 clients. As of AWS CLI v2 2.0.15, if a region is not specified, the IMDS service is used to try and determine it. Setting a region prevents this request from happening.







4. 정리


Region을 지정하지 않으면 배포가 실패할 수 있습니다. 간단하지만 잊어버리기 쉬운데요, 이를 알고 잘 적용할 수 있도록 합니다.


This post is licensed under CC BY 4.0 by the author.

자바 쓰레드 복습 내용 정리

Bastion 으로 private 인스턴스에 접속하기