반응형
이번 포스트에서는 ECR에 arm전용 Docker이미지를 푸시하는 과정을 설명한다.
AWS에서 ECS를 사용할 때, 때때로 ARM 아키텍처 기반의 EC2 인스턴스에 맞는 Docker 이미지를 ECR에 올려야 할 상황이 생길 수 있다. 예를 들어 나는 ECS클러스터를 만들 때 기존에는 x86 아키텍처 기반이었던 t3.small을 사용하다 이번에 사양을 올리기 위해 arm아키텍처 기반의 t4g.medium으로 업그레이드하게 되었다. 이때 ECS를 기동 하니 아키텍처 관련 이미지 실행 오류가 발생했다. 이렇게 아키텍처가 변경된 상황에서 빌드한 Docker이미지와 관련해서 발생할 수 있는 문제들과 이를 해결하기 위해 Docker Buildx를 사용하는 방법에 대해 설명하겠다.
이 글은 기존에 CodeBuild 프로젝트가 이미 생성되어 있다고 가정하고 설명한다. 만약 생성한 적이 없다면 먼저 아래의 포스트를 확인해서 CodeBuild의 프로젝트를 만들고 오도록 하자
2023.10.29 - [AWS] - AWS CI/CD: CodePipeline 빌드 스테이지 추가 (2편)
1. 문제 상황
- AWS CodeBuild는 x86 아키텍처를 기반으로 한 환경에서 코드 컴파일, 테스트 및 빌드 작업을 수행하는 서비스이다. 하지만 때로는 ARM 아키텍처 기반의 인스턴스를 사용하는 AWS ECS 클러스터에 적합한 이미지가 필요할 때가 있다.
- 예를 들어, t4g.medium 인스턴스처럼 ARM 기반의 EC2를 사용하는 경우, ARM 아키텍처용 이미지 빌드가 필요하다.
2. Docker Buildx의 역할
- AWS CodeBuild 환경에서 Docker Buildx를 사용하는 이유는 간단하다. Docker Buildx는 멀티 아키텍처 이미지 빌드를 지원하는 도구로, x86 환경에서 ARM 아키텍처용 이미지를 생성할 수 있게 해준다. 이는 CodeBuild 환경에서 효율적으로 ARM 호환 이미지를 빌드하고, 해당 이미지를 ECS 클러스터에 배포하는 데 필수적이다.
- 만약 Buildx에 대한 자세한 설명을 보고자 한다면 아래의 포스트를 확인하자
2023.11.09 - [AWS] - Docker Buildx로 AWS ECR에 ARM 이미지 빌드 및 푸시 (x86 기준)
3. BuildSpec에서 Buildx 사용하기
3-1. BuildSpec 확인하기 (이미 Build Project를 만들었을 때 수정하는 방법)
- 만약 Build Project를 만든 적이 없다면 생성하면 된다. 생성과정에서 BuildSpec을 작성하는 단계가 있을 텐데 아래와 같이 적도록 하자
3-2. BuildSpec.yml 작성하기
- buildspec.yml 파일에는 Docker Buildx를 사용하여 ARM 아키텍처용 이미지를 빌드하는 명령이 포함되어야 한다.
- 작성할 코드 예시
version: 0.2
phases:
pre_build:
commands:
- echo Logging in to Amazon ECR...
- [ECR 로그인 명령]
build:
commands:
- docker buildx build --platform linux/arm64 -t [ECR 리포지토리]:[태그] .
- 이렇게 설정하면 AWS CodeBuild 환경에서도 ARM 아키텍처를 대상으로 하는 Docker 이미지를 효과적으로 빌드하고, 이를 AWS ECS의 ARM 기반 EC2 인스턴스에서 실행할 수 있다.
3-3. 다시 CodePipeline으로 가서 CI/CD를 테스트해보자
- 만약 기존 CodePipeline 구성에 이상이 없는 상태에서 ECS클러스터의 EC2 아키텍처만을 기존에 사용하던 x86에서 arm으로 바꿨다면 위와 같이 빌드단계에서 buildx를 써주는 것으로 문제없이 생성된 arm전용 이미지가 ECR에 push 될 것이고 이걸 가져다 사용하는 Deploy단계는 ECS를 잘 배포할 것이다.
4. 마무리
- 이번에는 EC2를 t4g 시리즈 같은 arm 아키텍처를 가진 인스턴스를 선택해서 생성했을 때 만약 CodePipeline을 통해 CI/CD를 구성했다면 만나게 될 문제를 설명했다. (특히 이것은 ECR, ECS에 집중적인 설명이다.)
- 글은 간단하게 적었지만 결론은 build단계에서 BuildSpec.yml에 buildx 명령어로 arm 전용 이미지를 만들어주기만 하면 된다는 것을 알 수 있다. 그럼 Deploy단계는 설정에 따라 알아서 arm용으로 빌드된 이미지를 ECR에서 가지고 와서 배포할 것이다.
반응형
'AWS > ECS, ECR' 카테고리의 다른 글
[AWS ECR] Docker Buildx로 ARM 이미지 빌드 및 푸시 (x86 기준) (0) | 2023.11.09 |
---|---|
[AWS] ECS로 MSA인프라 구현하기 (0) | 2023.11.07 |
[AWS ECS] ECS로 MSA 구현하기 (0) | 2023.11.07 |
AWS Secrets & ECS SpringBoot 설정 (3-2): 성공적인 배포 완료 (1) | 2023.11.03 |
AWS Secrets & ECS SpringBoot 설정 (3-1): ECS배포와 오류 분석 (0) | 2023.11.03 |