기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
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 파이프라인 배포를 위한 소스 아키텍처](images/pattern-img/e36c214f-07b9-4fe2-8f7d-f6cfcb56b7e9/images/073c66b0-2ba8-40b9-8e3f-592f198f49e2.png)
대상 기술 스택
Amazon ECR
Amazon ECS
AWS Fargate
AWS CodePipeline
AWS CodeBuild
대상 아키텍처
![Amazon ECS에서 Java 마이크로서비스의 CI/CD 파이프라인을 배포하기 위한 대상 아키텍처](images/pattern-img/e36c214f-07b9-4fe2-8f7d-f6cfcb56b7e9/images/5d29fc5d-68f2-4400-a60b-242ef0a0a41e.png)
자동화 및 규모 조정
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를 사용하면 더 이상 컨테이너를 실행하기 위해 가상 머신의 클러스터를 프로비저닝, 구성 또는 확장할 필요가 없습니다. 따라서 서버 유형을 선택하거나, 클러스터를 조정할 시점을 결정하거나, 클러스터 패킹을 최적화할 필요가 없습니다.
기타 도구
에픽
작업 | 설명 | 필요한 기술 |
---|---|---|
CodeBuild 빌드 프로젝트 만들기. | AWS CodeBuild 콘솔에서 | 앱 개발자, AWS 시스템 관리자 |
소스를 선택합니다. | 이 패턴은 코드 저장소로 Git을 사용하므로 사용 가능한 옵션 GitHub 목록에서 선택하십시오. 공용 리포지토리 또는 GitHub 계정에서 선택하세요. | 앱 개발자, AWS 시스템 관리자 |
리포지토리를 선택합니다. | 코드를 빌드할 리포지토리를 선택합니다. | 앱 개발자, AWS 시스템 관리자 |
환경을 선택합니다. | 관리형 이미지 목록에서 선택하거나 Docker를 사용하여 사용자 지정 이미지를 선택할 수 있습니다. 이 패턴은 다음과 같은 관리형 이미지를 사용합니다.
| 앱 개발자, AWS 시스템 관리자 |
서비스 역할을 선택합니다. | 서비스 역할을 생성하거나 기존 역할 목록에서 선택할 수 있습니다. | 앱 개발자, AWS 시스템 관리자 |
환경 변수를 추가합니다. | 추가 구성 섹션에서 다음 환경 변수를 구성합니다.
이러한 변수는 | 앱 개발자, AWS 시스템 관리자 |
buildspec 파일을 생성합니다. |
| 앱 개발자, AWS 시스템 관리자 |
아티팩트를 위한 프로젝트를 구성합니다. | (선택 사항) 필요한 경우 아티팩트에 대한 빌드 프로젝트를 구성합니다. | 앱 개발자, AWS 시스템 관리자 |
Amazon CloudWatch 로그를 구성합니다. | (선택 사항) 필요한 경우 빌드 프로젝트에 대해 Amazon CloudWatch Logs를 구성합니다. 이 단계는 선택 사항이며, 권장 사항은 아닙니다. | 앱 개발자, AWS 시스템 관리자 |
Amazon S3 로그를 구성합니다. | (선택 사항) 로그를 저장하고자 하는 경우 빌드 프로젝트에 대한 Amazon Simple Storage Service(Amazon S3) 로그를 구성합니다. | 앱 개발자, AWS 시스템 관리자 |
작업 | 설명 | 필요한 기술 |
---|---|---|
파이프라인 생성. | AWS CodePipeline 콘솔에서 | 앱 개발자, AWS 시스템 관리자 |
서비스 역할을 선택합니다. | 서비스 역할을 생성하거나 기존 서비스 역할 목록에서 선택합니다. 서비스 역할을 생성하는 경우 역할 이름을 제공하고 역할 생성 옵션을 선택하십시오. CodePipeline | 앱 개발자, AWS 시스템 관리자 |
아티팩트 스토어를 선택합니다. | 고급 설정에서 Amazon S3가 버킷을 생성하고 그 안에 아티팩트를 저장하도록 하려면 아티팩트 스토어의 기본 위치를 사용해야 합니다. 또는 사용자 지정 위치를 선택하고 기존 버킷을 지정합니다. 암호화 키를 사용하여 아티팩트 암호화를 선택할 수도 있습니다. | 앱 개발자, AWS 시스템 관리자 |
소스 공급자를 지정합니다. | 소스 제공자의 경우 GitHub (버전 2) 를 선택합니다. | 앱 개발자, AWS 시스템 관리자 |
리포지토리와 코드의 브랜치를 선택합니다. | 로그인하지 않은 경우 연결할 GitHub 연결 세부 정보를 제공한 다음 리포지토리 이름과 분기 이름을 선택합니다. | 앱 개발자, AWS 시스템 관리자 |
탐지 옵션을 변경합니다. | 소스 코드 변경 시 파이프라인 시작을 선택하고 다음 페이지로 이동합니다. | 앱 개발자, AWS 시스템 관리자 |
빌드 공급자를 선택합니다. | 빌드 공급자의 경우 AWS를 CodeBuild 선택한 다음 빌드 프로젝트에 대한 AWS 지역 및 프로젝트 이름 세부 정보를 제공합니다. 빌드 유형에서 단일 빌드를 선택합니다. | 앱 개발자, AWS 시스템 관리자 |
배포 공급자를 선택합니다. | 배포 공급자의 경우, Amazon ECS를 선택합니다. 필요한 경우 클러스터 이름, 서비스 이름, 이미지 정의 파일(있는 경우) 및 배포 제한 시간 값을 선택합니다. 파이프라인 생성을 선택합니다. | 앱 개발자, AWS 시스템 관리자 |