AWS CodePipelineAWS CodeCommit, 및 를 사용하여 여러 AWS 지역에 코드 배포 AWS CodeBuild - AWS 권장 가이드

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

AWS CodePipelineAWS CodeCommit, 및 를 사용하여 여러 AWS 지역에 코드 배포 AWS CodeBuild

작성자: 아난드 크리슈나 바라나시 () AWS

제작자: AWS

환경: PoC 또는 파일럿

기술: 관리 및 거버넌스, DevOps

AWS서비스: AWS CodeCommit; AWS CodePipeline; AWS CodeBuild

요약

이 패턴은 를 사용하여 AWS CloudFormation 여러 Amazon Web Services (AWS) 지역에 인프라 또는 아키텍처를 구축하는 방법을 보여줍니다. 여기에는 더 빠른 배포를 위해 여러 AWS 지역에 걸친 지속적 통합 (CI) /지속적 배포 (CD) 가 포함됩니다. 이 패턴의 단계는 예를 들어 3개 AWS 지역에 배포할 AWS CodePipeline 작업을 생성하기 위해 테스트되었습니다. 사용 사례를 바탕으로 리전의 수를 변경할 수 있습니다.

사전 조건 및 제한 사항

사전 조건 

  • 활성 상태의 AWS 계정.

  • 테스트, 번들링, 아티팩트 패키징, 여러 지역에 AWS CloudFormation 병렬로 CodeBuild 배포하는 등의 CI 작업을 수행하기 위한 AWS Identity and Access Management (IAM) 역할 2개와 적절한 정책 AWS 적용 AWS CodeBuild   참고: 에서 만든 정책을 CodePipeline 꼼꼼히 검토하여 CI CodeBuild 및 CD AWS CloudFormation 단계에서 적절한 권한이 있는지 확인하십시오.

    • CodeBuild FullAccessAmazonS3 및 정책과 관련된 역할. CloudWatchFullAccess 이러한 정책은 Amazon을 AWS CodeCommit 통해 이벤트를 CloudWatch 시청하고 Amazon Simple Storage Service (Amazon S3) 를 아티팩트 스토어로 사용할 수 있는 CodeBuild 액세스 권한을 부여합니다.

    • 최종 빌드 단계에서 AWS Lambda 함수를 생성 또는 업데이트하고, CloudWatch Amazon 로그를 푸시하거나 감시하고, 변경 세트를 생성 및 업데이트할 수 있는 기능을 제공하는 AWS CloudFormation 다음 정책이 적용된 AWS CloudFormation 역할입니다. 

      • AWSLambdaFullAccess

      • AWSCodeDeployFullAccess

      • CloudWatchFullAccess

      • AWSCloudFormationFullAccess

      • AWSCodePipelineFullAccess

아키텍처

3개 지역에 배포되는 AWS CodePipeline 작업입니다. AWS

이 패턴의 다중 리전 아키텍처 및 워크플로는 다음 단계로 구성됩니다.

  1. CodeCommit 리포지토리로 코드를 전송합니다.

  2. 코드 업데이트 또는 커밋을 받으면 이벤트를 CodeCommit 호출하고, CloudWatch 이벤트가 다시 CodePipeline 작업을 시작합니다.

  3. CodePipeline 에서 처리하는 CI를 참여시킵니다. CodeBuild 다음과 같은 작업이 수행됩니다.

    • AWS CloudFormation 템플릿 테스트 (선택 사항)

    • 배포에 포함된 각 지역의 AWS CloudFormation 템플릿 패키징 예를 들어 이 패턴은 3개 지역에 병렬로 배포되므로 AWS CloudFormation 템플릿을 지정된 각 AWS 지역에 하나씩 총 3개의 S3 버킷으로 CodeBuild 패키징합니다. 에서 S3 버킷은 아티팩트 CodeBuild 리포지토리로만 사용됩니다.

  4. CodeBuild 세 AWS 지역에서 병렬로 실행되는 다음 배포 단계를 위한 입력으로 아티팩트를 패키징합니다. 지역 수를 다르게 CodePipeline 지정하면 해당 지역에 배포됩니다.

도구

도구

  • AWS CodePipeline— 소프트웨어 변경 사항을 지속적으로 릴리스하는 데 필요한 단계를 모델링, 시각화 및 자동화하는 데 사용할 수 있는 지속적 전달 CodePipeline 서비스입니다.

  • AWS CodeBuild— 소스 코드를 컴파일하고, 단위 테스트를 실행하고, 배포할 준비가 된 아티팩트를 생성하는 완전 관리형 빌드 CodeBuild 서비스입니다.

  • AWS CodeCommit— CodeCommit Amazon Web Services에서 호스팅하는 버전 제어 서비스로, 클라우드의 자산 (예: 소스 코드 및 바이너리 파일) 을 비공개로 저장하고 관리하는 데 사용할 수 있습니다.

  • AWS CloudFormation— AWS CloudFormation Amazon Web Services 리소스를 모델링하고 설정하여 리소스를 관리하는 시간을 줄이고 실행되는 애플리케이션에 더 많은 시간을 집중할 수 있도록 도와주는 AWS 서비스입니다.

  • AWSID 및 액세스 관리 — AWS ID 및 액세스 관리 (IAM) 는 AWS 리소스에 대한 액세스를 안전하게 제어하는 데 도움이 되는 웹 서비스입니다.

  • Amazon S3 – Amazon Simple Storage Service(S3)는 인터넷에 대한 스토리지입니다. 이 서비스는 개발자가 더 쉽게 웹 규모 컴퓨팅 작업을 수행할 수 있도록 설계되었습니다.

코드

다음 샘플 코드는 BuildSpec.yaml 파일용 샘플 코드입니다(빌드 단계).

--- artifacts: discard-paths: true files: - packaged-first-region.yaml - packaged-second-region.yaml - packaged-third-region.yaml phases: build: commands: - echo "********BUILD PHASE - CF PACKAGING**********" - "aws cloudformation package --template-file sam-template.yaml --s3-bucket $S3_FIRST_REGION --output-template-file packaged-first-region.yaml --region $FIRST_REGION" - "aws cloudformation package --template-file sam-template.yaml --s3-bucket $S3_SECOND_REGION --output-template-file packaged-second-region.yaml --region $SECOND_REGION" - "aws cloudformation package --template-file sam-template-anand.yaml --s3-bucket $S3_THIRD_REGION --output-template-file packaged-third-region.yaml --region $THIRD_REGION" install: commands: - echo "********BUILD PHASE - PYTHON SETUP**********" runtime-versions: python: 3.8 post_build: commands: - echo "********BUILD PHASE - PACKAGING COMPLETION**********" pre_build: commands: - echo "********BUILD PHASE - DEPENDENCY SETUP**********" - "npm install --silent --no-progress" - echo "********BUILD PHASE - DEPENDENCY SETUP DONE**********" version: 0.2

에픽

작업설명필요한 기술

배포할 기본 AWS 지역을 선택합니다.

AWS계정에 로그인하고 배포할 기본 지역을 선택합니다. CodeCommit 리포지토리는 기본 지역에 위치합니다.

DevOps

CodeCommit 리포지토리를 생성합니다.

CodeCommit 리포지토리를 만들고 필요한 코드를 해당 리포지토리에 푸시합니다. 코드에는 일반적으로 AWS CloudFormation 또는 AWS SAM 템플릿, Lambda 코드 (있는 경우) 및 파일에 CodeBuild buildspec.yaml 대한 입력이 포함됩니다. AWS CodePipeline

DevOps

코드를 리포지토리로 푸시합니다. CodeCommit

첨부 섹션에서 이 예제의 코드를 다운로드한 다음 필요한 코드를 여기에 푸시합니다. 일반적으로 코드에는 AWS SAM 템플릿, Lambda 코드 및 파일을 파이프라인에 CodeBuild buildspec.yaml 대한 입력으로 포함할 AWS CloudFormation 수 있습니다.

DevOps
작업설명필요한 기술

작업을 생성합니다. CodePipeline

CodePipeline 콘솔에서 파이프라인 생성을 선택합니다.

DevOps

CodePipeline 작업 이름을 지정하고 서비스 역할 설정을 선택합니다.

작업 이름을 입력하고 기본 서비스 역할 설정을 그대로 유지하여 필요한 정책이 첨부된 역할을 CodePipeline 생성합니다.

DevOps

아티팩트 스토어의 위치를 지정합니다.

고급 설정에서 기본 옵션을 유지하여 코드 아티팩트 스토리지에 사용할 S3 버킷을 CodePipeline 생성합니다. 기존 S3 버킷을 대신 사용하는 경우 버킷은 첫 번째 에픽에서 지정한 기본 리전에 있어야 합니다.

DevOps

암호화 키를 지정합니다.

기본 옵션인 기본 AWS 관리 키를 그대로 사용하거나 자체 키 관리 서비스 (AWSKMS) 고객 관리 AWS 키를 사용하도록 선택하십시오.

DevOps

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

소스 제공업체에서 원하는 것을 선택합니다 AWS CodeCommit.

DevOps

리포지토리를 지정합니다.

첫 번째 에픽에서 만든 CodeCommit 리포지토리를 선택합니다. 브랜치에 코드를 삽입했다면 브랜치를 선택하십시오.

DevOps

코드 변경을 감지하는 방법을 지정하십시오.

CodePipeline 작업을 시작하기 위한 변경 트리거로 기본값인 Amazon CloudWatch CodeCommit Events를 유지하십시오.

DevOps
작업설명필요한 기술

빌드 제공자를 지정하십시오.

빌드 제공자의 경우 선택하십시오 AWS CodeBuild.

DevOps

AWS지역을 지정하세요.

첫 번째 에픽에서 지정한 기본 리전을 선택합니다.

DevOps
작업설명필요한 기술

프로젝트 생성

프로젝트 생성을 선택한 다음, 프로젝트의 이름을 입력합니다.

DevOps

환경 이미지를 지정하십시오.

이 패턴 데모에서는 기본 CodeBuild 관리 이미지를 사용하십시오. 사용자 지정 도커 이미지가 있는 경우 이를 사용할 수도 있습니다.

DevOps

운영 체제를 지정하십시오.

Amazon Linux 2 또는 Ubuntu를 선택합니다.

참고: Amazon Linux 2의 지원이 거의 종료되었습니다. 자세한 내용은 Amazon Linux 2를 참조하십시오FAQs.

DevOps

서비스 역할을 지정합니다.

CodePipeline 작업 생성을 CodeBuild 시작하기 전에 생성한 역할을 선택하십시오. (사전 조건 섹션 참조)

DevOps

추가 옵션을 설정하십시오.

제한 시간대기 중인 제한시간의 경우 기본값을 유지하십시오. 인증서의 경우 사용하려는 사용자 지정 인증서가 없는 한 기본 설정을 유지하십시오.

DevOps

환경 변수를 생성합니다.

배포하려는 각 AWS 지역에 대해 S3 버킷 이름과 지역 이름 (예: us-east-1) 을 제공하여 환경 변수를 생성합니다.

DevOps

buildspec.yml이 아닌 경우 buildspec 파일 이름을 입력하십시오.

파일 이름이 기본값인 경우 이 필드를 비워 두세요, buildspec.yaml. buildspec 파일의 이름을 변경한 경우 여기에 이름을 입력하십시오. 리포지토리에 있는 파일 이름과 일치하는지 확인하십시오. CodeCommit

DevOps

로깅을 지정합니다.

Amazon CloudWatch Events의 로그를 보려면 기본 설정을 유지하십시오. 또는 특정 그룹 또는 로거 이름을 정의할 수 있습니다.

DevOps
작업설명필요한 기술

배포 단계를 건너뛰고 파이프라인 생성을 완료하십시오.

파이프라인을 설정하면 배포 단계에서 한 단계만 생성할 CodePipeline 수 있습니다. 여러 AWS 지역에 배포하려면 이 단계를 건너뛰세요. 파이프라인이 생성된 후 여러 배포 단계를 추가할 수 있습니다.

DevOps
작업설명필요한 기술

배포 단계에 스테이지를 추가합니다.

파이프라인을 편집하고 배포 단계에서 스테이지 추가를 선택합니다. 이 첫 번째 스테이지는 기본 리전을 위한 것입니다.

DevOps

스테이지의 액션 이름을 입력합니다.

첫 번째 (기본) 스테이지와 리전을 반영하는 고유한 이름을 입력합니다. 예를 들어, primary_<region>_deploy를 입력합니다.

DevOps

작업 제공자를 지정하십시오.

액션 제공자의 경우 선택합니다 AWS CloudFormation.

DevOps

첫 번째 스테이지를 위한 리전을 구성합니다.

CodePipeline 및 CodeBuild 가 설정된 지역과 동일한 첫 번째 (기본) 지역을 선택합니다. 스택을 배포할 기본 리전입니다.

DevOps

입력 아티팩트를 지정합니다.

선택하세요 BuildArtifact. 빌드 단계의 출력입니다.

DevOps

취할 작업을 지정합니다.

작업 모드에서 스택 생성 또는 업데이트를 선택합니다.

DevOps

CloudFormation 스택 이름을 입력합니다.

DevOps

첫 번째 리전의 템플릿을 지정합니다.

첫 번째 (기본) 지역의 S3 버킷에서 CodeBuild 패키징하여 덤프한 지역별 패키지 이름을 선택합니다.

DevOps

기능을 지정합니다.

스택 템플릿에 IAM 리소스가 포함되어 있거나 매크로가 포함된 템플릿에서 직접 스택을 생성하는 경우 기능이 필요합니다. 이 패턴의 경우 _, CAPABILITY _ _ IAMIAM, CAPABILITY NAMED CAPABILITY AUTO _ EXPAND _를 사용합니다.

DevOps
작업설명필요한 기술

배포 단계에 두 번째 스테이지를 추가합니다.

두 번째 리전에 스테이지를 추가하려면 파이프라인을 편집하고 배포 단계에서 스테이지 추가를 선택합니다. 중요: 두 번째 리전을 만드는 과정은 다음 값을 제외하고 첫 번째 리전을 만드는 프로세스와 동일합니다.

DevOps

두 번째 스테이지의 액션 이름을 입력합니다.

두 번째 스테이지와 두 번째 리전을 반영하는 고유한 이름을 입력합니다.

DevOps

두 번째 스테이지를 위한 리전을 구성합니다.

스택을 배포하려는 두 번째 리전을 선택합니다.

DevOps

두 번째 리전의 템플릿을 지정합니다.

두 번째 지역의 경우 CodeBuild 패키징하여 S3 버킷에 덤프한 리전별 패키지 이름을 선택합니다.

DevOps
작업설명필요한 기술

배포 단계에 세 번째 스테이지를 추가합니다.

세 번째 리전에 스테이지를 추가하려면 파이프라인을 편집하고 배포 단계에서 스테이지 추가를 선택합니다. 중요: 세 번째 리전을 만드는 과정은 다음 값을 제외하고 이전 두 개 리전을 만드는 프로세스와 동일합니다.

DevOps

세 번째 스테이지의 액션 이름을 입력합니다.

세 번째 스테이지와 세 번째 리전을 반영하는 고유한 이름을 입력합니다.

DevOps

세 번째 스테이지를 위한 리전을 구성합니다.

스택을 배포하려는 세 번째 리전을 선택합니다.

DevOps

세 번째 리전의 템플릿을 지정합니다.

패키징하여 세 번째 지역의 S3 버킷에 덤프한 지역별 CodeBuild 패키지 이름을 선택합니다.

DevOps
작업설명필요한 기술

리소스를 삭제합니다. AWS

배포를 정리하려면 각 지역의 CloudFormation 스택을 삭제하세요. 그런 다음 기본 지역에서 CodeCommit CodeBuild,, CodePipeline 리소스를 삭제합니다.

DevOps

관련 리소스

첨부

이 문서와 관련된 추가 콘텐츠에 액세스하려면 attachment.zip 파일의 압축을 풉니다.