Go, Vantage point
가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.
Github | https://github.com/overnew/
Blog | https://everenew.tistory.com/
티스토리 뷰
buildspec.yaml
AWS의 Code build에서는 Buildspec이라는 yaml 파일에 어떻게 빌드를 진행할지 작성해주어야 한다.
Build는 어떤 것을 CI 하느냐에 따라서 빌드 방식이 달라지기 때문에 이러한 빌드 파일작성은 Git Actions에서도 아래처럼 특정 폴더에 build 파일을 작성해 주어야 한다.
Code build 생성시 별다른 세팅이 없다면, 자동으로 소스 코드의 루트 디렉터리에 존재하는 buildspec.yaml을 사용하게 된다.
buildspec 예시
Code commit 레포지토리의 파일들을 git 레포지토리로 옮겨둔 링크이다.
https://github.com/overnew/AWS_PHP_SDK_CodeBuild_example
env: 환경변수를 정의
phases: CodeBuild가 빌드의 각 단계에서 실행하는 명령
install: 빌드 환경을 위한 라이브러리 명시
pre_build, build, post_build: 빌드를 위한 단계 구분(build하나에 몰아서 해도 상관 x)
commands: 빌드 인스턴스의 OS에 해당하는 명령어를 나열하여 빌드 진행. (AmazonLinux2를 사용)
artifacts: 빌드 결과물을 저장하여, 추후 배포 과정에 활용
해당 코드를 통해 ECR에 빌드한 컨테이너를 저장하고, appspec.yaml을 남겨 code deploy에서 배포 시 활용할 수 있도록 설정하였다.
ECS를 사용하는 인프라이기 때문에 배포시, 새로운 task 정의 개정이 필요했다.
buildspec에서는 단순히 AmazonLinux의 명령어만 쓸 수 있기 때문에 복잡한 문자열작업에는 적합하지 않았다.
따라서 python을 통해 새로운 task 정의를 생성할 수 있도록 세팅하였다.
이처럼 단순 명령어 뿐만 아니라 다양한 작업도 할 수 있으며, 빌드 전 테스팅까지 진행할 수 있다.
레포지토리와 연결이 된 Code build 프로젝트에서 빌드를 진행하면 정상적으로 수행되어, ECR 레포지토리에 저장되는 것을 확인할 수 있다.
ECR에 새로 업로드된 이미지가 확인된다.
이 과정에서 Code build에 적절한 Role (S3, ECR, Code Commit) 설정이 되지 않으면 권한 문제가 발생하기 쉬우니. Code build가 접근하는 서비스에 대해 잘 이해하고 Role 설정을 해주자.
그래도 오류가 발생한다면, code build 생성 시 특권 모드를 활성화해주자.
아래는 위의 Buildspec 파일이 적절히 동작하기 위한 Role의 Json이다.
https://gist.github.com/overnew/85924993690786bd468ff02ce83fbb49
Terraform
참조
Docker build 공식 문서
https://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/sample-docker-section.html
'Cloud > AWS' 카테고리의 다른 글
[AWS] Lambda의 Cold Start와 Concurrency 문제 해결 (0) | 2024.07.15 |
---|---|
AWS ALB의 Path routing 활용하기 (0) | 2024.07.13 |
AWS ECS Fargate 모니터링 (2) - AWS Grafana(SAML) (0) | 2024.07.03 |
AWS ECS Fargate 모니터링 (1) - Side car (otel), AMP (0) | 2024.07.02 |
AWS ECS Task와 Service 그리고 Auto scaling (Terraform) (0) | 2024.07.02 |