쿠키 기본 설정 선택

당사는 사이트와 서비스를 제공하는 데 필요한 필수 쿠키 및 유사한 도구를 사용합니다. 고객이 사이트를 어떻게 사용하는지 파악하고 개선할 수 있도록 성능 쿠키를 사용해 익명의 통계를 수집합니다. 필수 쿠키는 비활성화할 수 없지만 '사용자 지정' 또는 ‘거부’를 클릭하여 성능 쿠키를 거부할 수 있습니다.

사용자가 동의하는 경우 AWS와 승인된 제3자도 쿠키를 사용하여 유용한 사이트 기능을 제공하고, 사용자의 기본 설정을 기억하고, 관련 광고를 비롯한 관련 콘텐츠를 표시합니다. 필수가 아닌 모든 쿠키를 수락하거나 거부하려면 ‘수락’ 또는 ‘거부’를 클릭하세요. 더 자세한 내용을 선택하려면 ‘사용자 정의’를 클릭하세요.

AWS 코드 서비스 및 AWS KMS 다중 리전 키를 사용하여 여러 계정 및 리전에 대한 마이크로서비스의 블루/그린 배포를 관리 - 권장 가이드

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

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

AWS 코드 서비스 및 AWS KMS 다중 리전 키를 사용하여 여러 계정 및 리전에 대한 마이크로서비스의 블루/그린 배포를 관리

작성자: Balaji Vedagiri(AWS), Ashish Kumar(AWS), Faisal Shahdad(AWS), Anand Krishna Varanasi(AWS), Vanitha Dontireddy(AWS), Vivek Thangamuthu(AWS)

요약

알림: AWS CodeCommit 신규 고객은 더 이상 사용할 수 없습니다. 의 기존 고객은 평소와 같이 서비스를 계속 사용할 AWS CodeCommit 수 있습니다. 자세히 알아보기

이 패턴은 블루/그린 배포 전략에 따라 중앙 AWS 계정에서 여러 워크로드 계정 및 리전으로 글로벌 마이크로서비스 애플리케이션을 배포하는 방법을 설명합니다. 이 패턴은 다음을 지원합니다.

  • 소프트웨어는 중앙 계정에서 개발되는 반면, 워크로드와 애플리케이션은 여러 계정과 AWS 리전에 분산되어 있습니다.

  • 단일 AWS Key Management System(AWS KMS) 다중 리전 키는 재해 복구를 위한 암호화 및 복호화에 사용됩니다.

  • KMS 키는 리전별로 다르며 파이프라인 아티팩트를 위해 세 개의 다른 리전에서 유지 관리하거나 생성해야 합니다. KMS 다중 리전 키는 여러 리전에서 동일한 키 ID를 유지하는 데 도움이 됩니다.

  • Git 워크플로 브랜칭 모델은 두 개의 브랜치(개발 및 메인)로 구현되며 풀 리퀘스트(PR)를 사용하여 코드를 병합합니다. 이 스택에서 배포되는 AWS Lambda 함수는 개발 브랜치에서 메인 브랜치로 PR을 생성합니다. 메인 브랜치에 대한 PR 병합은 지속적 통합 및 지속적 전달(CI/CD) 흐름을 오케스트레이션하고 계정 전체에 스택을 배포하는 AWS CodePipeline 파이프라인을 시작합니다.

이 패턴은 이러한 사용 사례를 보여주기 위해 AWS CloudFormation 스택을 통해 코드형 인프라(IaC) 설정 샘플을 제공합니다. 마이크로서비스의 블루/그린 배포는 AWS CodeDeploy를 사용하여 구현됩니다.

사전 조건 및 제한 사항

사전 조건 

  • 활성 AWS 계정 4개:

    • 코드 파이프라인을 관리하고 AWS CodeCommit 리포지토리를 유지 관리하기 위한 도구 계정.

    • 마이크로서비스 워크로드를 배포하기 위한 세 가지 워크로드(테스트) 계정.

  • 이 패턴은 다음 리전을 사용합니다. 다른 리전을 사용하려면 AWS CodeDeploy 및 AWS KMS 다중 리전 스택을 적절하게 수정해야 합니다.

    • 도구(AWS CodeCommit) 계정: ap-south-1

    • 워크로드(테스트) 계정 1: ap-south-1

    • 워크로드(테스트) 계정 2: eu-central-1

    • 워크로드(테스트) 계정 3: us-east-1

  • 각 워크로드 계정의 배포 리전을 위한 Amazon Simple Storage Service(S3) 버킷 3개. (나중에 이 패턴에서 S3BUCKETNAMETESTACCOUNT1, S3BUCKETNAMETESTACCOUNT2 , S3BUCKETNAMETESTACCOUNT3 으로 불립니다.)

    예를 들어 다음과 같이 고유한 버킷 이름을 사용하여 특정 계정 및 리전에 이러한 버킷을 생성할 수 있습니다(xxxx를 임의의 숫자로 대체).

    ##In Test Account 1 aws s3 mb s3://ecs-codepipeline-xxxx-ap-south-1 --region ap-south-1 ##In Test Account 2 aws s3 mb s3://ecs-codepipeline-xxxx-eu-central-1 --region eu-central-1 ##In Test Account 3 aws s3 mb s3://ecs-codepipeline-xxxx-us-east-1 --region us-east-1 #Example ##In Test Account 1 aws s3 mb s3://ecs-codepipeline-18903-ap-south-1 --region ap-south-1 ##In Test Account 2 aws s3 mb s3://ecs-codepipeline-18903-eu-central-1 --region eu-central-1 ##In Test Account 3 aws s3 mb s3://ecs-codepipeline-18903-us-east-1 --region us-east-1

제한 사항

이 패턴은 AWS CodeBuild 및 기타 구성 파일을 사용하여 샘플 마이크로서비스를 배포합니다. 여러 워크로드 유형(예: 서버리스)이 있는 경우 모든 관련 구성을 업데이트해야 합니다.

아키텍처

대상 기술 스택

  • AWS CloudFormation

  • CodeCommit

  • AWS CodeBuild

  • AWS CodeDeploy

  • AWS CodePipeline

대상 아키텍처

여러 계정 및 리전에 마이크로서비스를 배포하기 위한 대상 아키텍처

자동화 및 규모 조정

이 설정은 AWS CloudFormation 스택 템플릿(IaC)을 사용하여 자동화됩니다. 여러 환경 및 계정에 맞게 쉽게 확장할 수 있습니다.

도구

서비스

  • AWS CloudFormation을 사용하면 AWS 리소스를 설정하고, 빠르고 일관되게 프로비저닝하고, 전체 AWS 계정 및 리전에서 수명 주기 전반에 걸쳐 관리할 수 있습니다.

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

  • AWS CodeCommit은 나만의 소스 제어 시스템을 관리할 필요 없이 Git 리포지토리를 비공개로 저장하고 관리할 수 있는 버전 제어 서비스입니다.

  • AWS CodeDeploy는 Amazon Elastic Compute Cloud(Amazon EC2) 또는 온프레미스 인스턴스, AWS Lambda 함수 또는 Amazon Elastic Container Service(Amazon ECS) 서비스에 대한 배포를 자동화합니다.

  • AWS CodePipeline은 소프트웨어 릴리스의 여러 단계를 신속하게 모델링하고 구성하고 소프트웨어 변경 내용을 지속적으로 릴리스하는 데 필요한 단계를 자동화합니다.

  • Amazon Elastic Container Registry(Amazon ECR)는 안전하고 확장 가능하고 신뢰할 수 있는 관리형 컨테이너 이미지 레지스트리 서비스입니다.

  • Amazon Elastic Container Service(Amazon ECS)는 클러스터에서 컨테이너를 실행, 중지 및 관리하는 데 도움이 되는 빠르고 확장 가능한 컨테이너 관리 서비스입니다.

  • AWS Key Management Service(AWS KMS)를 사용하면 암호화 키를 생성하고 제어하여 데이터를 보호할 수 있습니다.

  • Amazon Simple Storage Service(S3)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다.

추가 도구

  • Git은 AWS CodeCommit 리포지토리와 함께 작동하는 오픈 소스 분산 버전 제어 시스템입니다.

  • Docker는 운영 체제 수준의 가상화를 사용하여 컨테이너에 소프트웨어를 제공하는 서비스형 플랫폼(PaaS) 제품 세트입니다. 이 패턴은 Docker를 사용하여 로컬에서 컨테이너 이미지를 구축하고 테스트합니다.

  • cfn-lintcfn-nag는 CloudFormation 스택에서 오류 및 보안 문제를 검토하는 데 도움이 되는 오픈 소스 도구입니다.

코드 리포지토리

이 패턴의 코드는 GitHub의 여러 리전 및 계정의 글로벌 블루/그린 배포 리포지토리에서 사용할 수 있습니다.

에픽

작업설명필요한 기술

CloudFormation 스택 배포를 위한 환경 변수를 내보냅니다.

이 패턴에서 나중에 CloudFormation 스택에 입력으로 사용할 환경 변수를 정의합니다.

  1. 사전 요구 사항 섹션의 앞부분에 설명된 대로 세 개의 계정 및 리전에서 생성한 버킷 이름을 업데이트합니다.

    export S3BUCKETNAMETESTACCOUNT1=<S3BUCKETACCOUNT1> export S3BUCKETNAMETESTACCOUNT2=<S3BUCKETACCOUNT2> export S3BUCKETNAMETESTACCOUNT3=<S3BUCKETACCOUNT3>
  2. 버킷 이름은 전 세계적으로 고유해야 하므로 임의의 문자열을 정의하여 아티팩트 버킷을 생성하세요.

    export BUCKETSTARTNAME=ecs-codepipeline-artifacts-19992
  3. 계정 ID와 리전 정의 및 내보내기:

    export TOOLSACCOUNT=<TOOLSACCOUNT> export CODECOMMITACCOUNT=<CODECOMMITACCOUNT> export CODECOMMITREGION=ap-south-1 export CODECOMMITREPONAME=Poc export TESTACCOUNT1=<TESTACCOUNT1> export TESTACCOUNT2=<TESTACCOUNT2> export TESTACCOUNT3=<TESTACCOUNT3> export TESTACCOUNT1REGION=ap-south-1 export TESTACCOUNT2REGION=eu-central-1 export TESTACCOUNT3REGION=us-east-1 export TOOLSACCOUNTREGION=ap-south-1 export ECRREPOSITORYNAME=web
AWS DevOps

환경 변수 설정

작업설명필요한 기술

CloudFormation 스택 배포를 위한 환경 변수를 내보냅니다.

이 패턴에서 나중에 CloudFormation 스택에 입력으로 사용할 환경 변수를 정의합니다.

  1. 사전 요구 사항 섹션의 앞부분에 설명된 대로 세 개의 계정 및 리전에서 생성한 버킷 이름을 업데이트합니다.

    export S3BUCKETNAMETESTACCOUNT1=<S3BUCKETACCOUNT1> export S3BUCKETNAMETESTACCOUNT2=<S3BUCKETACCOUNT2> export S3BUCKETNAMETESTACCOUNT3=<S3BUCKETACCOUNT3>
  2. 버킷 이름은 전 세계적으로 고유해야 하므로 임의의 문자열을 정의하여 아티팩트 버킷을 생성하세요.

    export BUCKETSTARTNAME=ecs-codepipeline-artifacts-19992
  3. 계정 ID와 리전 정의 및 내보내기:

    export TOOLSACCOUNT=<TOOLSACCOUNT> export CODECOMMITACCOUNT=<CODECOMMITACCOUNT> export CODECOMMITREGION=ap-south-1 export CODECOMMITREPONAME=Poc export TESTACCOUNT1=<TESTACCOUNT1> export TESTACCOUNT2=<TESTACCOUNT2> export TESTACCOUNT3=<TESTACCOUNT3> export TESTACCOUNT1REGION=ap-south-1 export TESTACCOUNT2REGION=eu-central-1 export TESTACCOUNT3REGION=us-east-1 export TOOLSACCOUNTREGION=ap-south-1 export ECRREPOSITORYNAME=web
AWS DevOps
작업설명필요한 기술

리포지토리를 복제합니다.

샘플 리포지토리를 작업 위치의 새 리포지토리로 복제하세요.

##In work location git clone https://github.com/aws-samples/ecs-blue-green-global-deployment-with-multiregion-cmk-codepipeline.git
AWS DevOps

CloudFormation 리소스를 패키징하세요.

이 단계에서는 CloudFormation 템플릿이 참조하는 로컬 아티팩트를 패키징하여 Amazon Virtual Private Cloud(VPC) 및 Application Load Balancer와 같은 서비스에 필요한 인프라 리소스를 생성합니다.

템플릿은 코드 리포지토리의 Infra 폴더에서 사용할 수 있습니다.

##In TestAccount1## aws cloudformation package \ --template-file mainInfraStack.yaml \ --s3-bucket $S3BUCKETNAMETESTACCOUNT1 \ --s3-prefix infraStack \ --region $TESTACCOUNT1REGION \ --output-template-file infrastructure_${TESTACCOUNT1}.template
##In TestAccount2## aws cloudformation package \ --template-file mainInfraStack.yaml \ --s3-bucket $S3BUCKETNAMETESTACCOUNT2 \ --s3-prefix infraStack \ --region $TESTACCOUNT2REGION \ --output-template-file infrastructure_${TESTACCOUNT2}.template
##In TestAccount3## aws cloudformation package \ --template-file mainInfraStack.yaml \ --s3-bucket $S3BUCKETNAMETESTACCOUNT3 \ --s3-prefix infraStack \ --region $TESTACCOUNT3REGION \ --output-template-file infrastructure_${TESTACCOUNT3}.template
AWS DevOps

패키지 템플릿을 검증하세요.

패키지 템플릿 검증:

aws cloudformation validate-template \ --template-body file://infrastructure_${TESTACCOUNT1}.template aws cloudformation validate-template \ --template-body file://infrastructure_${TESTACCOUNT2}.template aws cloudformation validate-template \ --template-body file://infrastructure_${TESTACCOUNT3}.template
AWS DevOps

패키지 파일을 워크로드 계정에 배포하고,

  1. 설정에 따라 nfraParameters.json 스크립트의 자리 표시자 값과 계정 이름을 업데이트합니다.

  2. 패키지 템플릿을 세 개의 워크로드 계정에 배포하세요.

    ##In TestAccount1## aws cloudformation deploy \ --template-file infrastructure_${TESTACCOUNT1}.template \ --stack-name mainInfrastack \ --parameter-overrides file://infraParameters.json \ --region $TESTACCOUNT1REGION \ --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM ##In TestAccount2## aws cloudformation deploy \ --template-file infrastructure_${TESTACCOUNT2}.template \ --stack-name mainInfrastack \ --parameter-overrides file://infraParameters.json \ --region $TESTACCOUNT2REGION \ --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM ##In TestAccount3## aws cloudformation deploy \ --template-file infrastructure_${TESTACCOUNT3}.template \ --stack-name mainInfrastack \ --parameter-overrides file://infraParameters.json \ --region $TESTACCOUNT3REGION \ --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM
AWS DevOps

인프라용 CloudFormation 스택을 패키징하고 배포

작업설명필요한 기술

리포지토리를 복제합니다.

샘플 리포지토리를 작업 위치의 새 리포지토리로 복제하세요.

##In work location git clone https://github.com/aws-samples/ecs-blue-green-global-deployment-with-multiregion-cmk-codepipeline.git
AWS DevOps

CloudFormation 리소스를 패키징하세요.

이 단계에서는 CloudFormation 템플릿이 참조하는 로컬 아티팩트를 패키징하여 Amazon Virtual Private Cloud(VPC) 및 Application Load Balancer와 같은 서비스에 필요한 인프라 리소스를 생성합니다.

템플릿은 코드 리포지토리의 Infra 폴더에서 사용할 수 있습니다.

##In TestAccount1## aws cloudformation package \ --template-file mainInfraStack.yaml \ --s3-bucket $S3BUCKETNAMETESTACCOUNT1 \ --s3-prefix infraStack \ --region $TESTACCOUNT1REGION \ --output-template-file infrastructure_${TESTACCOUNT1}.template
##In TestAccount2## aws cloudformation package \ --template-file mainInfraStack.yaml \ --s3-bucket $S3BUCKETNAMETESTACCOUNT2 \ --s3-prefix infraStack \ --region $TESTACCOUNT2REGION \ --output-template-file infrastructure_${TESTACCOUNT2}.template
##In TestAccount3## aws cloudformation package \ --template-file mainInfraStack.yaml \ --s3-bucket $S3BUCKETNAMETESTACCOUNT3 \ --s3-prefix infraStack \ --region $TESTACCOUNT3REGION \ --output-template-file infrastructure_${TESTACCOUNT3}.template
AWS DevOps

패키지 템플릿을 검증하세요.

패키지 템플릿 검증:

aws cloudformation validate-template \ --template-body file://infrastructure_${TESTACCOUNT1}.template aws cloudformation validate-template \ --template-body file://infrastructure_${TESTACCOUNT2}.template aws cloudformation validate-template \ --template-body file://infrastructure_${TESTACCOUNT3}.template
AWS DevOps

패키지 파일을 워크로드 계정에 배포하고,

  1. 설정에 따라 nfraParameters.json 스크립트의 자리 표시자 값과 계정 이름을 업데이트합니다.

  2. 패키지 템플릿을 세 개의 워크로드 계정에 배포하세요.

    ##In TestAccount1## aws cloudformation deploy \ --template-file infrastructure_${TESTACCOUNT1}.template \ --stack-name mainInfrastack \ --parameter-overrides file://infraParameters.json \ --region $TESTACCOUNT1REGION \ --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM ##In TestAccount2## aws cloudformation deploy \ --template-file infrastructure_${TESTACCOUNT2}.template \ --stack-name mainInfrastack \ --parameter-overrides file://infraParameters.json \ --region $TESTACCOUNT2REGION \ --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM ##In TestAccount3## aws cloudformation deploy \ --template-file infrastructure_${TESTACCOUNT3}.template \ --stack-name mainInfrastack \ --parameter-overrides file://infraParameters.json \ --region $TESTACCOUNT3REGION \ --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM
AWS DevOps
작업설명필요한 기술

Amazon ECR 리포지토리에 샘플 이미지를 푸시합니다.

샘플(NGINX) 이미지를 web이라는 Amazon Elastic Container Registry(Amazon ECR) 리포지토리에 (파라미터에 설정된 대로)푸시합니다. 필요에 따라 이미지를 사용자 지정할 수 있습니다.

Amazon ECR에 이미지를 푸시하기 위해 로그인하고 보안 인증 정보를 설정하려면 Amazon ECR 설명서의 지침을 따르세요.

명령은 다음과 같습니다.

docker pull nginx docker images docker tag <imageid> aws_account_id.dkr.ecr.region.amazonaws.com/<web>:latest docker push <aws_account_id>.dkr.ecr.<region>.amazonaws.com/<web>:tag
AWS DevOps

Amazon ECS를 확장하고 액세스를 확인합니다.

  1. Amazon ECS를 확장하여 두 개의 복제본을 생성합니다.

    aws ecs update-service --cluster QA-Cluster --service Poc-Service --desired-count 2

    여기서 Poc-Service는 사용자의 샘플 애플리케이션을 의미합니다.

  2. 브라우저의 정규화된 도메인 이름(FQDN) 또는 DNS를 사용하거나 curl 명령을 사용하여 Application Load Balancer에서 서비스에 액세스할 수 있는지 확인합니다.

AWS DevOps

샘플 이미지를 푸시하고 Amazon ECS를 확장

작업설명필요한 기술

Amazon ECR 리포지토리에 샘플 이미지를 푸시합니다.

샘플(NGINX) 이미지를 web이라는 Amazon Elastic Container Registry(Amazon ECR) 리포지토리에 (파라미터에 설정된 대로)푸시합니다. 필요에 따라 이미지를 사용자 지정할 수 있습니다.

Amazon ECR에 이미지를 푸시하기 위해 로그인하고 보안 인증 정보를 설정하려면 Amazon ECR 설명서의 지침을 따르세요.

명령은 다음과 같습니다.

docker pull nginx docker images docker tag <imageid> aws_account_id.dkr.ecr.region.amazonaws.com/<web>:latest docker push <aws_account_id>.dkr.ecr.<region>.amazonaws.com/<web>:tag
AWS DevOps

Amazon ECS를 확장하고 액세스를 확인합니다.

  1. Amazon ECS를 확장하여 두 개의 복제본을 생성합니다.

    aws ecs update-service --cluster QA-Cluster --service Poc-Service --desired-count 2

    여기서 Poc-Service는 사용자의 샘플 애플리케이션을 의미합니다.

  2. 브라우저의 정규화된 도메인 이름(FQDN) 또는 DNS를 사용하거나 curl 명령을 사용하여 Application Load Balancer에서 서비스에 액세스할 수 있는지 확인합니다.

AWS DevOps
작업설명필요한 기술

도구 계정에서 CodeCommit 리포지토리를 생성합니다.

GitHub 리포지토리의 code 폴더에 있는 codecommit.yaml 템플릿을 사용하여 도구 계정에서 CodeCommit 리포지토리를 생성합니다. 코드를 개발하려는 리전 하나에만 이 리포지토리를 생성해야 합니다.

aws cloudformation deploy --stack-name codecommitrepoStack --parameter-overrides CodeCommitReponame=$CODECOMMITREPONAME \ ToolsAccount=$TOOLSACCOUNT --template-file codecommit.yaml --region $TOOLSACCOUNTREGION \ --capabilities CAPABILITY_NAMED_IAM
AWS DevOps

CodePipeline에서 생성된 아티팩트를 관리하기 위한 S3 버킷을 생성합니다.

GitHub 리포지토리의 code 폴더에 있는 pre-reqs-bucket.yaml 템플릿을 사용하여 CodePipeline에서 생성된 아티팩트를 관리하기 위한 S3 버킷을 생성합니다. 스택은 세 개의 워크로드(테스트) 및 도구 계정과 리전 모두에 배포되어야 합니다.

aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \ TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \ TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \ --template-file pre-reqs_bucket.yaml --region $TESTACCOUNT1REGION --capabilities CAPABILITY_NAMED_IAM aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \ TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \ TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \ --template-file pre-reqs_bucket.yaml --region $TESTACCOUNT2REGION --capabilities CAPABILITY_NAMED_IAM aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \ TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \ TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \ --template-file pre-reqs_bucket.yaml --region $TESTACCOUNT3REGION --capabilities CAPABILITY_NAMED_IAM aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \ TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \ TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \ --template-file pre-reqs_bucket.yaml --region $TOOLSACCOUNTREGION --capabilities CAPABILITY_NAMED_IAM
AWS DevOps

멀티 리전 KMS 키를 설정합니다.

  1. CodePipeline에서 사용할 프라이머리 키와 복제본 키로 다중 리전 KMS 키를 생성합니다. 이 예시에서는 ToolsAccount1region - ap-south-1이 기본 리전이 될 것입니다.

    aws cloudformation deploy --stack-name ecs-codepipeline-pre-reqs-KMS \ --template-file pre-reqs_KMS.yaml --parameter-overrides \ TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \ TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT --region $TOOLSACCOUNTREGION
  2. CodeBuild 프로젝트에 전달할 CMKARN 변수를 설정합니다. 이 값은 ecs-codepipeline-pre-reqs-KMS 템플릿 스택의 출력에서 사용할 수 있습니다(키 ID는 모든 리전에서 동일하고 mrk-로 시작됨). 또는 도구 계정에서 CMKARN 값을 가져올 수 있습니다. 모든 계정 세션에서 내보내기: 

    export CMKARN1=arn:aws:kms:ap-south-1:<TOOLSACCOUNTID>:key/mrk-xxx export CMKARN2=arn:aws:kms:eu-central-1:<TOOLSACCOUNTID>:key/mrk-xxx export CMKARN3=arn:aws:kms:us-east-1:<TOOLSACCOUNTID>:key/mrk-xxx export CMARNTOOLS=arn:aws:kms:ap-south-1:<TOOLSACCOUNTID>:key/mrk-xxx
AWS DevOps

도구 계정에서 CodeBuild 프로젝트를 설정합니다.

  1. GitHub 리포지토리 code 폴더의 codebuild_IAM.yaml 템플릿을 사용하여 도구 계정의 단일 리전에서 AWS CodeBuild용 AWS Identity and Access Management(IAM)를 설정합니다.

    #In ToolsAccount aws cloudformation deploy --stack-name ecs-codebuild-iam \ --template-file codebuild_IAM.yaml --region $TOOLSACCOUNTREGION \ --capabilities CAPABILITY_NAMED_IAM
  2. codebuild.yaml 템플릿을 사용하여 사용자의 구축 프로젝트에 대한 CodeBuild를 설정합니다. 이 템플릿을 다음과 같이 세 리전 모두에 배포하세요.

    aws cloudformation deploy --stack-name ecscodebuildstack --parameter-overrides ToolsAccount=$TOOLSACCOUNT \ CodeCommitRepoName=$CODECOMMITREPONAME ECRRepositoryName=$ECRREPOSITORYNAME APPACCOUNTID=$TESTACCOUNT1 \ TestAccount3=$TESTACCOUNT3 CodeCommitRegion=$CODECOMMITREGION CMKARN=$CMKARN1 \ --template-file codebuild.yaml --region $TESTACCOUNT1REGION --capabilities CAPABILITY_NAMED_IAM aws cloudformation deploy --stack-name ecscodebuildstack --parameter-overrides ToolsAccount=$TOOLSACCOUNT \ CodeCommitRepoName=$CODECOMMITREPONAME ECRRepositoryName=$ECRREPOSITORYNAME APPACCOUNTID=$TESTACCOUNT2 \ TestAccount3=$TESTACCOUNT3 CodeCommitRegion=$CODECOMMITREGION CMKARN=$CMKARN2 \ --template-file codebuild.yaml --region $TESTACCOUNT2REGION --capabilities CAPABILITY_NAMED_IAM aws cloudformation deploy --stack-name ecscodebuildstack --parameter-overrides ToolsAccount=$TOOLSACCOUNT \ CodeCommitRepoName=$CODECOMMITREPONAME ECRRepositoryName=$ECRREPOSITORYNAME APPACCOUNTID=$TESTACCOUNT3 \ CodeCommitRegion=$CODECOMMITREGION CMKARN=$CMKARN3 \ --template-file codebuild.yaml --region $TESTACCOUNT3REGION --capabilities CAPABILITY_NAMED_IAM
AWS DevOps

워크로드 계정에서 CodeDeploy를 설정합니다.

GitHub 리포지토리의 code 폴더에 있는 codedeploy.yaml 템플릿을 사용하여 세 가지 워크로드 계정 모두에 CodeDeploy를 설정합니다. mainInfraStack의 출력에는 Amazon ECS 클러스터의 Amazon 리소스 이름(ARN)과 Application Load Balancer 리스너가 포함됩니다.

참고

인프라 스택의 값은 이미 내보내져 있으므로 CodeDeploy 스택 템플릿에서 가져옵니다.

##WorkloadAccount1## aws cloudformation deploy --stack-name ecscodedeploystack \ --parameter-overrides ToolsAccount=$TOOLSACCOUNT mainInfrastackname=mainInfrastack \ --template-file codedeploy.yaml --region $TESTACCOUNT1REGION --capabilities CAPABILITY_NAMED_IAM ##WorkloadAccount2## aws cloudformation deploy --stack-name ecscodedeploystack \ --parameter-overrides ToolsAccount=$TOOLSACCOUNT mainInfrastackname=mainInfrastack \ --template-file codedeploy.yaml --region $TESTACCOUNT2REGION --capabilities CAPABILITY_NAMED_IAM ##WorkloadAccount3## aws cloudformation deploy --stack-name ecscodedeploystack \ --parameter-overrides ToolsAccount=$TOOLSACCOUNT mainInfrastackname=mainInfrastack \ --template-file codedeploy.yaml --region $TESTACCOUNT3REGION --capabilities CAPABILITY_NAMED_IAM
DevOps

코드 서비스 및 리소스 설정

작업설명필요한 기술

도구 계정에서 CodeCommit 리포지토리를 생성합니다.

GitHub 리포지토리의 code 폴더에 있는 codecommit.yaml 템플릿을 사용하여 도구 계정에서 CodeCommit 리포지토리를 생성합니다. 코드를 개발하려는 리전 하나에만 이 리포지토리를 생성해야 합니다.

aws cloudformation deploy --stack-name codecommitrepoStack --parameter-overrides CodeCommitReponame=$CODECOMMITREPONAME \ ToolsAccount=$TOOLSACCOUNT --template-file codecommit.yaml --region $TOOLSACCOUNTREGION \ --capabilities CAPABILITY_NAMED_IAM
AWS DevOps

CodePipeline에서 생성된 아티팩트를 관리하기 위한 S3 버킷을 생성합니다.

GitHub 리포지토리의 code 폴더에 있는 pre-reqs-bucket.yaml 템플릿을 사용하여 CodePipeline에서 생성된 아티팩트를 관리하기 위한 S3 버킷을 생성합니다. 스택은 세 개의 워크로드(테스트) 및 도구 계정과 리전 모두에 배포되어야 합니다.

aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \ TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \ TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \ --template-file pre-reqs_bucket.yaml --region $TESTACCOUNT1REGION --capabilities CAPABILITY_NAMED_IAM aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \ TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \ TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \ --template-file pre-reqs_bucket.yaml --region $TESTACCOUNT2REGION --capabilities CAPABILITY_NAMED_IAM aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \ TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \ TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \ --template-file pre-reqs_bucket.yaml --region $TESTACCOUNT3REGION --capabilities CAPABILITY_NAMED_IAM aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \ TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \ TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \ --template-file pre-reqs_bucket.yaml --region $TOOLSACCOUNTREGION --capabilities CAPABILITY_NAMED_IAM
AWS DevOps

멀티 리전 KMS 키를 설정합니다.

  1. CodePipeline에서 사용할 프라이머리 키와 복제본 키로 다중 리전 KMS 키를 생성합니다. 이 예시에서는 ToolsAccount1region - ap-south-1이 기본 리전이 될 것입니다.

    aws cloudformation deploy --stack-name ecs-codepipeline-pre-reqs-KMS \ --template-file pre-reqs_KMS.yaml --parameter-overrides \ TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \ TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT --region $TOOLSACCOUNTREGION
  2. CodeBuild 프로젝트에 전달할 CMKARN 변수를 설정합니다. 이 값은 ecs-codepipeline-pre-reqs-KMS 템플릿 스택의 출력에서 사용할 수 있습니다(키 ID는 모든 리전에서 동일하고 mrk-로 시작됨). 또는 도구 계정에서 CMKARN 값을 가져올 수 있습니다. 모든 계정 세션에서 내보내기: 

    export CMKARN1=arn:aws:kms:ap-south-1:<TOOLSACCOUNTID>:key/mrk-xxx export CMKARN2=arn:aws:kms:eu-central-1:<TOOLSACCOUNTID>:key/mrk-xxx export CMKARN3=arn:aws:kms:us-east-1:<TOOLSACCOUNTID>:key/mrk-xxx export CMARNTOOLS=arn:aws:kms:ap-south-1:<TOOLSACCOUNTID>:key/mrk-xxx
AWS DevOps

도구 계정에서 CodeBuild 프로젝트를 설정합니다.

  1. GitHub 리포지토리 code 폴더의 codebuild_IAM.yaml 템플릿을 사용하여 도구 계정의 단일 리전에서 AWS CodeBuild용 AWS Identity and Access Management(IAM)를 설정합니다.

    #In ToolsAccount aws cloudformation deploy --stack-name ecs-codebuild-iam \ --template-file codebuild_IAM.yaml --region $TOOLSACCOUNTREGION \ --capabilities CAPABILITY_NAMED_IAM
  2. codebuild.yaml 템플릿을 사용하여 사용자의 구축 프로젝트에 대한 CodeBuild를 설정합니다. 이 템플릿을 다음과 같이 세 리전 모두에 배포하세요.

    aws cloudformation deploy --stack-name ecscodebuildstack --parameter-overrides ToolsAccount=$TOOLSACCOUNT \ CodeCommitRepoName=$CODECOMMITREPONAME ECRRepositoryName=$ECRREPOSITORYNAME APPACCOUNTID=$TESTACCOUNT1 \ TestAccount3=$TESTACCOUNT3 CodeCommitRegion=$CODECOMMITREGION CMKARN=$CMKARN1 \ --template-file codebuild.yaml --region $TESTACCOUNT1REGION --capabilities CAPABILITY_NAMED_IAM aws cloudformation deploy --stack-name ecscodebuildstack --parameter-overrides ToolsAccount=$TOOLSACCOUNT \ CodeCommitRepoName=$CODECOMMITREPONAME ECRRepositoryName=$ECRREPOSITORYNAME APPACCOUNTID=$TESTACCOUNT2 \ TestAccount3=$TESTACCOUNT3 CodeCommitRegion=$CODECOMMITREGION CMKARN=$CMKARN2 \ --template-file codebuild.yaml --region $TESTACCOUNT2REGION --capabilities CAPABILITY_NAMED_IAM aws cloudformation deploy --stack-name ecscodebuildstack --parameter-overrides ToolsAccount=$TOOLSACCOUNT \ CodeCommitRepoName=$CODECOMMITREPONAME ECRRepositoryName=$ECRREPOSITORYNAME APPACCOUNTID=$TESTACCOUNT3 \ CodeCommitRegion=$CODECOMMITREGION CMKARN=$CMKARN3 \ --template-file codebuild.yaml --region $TESTACCOUNT3REGION --capabilities CAPABILITY_NAMED_IAM
AWS DevOps

워크로드 계정에서 CodeDeploy를 설정합니다.

GitHub 리포지토리의 code 폴더에 있는 codedeploy.yaml 템플릿을 사용하여 세 가지 워크로드 계정 모두에 CodeDeploy를 설정합니다. mainInfraStack의 출력에는 Amazon ECS 클러스터의 Amazon 리소스 이름(ARN)과 Application Load Balancer 리스너가 포함됩니다.

참고

인프라 스택의 값은 이미 내보내져 있으므로 CodeDeploy 스택 템플릿에서 가져옵니다.

##WorkloadAccount1## aws cloudformation deploy --stack-name ecscodedeploystack \ --parameter-overrides ToolsAccount=$TOOLSACCOUNT mainInfrastackname=mainInfrastack \ --template-file codedeploy.yaml --region $TESTACCOUNT1REGION --capabilities CAPABILITY_NAMED_IAM ##WorkloadAccount2## aws cloudformation deploy --stack-name ecscodedeploystack \ --parameter-overrides ToolsAccount=$TOOLSACCOUNT mainInfrastackname=mainInfrastack \ --template-file codedeploy.yaml --region $TESTACCOUNT2REGION --capabilities CAPABILITY_NAMED_IAM ##WorkloadAccount3## aws cloudformation deploy --stack-name ecscodedeploystack \ --parameter-overrides ToolsAccount=$TOOLSACCOUNT mainInfrastackname=mainInfrastack \ --template-file codedeploy.yaml --region $TESTACCOUNT3REGION --capabilities CAPABILITY_NAMED_IAM
DevOps
작업설명필요한 기술

도구 계정에 코드 파이프라인을 생성하세요.

도구 계정에서 다음 명령어를 실행합니다.

aws cloudformation deploy --stack-name ecscodepipelinestack --parameter-overrides \ TestAccount1=$TESTACCOUNT1 TestAccount1Region=$TESTACCOUNT1REGION \ TestAccount2=$TESTACCOUNT2 TestAccount2Region=$TESTACCOUNT2REGION \ TestAccount3=$TESTACCOUNT3 TestAccount3Region=$TESTACCOUNT3REGION \ CMKARNTools=$CMKTROOLSARN CMKARN1=$CMKARN1 CMKARN2=$CMKARN2 CMKARN3=$CMKARN3 \ CodeCommitRepoName=$CODECOMMITREPONAME BucketStartName=$BUCKETSTARTNAME \ --template-file codepipeline.yaml --capabilities CAPABILITY_NAMED_IAM
AWS DevOps

AWS KMS 키 정책 및 S3 버킷 정책에서 CodePipeline 및 CodeBuild 역할에 대한 액세스를 제공합니다.

  1. AWS KMS 키 정책에서 CodePipeline 및 CodeBuild 역할에 대한 액세스를 제공합니다.

    aws cloudformation deploy --stack-name ecs-codepipeline-pre-reqs-KMS \ --template-file pre-reqs_KMS.yaml --parameter-overrides \ CodeBuildCondition=true TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \ TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT --region $TOOLSACCOUNTREGION
  2. CodePipeline 및 CodeDeploy 역할에 대한 액세스를 허용하도록 S3 버킷 정책을 업데이트합니다.

    aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \ PutS3BucketPolicy=true TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \ TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \ --template-file pre-reqs_bucket.yaml --region $TESTACCOUNT1REGION --capabilities CAPABILITY_NAMED_IAM aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \ PutS3BucketPolicy=true TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \ TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \ --template-file pre-reqs_bucket.yaml --region $TESTACCOUNT2REGION --capabilities CAPABILITY_NAMED_IAM aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \ PutS3BucketPolicy=true TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \ TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \ --template-file pre-reqs_bucket.yaml --region $TESTACCOUNT3REGION --capabilities CAPABILITY_NAMED_IAM aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \ PutS3BucketPolicy=true TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \ TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \ --template-file pre-reqs_bucket.yaml --region $TOOLSACCOUNTREGION --capabilities CAPABILITY_NAMED_IAM
AWS DevOps

도구 계정에 CodePipeline 설정

작업설명필요한 기술

도구 계정에 코드 파이프라인을 생성하세요.

도구 계정에서 다음 명령어를 실행합니다.

aws cloudformation deploy --stack-name ecscodepipelinestack --parameter-overrides \ TestAccount1=$TESTACCOUNT1 TestAccount1Region=$TESTACCOUNT1REGION \ TestAccount2=$TESTACCOUNT2 TestAccount2Region=$TESTACCOUNT2REGION \ TestAccount3=$TESTACCOUNT3 TestAccount3Region=$TESTACCOUNT3REGION \ CMKARNTools=$CMKTROOLSARN CMKARN1=$CMKARN1 CMKARN2=$CMKARN2 CMKARN3=$CMKARN3 \ CodeCommitRepoName=$CODECOMMITREPONAME BucketStartName=$BUCKETSTARTNAME \ --template-file codepipeline.yaml --capabilities CAPABILITY_NAMED_IAM
AWS DevOps

AWS KMS 키 정책 및 S3 버킷 정책에서 CodePipeline 및 CodeBuild 역할에 대한 액세스를 제공합니다.

  1. AWS KMS 키 정책에서 CodePipeline 및 CodeBuild 역할에 대한 액세스를 제공합니다.

    aws cloudformation deploy --stack-name ecs-codepipeline-pre-reqs-KMS \ --template-file pre-reqs_KMS.yaml --parameter-overrides \ CodeBuildCondition=true TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \ TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT --region $TOOLSACCOUNTREGION
  2. CodePipeline 및 CodeDeploy 역할에 대한 액세스를 허용하도록 S3 버킷 정책을 업데이트합니다.

    aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \ PutS3BucketPolicy=true TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \ TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \ --template-file pre-reqs_bucket.yaml --region $TESTACCOUNT1REGION --capabilities CAPABILITY_NAMED_IAM aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \ PutS3BucketPolicy=true TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \ TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \ --template-file pre-reqs_bucket.yaml --region $TESTACCOUNT2REGION --capabilities CAPABILITY_NAMED_IAM aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \ PutS3BucketPolicy=true TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \ TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \ --template-file pre-reqs_bucket.yaml --region $TESTACCOUNT3REGION --capabilities CAPABILITY_NAMED_IAM aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \ PutS3BucketPolicy=true TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \ TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \ --template-file pre-reqs_bucket.yaml --region $TOOLSACCOUNTREGION --capabilities CAPABILITY_NAMED_IAM
AWS DevOps
작업설명필요한 기술

CodeCommit 리포지토리에 변경 사항을 푸시합니다.

  1. AWS CodeCommit 설명서에 설명된 대로 git clone 명령을 사용하여 codecommitrepoStack에서 생성한 CodeCommit 리포지토리를 복제합니다.

  2. 입력 아티팩트에 필수 세부 정보를 업데이트하세요.

    • JSON 파일: 이 파일의 세 위치에서 파일의 AccountID를 업데이트합니다. 계정 ID를 포함하도록 세 파일의 이름을 변경합니다.

    • YAML 파일: 작업 정의 ARN 및 버전을 업데이트합니다. 계정 ID를 포함하도록 세 파일의 이름을 변경합니다.

  3. 홈 페이지를 약간 변경하도록 index.html 파일을 수정하세요.

  4. 다음 파일을 리포지토리에 복사하고 커밋합니다.

    index.html Dockerfile buildspec.yaml appspec_<accountid>.yaml (3 files - one per account ) taskdef<accountid>.json (3 files - one per account)
  5. 파이프라인을 시작하거나 다시 시작하고 결과를 확인합니다.

  6. FQDN 또는 DNS를 사용하여 Application Load Balancer에서 서비스에 액세스하고 업데이트가 배포되었는지 확인합니다.

파이프라인 직접 호출 및 테스트

작업설명필요한 기술

CodeCommit 리포지토리에 변경 사항을 푸시합니다.

  1. AWS CodeCommit 설명서에 설명된 대로 git clone 명령을 사용하여 codecommitrepoStack에서 생성한 CodeCommit 리포지토리를 복제합니다.

  2. 입력 아티팩트에 필수 세부 정보를 업데이트하세요.

    • JSON 파일: 이 파일의 세 위치에서 파일의 AccountID를 업데이트합니다. 계정 ID를 포함하도록 세 파일의 이름을 변경합니다.

    • YAML 파일: 작업 정의 ARN 및 버전을 업데이트합니다. 계정 ID를 포함하도록 세 파일의 이름을 변경합니다.

  3. 홈 페이지를 약간 변경하도록 index.html 파일을 수정하세요.

  4. 다음 파일을 리포지토리에 복사하고 커밋합니다.

    index.html Dockerfile buildspec.yaml appspec_<accountid>.yaml (3 files - one per account ) taskdef<accountid>.json (3 files - one per account)
  5. 파이프라인을 시작하거나 다시 시작하고 결과를 확인합니다.

  6. FQDN 또는 DNS를 사용하여 Application Load Balancer에서 서비스에 액세스하고 업데이트가 배포되었는지 확인합니다.

작업설명필요한 기술

배포된 모든 리소스를 정리합니다.

  1. Amazon ECS를 0개의 인스턴스로 스케일 다운하세요.

    aws ecs update-service --cluster QA-Cluster --service Poc-Service --desired-count 0
  2. 각 계정 및 리전에서 CloudFormation 스택을 삭제합니다.

    ##In Tools Account## aws cloudformation delete-stack --stack-name ecscodepipelinestack --region $TOOLSACCOUNTREGION aws cloudformation delete-stack --stack-name ecscodebuildstack --region $TESTACCOUNT1REGION aws cloudformation delete-stack --stack-name ecscodebuildstack --region $TESTACCOUNT2REGION aws cloudformation delete-stack --stack-name ecscodebuildstack --region $TESTACCOUNT3REGION aws cloudformation delete-stack --stack-name ecs-codepipeline-pre-reqs-KMS --region $TOOLSACCOUNTREGION aws cloudformation delete-stack --stack-name codecommitrepoStack --region $TOOLSACCOUNTREGION aws cloudformation delete-stack --stack-name pre-reqs-artifacts-bucket --region $TESTACCOUNT1REGION aws cloudformation delete-stack --stack-name pre-reqs-artifacts-bucket --region $TESTACCOUNT2REGION aws cloudformation delete-stack --stack-name pre-reqs-artifacts-bucket --region $TESTACCOUNT3REGION aws cloudformation delete-stack --stack-name pre-reqs-artifacts-bucket --region $TOOLSACCOUNTREGION aws cloudformation delete-stack --stack-name ecs-codebuild-iam --region $TOOLSACCOUNTREGION ##NOTE: Artifact buckets will not get deleted if there are artifacts so it has to be emptied manually before deleting.##
    ##In Workload / Test Accounts## ##Account:1## aws cloudformation delete-stack --stack-name ecscodedeploystack --region $TESTACCOUNT1REGION aws cloudformation delete-stack --stack-name mainInfrastack --region $TESTACCOUNT1REGION ##Account:2## aws cloudformation delete-stack --stack-name ecscodedeploystack --region $TESTACCOUNT2REGION aws cloudformation delete-stack --stack-name mainInfrastack --region $TESTACCOUNT2REGION ##Account:3## aws cloudformation delete-stack --stack-name ecscodedeploystack --region $TESTACCOUNT3REGION aws cloudformation delete-stack --stack-name mainInfrastack --region $TESTACCOUNT3REGION ##NOTE: Amazon ECR (web) will not get deleted if the registry still includes images. It can be manually cleaned up if not required.

정리

작업설명필요한 기술

배포된 모든 리소스를 정리합니다.

  1. Amazon ECS를 0개의 인스턴스로 스케일 다운하세요.

    aws ecs update-service --cluster QA-Cluster --service Poc-Service --desired-count 0
  2. 각 계정 및 리전에서 CloudFormation 스택을 삭제합니다.

    ##In Tools Account## aws cloudformation delete-stack --stack-name ecscodepipelinestack --region $TOOLSACCOUNTREGION aws cloudformation delete-stack --stack-name ecscodebuildstack --region $TESTACCOUNT1REGION aws cloudformation delete-stack --stack-name ecscodebuildstack --region $TESTACCOUNT2REGION aws cloudformation delete-stack --stack-name ecscodebuildstack --region $TESTACCOUNT3REGION aws cloudformation delete-stack --stack-name ecs-codepipeline-pre-reqs-KMS --region $TOOLSACCOUNTREGION aws cloudformation delete-stack --stack-name codecommitrepoStack --region $TOOLSACCOUNTREGION aws cloudformation delete-stack --stack-name pre-reqs-artifacts-bucket --region $TESTACCOUNT1REGION aws cloudformation delete-stack --stack-name pre-reqs-artifacts-bucket --region $TESTACCOUNT2REGION aws cloudformation delete-stack --stack-name pre-reqs-artifacts-bucket --region $TESTACCOUNT3REGION aws cloudformation delete-stack --stack-name pre-reqs-artifacts-bucket --region $TOOLSACCOUNTREGION aws cloudformation delete-stack --stack-name ecs-codebuild-iam --region $TOOLSACCOUNTREGION ##NOTE: Artifact buckets will not get deleted if there are artifacts so it has to be emptied manually before deleting.##
    ##In Workload / Test Accounts## ##Account:1## aws cloudformation delete-stack --stack-name ecscodedeploystack --region $TESTACCOUNT1REGION aws cloudformation delete-stack --stack-name mainInfrastack --region $TESTACCOUNT1REGION ##Account:2## aws cloudformation delete-stack --stack-name ecscodedeploystack --region $TESTACCOUNT2REGION aws cloudformation delete-stack --stack-name mainInfrastack --region $TESTACCOUNT2REGION ##Account:3## aws cloudformation delete-stack --stack-name ecscodedeploystack --region $TESTACCOUNT3REGION aws cloudformation delete-stack --stack-name mainInfrastack --region $TESTACCOUNT3REGION ##NOTE: Amazon ECR (web) will not get deleted if the registry still includes images. It can be manually cleaned up if not required.

문제 해결

문제Solution

리포지토리에 커밋한 변경 사항은 배포되지 않습니다.

  • CodeBuild 로그에서 Docker 구축 작업의 오류를 확인합니다. 자세한 내용은 CodeBuild 설명서를 참조하세요.

  • CodeDeploy 배포에서 Amazon ECS 배포 문제가 있는지 확인하세요.

관련 리소스

프라이버시사이트 이용 약관쿠키 기본 설정
© 2025, Amazon Web Services, Inc. 또는 계열사. All rights reserved.