Amazon ECS에 Java 마이크로서비스를 위한 CI/CD 파이프라인 배포 - AWS 권장 가이드

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon ECS에 Java 마이크로서비스를 위한 CI/CD 파이프라인 배포

작성자: 비제이 톰슨(AWS)과 산카르 산구보틀라(AWS)

환경: PoC 또는 파일럿

기술: DevOps; 컨테이너 및 마이크로서비스

AWS 서비스: AWS CodeBuild, 아마존 EC2 컨테이너 레지스트리, 아마존 ECS, AWS Fargate, AWS CodePipeline

요약

이 패턴은 AWS를 사용하여 기존 Amazon Elastic Container Service (Amazon ECS) 클러스터에 Java 마이크로서비스를 위한 지속적 통합 및 지속적 전달 (CI/CD) 파이프라인을 배포하는 단계를 안내합니다. CodeBuild 개발자가 변경 사항을 적용하면 CI/CD 파이프라인이 시작되고 빌드 프로세스가 시작됩니다. CodeBuild 빌드가 완료되면 아티팩트가 Amazon Elastic Container Registry(Amazon ECR)로 푸시되고 Amazon ECR의 최신 빌드가 픽업되어 Amazon ECS 서비스로 푸시됩니다.

사전 조건 및 제한 사항

사전 조건

  • Amazon ECS에서 실행되는 기존 Java 마이크로서비스 애플리케이션

  • AWS CodeBuild 및 AWS에 대한 지식 CodePipeline

아키텍처

소스 기술 스택

  • Amazon ECS에서 실행되는 Java 마이크로서비스

  • Amazon ECR의 코드 리포지토리

  • AWS Fargate

소스 아키텍처

Amazon ECS에서 Java 마이크로서비스를 위한 CI/CD 파이프라인 배포를 위한 소스 아키텍처

대상 기술 스택

  • Amazon ECR

  • Amazon ECS

  • AWS Fargate

  • AWS CodePipeline

  • AWS CodeBuild

대상 아키텍처 

Amazon ECS에서 Java 마이크로서비스의 CI/CD 파이프라인을 배포하기 위한 대상 아키텍처

자동화 및 규모 조정

CodeBuild buildspec.yml파일:

version: 0.2 phases: pre_build: commands: - echo Logging in to Amazon ECR... - aws --version - $(aws ecr get-login --region $AWS_DEFAULT_REGION --no-include-email) - REPOSITORY_URI=$AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO - COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7) - IMAGE_TAG=build-$(echo $CODEBUILD_BUILD_ID | awk -F":" '{print $2}') build: commands: - echo Build started on `date` - echo building the Jar file - mvn clean install - echo Building the Docker image... - docker build -t $REPOSITORY_URI:$BUILD_TAG . - docker tag $REPOSITORY_URI:$BUILD_TAG $REPOSITORY_URI:$IMAGE_TAG post_build: commands: - echo Build completed on `date` - echo Pushing the Docker images... - docker push $REPOSITORY_URI:$BUILD_TAG - docker push $REPOSITORY_URI:$IMAGE_TAG - echo Writing image definitions file... - printf '[{"name":"%s","imageUri":"%s"}]' $DOCKER_CONTAINER_NAME $REPOSITORY_URI:$IMAGE_TAG > imagedefinitions.json - cat imagedefinitions.json artifacts: files: - imagedefinitions.json - target/DockerDemo.jar

도구

서비스

  • CodeBuildAWS는 소스 코드를 컴파일하고, 단위 테스트를 실행하고, 배포할 준비가 된 아티팩트를 생성하는 데 도움이 되는 완전관리형 빌드 서비스입니다. AWS는 지속적으로 CodeBuild 규모를 조정하고 여러 빌드를 동시에 처리하므로 빌드가 대기열에 남지 않습니다.

  • AWS는 소프트웨어 릴리스의 여러 단계를 신속하게 모델링 및 구성하고 소프트웨어 변경 사항을 지속적으로 릴리스하는 CodePipeline 데 필요한 단계를 자동화하도록 지원합니다. AWS를 CodePipeline 와 같은 GitHub 타사 서비스와 통합하거나 AWS CodeCommit 또는 Amazon ECR과 같은 AWS 서비스를 사용할 수 있습니다.

  • Amazon Elastic Container Registry(Amazon ECR)는 개발자가 Docker 컨테이너 이미지를 간편하게 저장, 관리 및 배포할 수 있게 해주는 완전 관리형 레지스트리입니다. Amazon ECR은 Amazon ECS와 통합되어 워크플로를 단순화합니다. development-to-production Amazon ECR은 가용성과 확장성이 뛰어난 아키텍처에서 이미지를 호스팅하므로 애플리케이션을 위한 컨테이너를 안정적으로 배포할 수 있습니다. AWS Identity and Access Management(IAM)와 통합하면 각 리포지토리를 리소스 수준에서 제어할 수 있습니다.

  • Amazon Elastic Container Service(Amazon ECS)는 Docker 컨테이너를 지원하고 AWS에서 컨테이너화된 애플리케이션을 쉽게 실행하고 확장할 수 있도록 도와주는 확장성이 뛰어난 고성능 컨테이너 오케스트레이션 서비스입니다. Amazon ECS를 사용하면 자체 컨테이너 오케스트레이션 소프트웨어를 설치 및 운영하거나, 가상 시스템 클러스터를 관리 및 확장하거나, 가상 시스템에서 컨테이너를 예약할 필요가 없습니다.

  • AWS Fargate는 서버나 클러스터를 관리할 필요 없이 컨테이너를 실행할 수 있는 Amazon ECS용 컴퓨팅 엔진입니다. AWS Fargate를 사용하면 더 이상 컨테이너를 실행하기 위해 가상 머신의 클러스터를 프로비저닝, 구성 또는 확장할 필요가 없습니다. 따라서 서버 유형을 선택하거나, 클러스터를 조정할 시점을 결정하거나, 클러스터 패킹을 최적화할 필요가 없습니다.

기타 도구

  • Docker컨테이너라는 패키지로 애플리케이션을 구축, 테스트 및 제공할 수 있는 플랫폼입니다.

  • Git은 소프트웨어 개발 중에 소스 코드의 변경 사항을 추적하기 위한 분산 버전 제어 시스템입니다. 프로그래머 간의 작업 조정을 위해 설계되었지만 모든 파일 세트의 변경 사항을 추적하는 데 사용할 수 있습니다. 그 목표에는 속도, 데이터 무결성, 분산된 비선형 워크플로우 지원이 포함됩니다. Git의 CodeCommit 대안으로 AWS를 사용할 수도 있습니다.

에픽

작업설명필요한 기술

CodeBuild 빌드 프로젝트 만들기.

AWS CodeBuild 콘솔에서 빌드 프로젝트를 생성하고 이름을 지정합니다.

앱 개발자, AWS 시스템 관리자

소스를 선택합니다.

이 패턴은 코드 저장소로 Git을 사용하므로 사용 가능한 옵션 GitHub 목록에서 선택하십시오. 공용 리포지토리 또는 GitHub 계정에서 선택하세요.

앱 개발자, AWS 시스템 관리자

리포지토리를 선택합니다.

코드를 빌드할 리포지토리를 선택합니다.

앱 개발자, AWS 시스템 관리자

환경을 선택합니다.

관리형 이미지 목록에서 선택하거나 Docker를 사용하여 사용자 지정 이미지를 선택할 수 있습니다. 이 패턴은 다음과 같은 관리형 이미지를 사용합니다.

  • Amazon Linux 2

  • 런타임: 표준

  • 이미지 버전 1.0

앱 개발자, AWS 시스템 관리자

서비스 역할을 선택합니다.

서비스 역할을 생성하거나 기존 역할 목록에서 선택할 수 있습니다.

앱 개발자, AWS 시스템 관리자

환경 변수를 추가합니다.

추가 구성 섹션에서 다음 환경 변수를 구성합니다.

  • 기본 AWS 리전의 AWS_DEFAULT_REGION

  • 사용자 계정 번호의 AWS_ACCOUNT_ID 

  • 아마존 ECR 프라이빗 리포지토리의 IMAGE_REPO

  • 빌드 버전의 BUILD_TAG(최신 빌드는 이 변수의 값임)

  • 해당 작업의 컨테이너 이름의 DOCKER_CONTAINER_NAME

이러한 변수는 buildspec.yml 파일의 자리 표시자이며 해당 값으로 대체됩니다.

앱 개발자, AWS 시스템 관리자

buildspec 파일을 생성합니다.

pom.xml와(과) 동일한 위치에 buildspec.yml 파일을 생성하고 이 패턴에서 제공되는 구성을 추가하거나 온라인 buildspec 편집기를 사용하여 구성을 추가할 수 있습니다. 제공된 단계에 따라 적절한 값으로 환경 변수를 구성합니다.

앱 개발자, AWS 시스템 관리자

아티팩트를 위한 프로젝트를 구성합니다.

(선택 사항) 필요한 경우 아티팩트에 대한 빌드 프로젝트를 구성합니다.

앱 개발자, AWS 시스템 관리자

Amazon CloudWatch 로그를 구성합니다.

(선택 사항) 필요한 경우 빌드 프로젝트에 대해 Amazon CloudWatch Logs를 구성합니다. 이 단계는 선택 사항이며, 권장 사항은 아닙니다.

앱 개발자, AWS 시스템 관리자

Amazon S3 로그를 구성합니다.

(선택 사항) 로그를 저장하고자 하는 경우 빌드 프로젝트에 대한 Amazon Simple Storage Service(Amazon S3) 로그를 구성합니다.

앱 개발자, AWS 시스템 관리자
작업설명필요한 기술

파이프라인 생성.

AWS CodePipeline 콘솔에서 파이프라인을 생성하고 이름을 지정합니다. 파이프라인 생성에 대한 자세한 내용은 AWS CodePipeline 설명서를 참조하십시오.

앱 개발자, AWS 시스템 관리자

서비스 역할을 선택합니다.

서비스 역할을 생성하거나 기존 서비스 역할 목록에서 선택합니다. 서비스 역할을 생성하는 경우 역할 이름을 제공하고 역할 생성 옵션을 선택하십시오. CodePipeline

앱 개발자, AWS 시스템 관리자

아티팩트 스토어를 선택합니다.

고급 설정에서 Amazon S3가 버킷을 생성하고 그 안에 아티팩트를 저장하도록 하려면 아티팩트 스토어의 기본 위치를 사용해야 합니다. 또는 사용자 지정 위치를 선택하고 기존 버킷을 지정합니다. 암호화 키를 사용하여 아티팩트 암호화를 선택할 수도 있습니다.

앱 개발자, AWS 시스템 관리자

소스 공급자를 지정합니다.

소스 제공자의 경우 GitHub (버전 2) 를 선택합니다.

앱 개발자, AWS 시스템 관리자

리포지토리와 코드의 브랜치를 선택합니다.

로그인하지 않은 경우 연결할 GitHub 연결 세부 정보를 제공한 다음 리포지토리 이름과 분기 이름을 선택합니다.

앱 개발자, AWS 시스템 관리자

탐지 옵션을 변경합니다.

소스 코드 변경 시 파이프라인 시작을 선택하고 다음 페이지로 이동합니다.

앱 개발자, AWS 시스템 관리자

빌드 공급자를 선택합니다.

빌드 공급자의 경우 AWS를 CodeBuild 선택한 다음 빌드 프로젝트에 대한 AWS 지역 및 프로젝트 이름 세부 정보를 제공합니다.

빌드 유형에서 단일 빌드를 선택합니다.

앱 개발자, AWS 시스템 관리자

배포 공급자를 선택합니다.

배포 공급자의 경우, Amazon ECS를 선택합니다. 필요한 경우 클러스터 이름, 서비스 이름, 이미지 정의 파일(있는 경우) 및 배포 제한 시간 값을 선택합니다. 파이프라인 생성을 선택합니다.

앱 개발자, AWS 시스템 관리자

관련 리소스