기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
GitHub Actions 및 Terraform을 사용하여 Docker 이미지를 빌드하고 Amazon ECR에 푸시
Ruchika Modi, Amazon Web Services
요약
이 패턴은 재사용 가능한 GitHub 워크플로를 생성하여 Dockerfile을 빌드하고 결과 이미지를 Amazon Elastic Container Registry(Amazon ECR)로 푸시하는 방법을 설명합니다. 이 패턴은 Terraform 및 GitHub Actions를 사용하여 Dockerfiles의 빌드 프로세스를 자동화합니다. 이를 통해 인적 오류의 가능성을 최소화하고 배포 시간을 크게 줄일 수 있습니다.
GitHub 리포지토리 기본 브랜치로의 GitHub 푸시 작업을 실행하면 리소스 배포가 시작됩니다. 이 워크플로는 GitHub 조직과 리포지토리 이름의 조합을 기반으로 고유한 Amazon ECR 리포지토리를 생성합니다. 그런 다음, Dockerfile 이미지를 Amazon ECR 이미지 리포지토리로 푸시합니다.
사전 조건 및 제한 사항
사전 조건
활성 상태의 AWS 계정.
활성 GitHub 계정
Terraform 버전 1 이상 설치 및 구성
. Terraform 백엔드
의 Amazon Simple Storage Service(S3) 버킷. Terraform 상태 잠금 및 일관성을 위한 Amazon DynamoDB
테이블. 이 테이블에는 유형이 String인LockID라는 파티션 키가 있어야 합니다. 이 키가 구성되지 않은 경우 상태 잠금이 비활성화됩니다.Terraform용 Amazon S3 백엔드를 설정할 수 있는 권한이 있는 AWS Identity and Access Management(IAM) 역할. 구성 지침은 Terraform 설명서
를 참조하세요.
제한 사항
이 재사용 가능한 코드는 GitHub Actions에서만 테스트되었습니다.
아키텍처
대상 기술 스택
Amazon ECR 리포지토리
GitHub Actions
Terraform
대상 아키텍처

다이어그램은 다음을 보여 줍니다.
1. 사용자가 GitHub 리포지토리에 Dockerfile 및 Terraform 템플릿을 추가합니다.
2. 템플릿을 추가하면 GitHub 작업 워크플로가 시작됩니다.
3. 이 워크플로는 Amazon ECR 리포지토리가 존재하는지 확인합니다. 이 리포지토리가 없으면 GitHub 조직 및 리포지토리 이름을 기반으로 리포지토리를 생성합니다.
4. 이 워크플로는 Dockerfile을 빌드하고 이미지를 Amazon ECR 리포지토리로 푸시합니다.
도구
Amazon 서비스
Amazon Elastic Container Registry(Amazon ECR)는 안전하고 확장성이 있고 신뢰할 수 있는 관리형 컨테이너 레지스트리 서비스입니다.
기타 도구
GitHub Actions
는 GitHub 플랫폼에 통합되어 GitHub 리포지토리 내에서 워크플로를 생성, 공유 및 실행하도록 지원합니다. GitHub Actions를 사용하여 코드 빌드, 테스트 및 배포와 같은 작업을 자동화할 수 있습니다. Terraform
은 HashiCorp의 코드형 인프라(IaC) 도구로, 클라우드 및 온프레미스 인프라를 생성하고 관리하는 데 도움이 됩니다.
코드 리포지토리
이 패턴의 코드는 GitHub Docker ECR 작업 워크플로
GitHub 작업을 생성하면 Docker 워크플로 파일이 이 리포지토리의
/.github/workflows/폴더에 저장됩니다. 이 솔루션의 워크플로는 workflow.yaml파일에 있습니다. e2e-test폴더는 참조 및 테스트를 위한 샘플 Dockerfile을 제공합니다.
모범 사례
Dockerfiles 작성 모범 사례는 Docker 설명서
를 참조하세요. Amazon S3용 VPC 엔드포인트를 사용합니다. VPC 엔드포인트는 프라이빗 IP 주소를 통해 Amazon ECR API에 비공개로 액세스할 수 있는 기술인 AWS PrivateLink로 구동됩니다. Fargate 시작 유형을 사용하는 Amazon ECS 작업의 경우, 작업에 퍼블릭 ID 주소를 할당할 필요 없이 Amazon ECR에서 프라이빗 이미지를 가져오는 작업이 가능합니다.
에픽
| 작업 | 설명 | 필요한 기술 |
|---|---|---|
OpenID Connect를 구성합니다. | OpenID Connect(OIDC) 공급자를 생성합니다. 이 작업에 사용되는 IAM 역할에 대한 신뢰 정책에 있는 공급자를 사용합니다. 지침은 GitHub 설명서의 Amazon Web Services에서 OpenID Connect 구성 | AWS 관리자, AWS DevOps, 일반 AWS |
GitHub 리포지토리를 복제합니다. | GitHub Docker ECR 작업 워크플로
| DevOps 엔지니어 |
| 작업 | 설명 | 필요한 기술 |
|---|---|---|
Docker 워크플로를 시작하는 이벤트를 사용자 지정합니다. | 이 솔루션의 워크플로는 workflow.yaml | DevOps 엔지니어 |
워크플로를 사용자 지정합니다. | workflow.yaml
| DevOps 엔지니어 |
Terraform 템플릿을 배포합니다. | 이 워크플로는 구성한 GitHub 이벤트에 따라 Amazon ECR 리포지토리를 생성하는 Terraform 템플릿을 자동으로 배포합니다. 이 템플릿은 Github 리포지토리의 루트 | AWS DevOps, DevOps 엔지니어 |
문제 해결
| 문제 | Solution |
|---|---|
Amazon S3 및 DynamoDB를 Terraform 원격 백엔드로 구성할 때 발생하는 문제 또는 오류. | Terraform 설명서 |
|
|