SUIN

Git Action CloudFront Invalidate 무효화 CD 이슈해결 본문

TIL

Git Action CloudFront Invalidate 무효화 CD 이슈해결

choi suin 2022. 10. 6. 18:34
728x90

지난번 CD 연결이 성공한 줄 알고 방치시켜놨던 action에서 알고 보니 CloudFront 무효화 처리가 안되고 있었던 것이었다.. 

 

 

기존 코드 

- name: Deploy
    env:
      AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
      AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
    run: |
      aws s3 cp --recursive --region ap-northeast-2 build s3://${{secrets.S3_BUCKET_NAME}}
- name: Invalidate CloudFront Cache 
    uses: chetan/invalidate-cloudfront-action@master
    env:
      AWS_DISTRIBUTION: ${{ secrets.DISTRIBUTION_ID }}
      PATHS: '/index.html'
    continue-on-error: true

 

 

첫번째 시도!

aws 공식 문서를 참고하여 다시 코드 수정! 

 

 

파일 무효화 - Amazon CloudFront

아직 진행 중인 무효화를 복사하고 무효화 경로의 목록을 업데이트하여 업데이트된 무효화를 실행하는 경우, CloudFront에서는 복사한 무효화를 중단하거나 삭제하지 않습니다. 무효화 경로가 원

docs.aws.amazon.com

  - name: Invalidate CloudFront Cache 
    run: aws cloudfront create-invalidation --distribution-id ${{secrets.DISTRIBUTION_ID}} --paths "/*"

첫 번째 시도 결과 

DISTRIBUTION_ID 또한 secrets에 잘 담았는데도 불구하고 255 err 발생 

 


두 번째 시도!

기존에 최신 우분투 버전에서 발생되는 문제일 수 있다는 말과 18.04로 ubuntu version downgrade 시도

 

<botocore.awsrequest.AWSRequest object at > ##[error]Process completed with exit code 255.

https://github.com/aws/aws-cli/issues/5262멀정히 작동하던 githubaction 을 통한 자동배포에서 에러 발생함알고보니 우분투 버전을 항상 최신버전으로 지정해놓았던 것이 원인이었음yml 파일을 아래처럼 수

velog.io

 

 

GitHub Actions AWS error exit code 255

If you’ve got GitHub actions running on ubuntu-latest which have stopped working with a not-so-helpful Error: Process completed with exit code 255 message, you need to add a default region. T…

dotjoeblog.wordpress.com

 

 

Ubuntu-latest workflows will use Ubuntu-20.04 · Issue #1816 · actions/runner-images

UPDATE: Migration has been finished and all ubuntu-latest builds are using Ubuntu 20.04 Ubuntu-20.04 is ready to be the default version for the “ubuntu-latest” label in GitHub Actions and Azure Dev...

github.com

두 번째 시도 결과! 

우분투 버전이 문제가 아니었다..

 


세 번째 시도!

에러 코드를 자세히 살펴본 후 awsRequest에 문제가 있는 것 같아서 혹시 IAM 연결에 문제가 없는지 다시 한번 더 되돌아보면서 확인해보니 CloudFront 정책이 빠져있던걸 확인하였다! 

 

추가로 기존에 작성했던 코드는 s3 버킷에 바로 연결, 무효화 2가지 name으로 작성이 되어있었고 aws 연결, s3 업데이트 , 무효화 3가지로 분리하는 방식으로 코드를 수정해주었다 

  - name: Configure AWS credentials 
    uses: aws-actions/configure-aws-credentials@v1 
    with: 
      aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} 
      aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} 
      aws-region: ap-northeast-2


  - name: Upload to S3
    env:
      BUCKET_NAME: ${{ secrets.S3_BUCKET_NAME}}
    run: |
      aws s3 sync \
        ./build s3://$BUCKET_NAME

  - name: CloudFront Invalidation
    env:
      CLOUD_FRONT_ID: ${{ secrets.AWS_CLOUDFRONT_ID}}
    run: |
      aws cloudfront create-invalidation \
        --distribution-id $CLOUD_FRONT_ID --paths /*

세 번째  시도 결과! 

성공!! 

 

 

뿌듯

 

 

 

 

참고한 글

https://kukim.tistory.com/144

https://hyeon9mak.github.io/cloudfront-caching-control-with-invalidations/