AWS/ElasticBeanstalk

AWS Elastic Beanstalk - (4)

알면 알 수록 재밌다! 2023. 2. 18. 07:34

해결해야할 것들이 남아있다.

1. github action commit tag <- 이번 글에서 할 거

2. http -> https 리다이렉트

3. auto scaling  <-- aws beanstalk에서는 auto scaling을 자동으로 설정해줘서 할 필요가 없음

 

 

[요약]

{{ github.sha }} commit id를 githubaction step 중에 어떻게 주입하는 지에 대해서 알아보자.

 


1. github action commit tag

 

깃허브는 왜 commit id를 Hash로 쓸까?

-> 어떤 서버에 연결되던, 어디에 푸쉬를 하던 최신 번호 확인이 필요해서 hash 를 쓴다고 한다.

 

 

 

인터넷을 보면 아래처럼 많이 써서 나도 이렇게 썼는데, repository에서 이미지를 못 가져오는것이었다.

env:
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
ECR_REPOSITORY: <ECR 레포지토리 명>
IMAGE_TAG: ${{ github.sha }}

그래서 ${{ github.sha }} 이게 뭔지를 공부하기 시작했다.

 

푸쉬한 브랜치의 최신 번호를 가져온다고 하는데 나는 자꾸 이걸 못가져오는 것이다.

 

어디서 못가져오느냐? Dockerrun.aws.json 파일에 github.sha를 주입시켜줘야하는데, 이런 글은 없었던 것이다...

 

즉, 다시 설명하자면

- name: Build and push Docker image
    id: build-image
    env: ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
        ECR_REPOSITORY: innail/django
        IMAGE_TAG: ${{ github.sha }}
    run: |
        docker buildx build --platform=linux/amd64 -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .                     docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG echo "::set-output                                        
    name=image::$ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG"

 

이 코드에서 ${{ github.sha }} 이 태그를 붙여서 ECR의 레포지토리 주소를 가져온다고 치자.

{{ github.sha }}는 dkwmadaldmwadlamdw123 로 가정한다.

111111111111111111.dkr.ecr.ap-northeast-2.amazonaws.com/test:dkwmadaldmwadlamdw123

이렇게 되고, 푸쉬할때마다 dkwmadaldmwadlamdw123 이부분이 github의 commit id로 자동적으로 바껴서 이미지 이름이 될 거라는 뜻이다.

 

근데, 그럼 이 바뀌는 {{ github.sha }} commit id를 githubaction step 중에 어떻게 주입 시켜줄 수 있느냐?

 

- name: Build and push Docker image
    id: build-image
    env: 
        IMAGE_TAG: ${{ github.sha }}
    run: |
        echo "::set-output name=image::$ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG"

id와 image를 보면된다.

111111111111111111.dkr.ecr.ap-northeast-2.amazonaws.com/test:dkwmadaldmwadlamdw123

이걸 image::$ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG 와 같이 image라는 변수로 지정해서 쓸 거라는 뜻이다.

 

name 은 참고로 그냥 문법이다 의미없으니까 넘어가라.

 

- name: Update Dockerrun file with ECR image path
   run: |
       sed -i "s|\"Name\": \".*\"|\"Name\": \"${{ steps.build-image.outputs.image }}\"|g" Dockerrun.aws.json

위 와 같이 build-image id 값을 가진 steps 에서 출력값(outputs) 뽑아내는데, image 값을 가져오겠다는 뜻이다.

 

 

 

이 Dockerrun.aws.json 파일에서 Name 부분이 바뀌게 된다는 것이다.

그럼 : v1.1.16 처럼 태그부분이 commit id에 따라서 바뀌고 이것이 ECR에 올라가는 이미지 이름이 되게 된다.

 

즉, 이렇게 하면 github action에서commit id에 따라서 푸쉬할 때마다 이미지 이름을 붙일 수 있게 된다.

 

 

 

내용 정리

json 파일에 값 바꿔주는 step을 추가하면 {{ github.sha }} commit id를 githubaction step 중에

주입될 수 있다.

 


 

참고) aws beanstalk에서는 auto scaling을 자동으로 설정해준다.

 

 

안해도 되었었네~~~ 이래서 EB 쓰는구나~~~

4개까지도 만들어준다고 한다~

 

 

 

 


 

원래 처음 작성했던 3개를 다 하려고 했는데, 시간이 너무 많이 걸려서 나머지 2개는 내일로 미뤄야겠다..

auto scaling은 할 필요가 없으니 1개만 남았다.

역시 배포는 쉬운게 없다~~