기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
AWS Service Catalog 및를 사용하여 Gitflow 환경에 핫픽스 솔루션을 배포하기 위한 동적 파이프라인 관리 자동화 AWS CodePipeline
작성자: Balaji Vedagiri(AWS), Faisal Shahdad(AWS), Shanmugam Shanker(AWS), Vivek Thangamuthu(AWS)
요약
참고
AWS CodeCommit 는 더 이상 신규 고객이 사용할 수 없습니다. 의 기존 고객은 평소와 같이 서비스를 계속 사용할 AWS CodeCommit 수 있습니다. 자세히 알아보기
이 패턴은 핫픽스 솔루션을 프로덕션 환경에 안전하게 배포하는 전용 동적 핫픽스 파이프라인을 관리하는 시나리오를 다룹니다. 솔루션은 AWS Service Catalog 포트폴리오와 제품을 사용하여 구현되고 관리됩니다. Amazon EventBridge 규칙은 이벤트 자동화에 사용됩니다. 개발자는 Service Catalog 포트폴리오 제약 조건 및 AWS Identity and Access Management (IAM) 역할을 사용하여 제한을 적용합니다. AWS Lambda 함수만 EventBridge 규칙에 의해 트리거되는 Service Catalog 제품을 시작할 수 있습니다. 이 패턴은 추가 정보에 설명된 특정 Gitflow 설정이 있는 환경을 위해 설계되었습니다.
일반적으로 핫픽스는 프로덕션과 같은 라이브 환경에서 보고된 중요하거나 보안 문제를 해결하기 위해 배포됩니다. 핫픽스는 스테이징 및 프로덕션 환경에만 직접 배포해야 합니다. 스테이징 및 프로덕션 파이프라인은 정기적인 개발 요청에 광범위하게 사용됩니다. 품질 보증에 프로덕션으로 승격할 수 없는 지속적인 기능이 있으므로 이러한 파이프라인을 사용하여 핫픽스를 배포할 수 없습니다. 핫픽스를 릴리스하기 위해이 패턴은 다음과 같은 보안 기능을 갖춘 동적 단기 파이프라인을 설명합니다.
자동 생성 - 리포지 AWS CodeCommit 토리에 핫픽스 브랜치가 생성될 때마다 핫픽스 파이프라인이 자동으로 생성됩니다.
액세스 제한 - 개발자는 핫픽스 프로세스 외부에서이 파이프라인을 생성할 수 있는 액세스 권한이 없습니다.
제어된 단계 - 파이프라인에는 특수 액세스 토큰이 있는 제어된 단계가 있으므로 풀 요청(PR)을 한 번만 생성할 수 있습니다.
승인 단계 - 승인 단계는 파이프라인에 포함되어 관련 이해관계자로부터 필요한 승인을 받습니다.
자동 삭제 - 핫픽스 파이프라인은
hotfix
브랜치가 PR과 병합된 후 CodeCommit 리포지토리에서 삭제될 때마다 자동으로 삭제됩니다.
사전 조건 및 제한 사항
사전 조건
다음과 같이 세 가지 활성 AWS 계정 이 필요합니다.
도구 계정 - 지속적 통합 및 지속적 전송(CI/CD) 설정용입니다.
단계 계정 - 사용자 수락 테스트용입니다.
프로덕션 계정 - 비즈니스 최종 사용자의 경우.
(선택 사항) QA 계정 역할을 AWS 계정 할를 추가합니다. QA를 포함한 기본 파이프라인 설정과 테스트를 위한 핫픽스 파이프라인 솔루션을 모두 원하는 경우이 계정이 필요합니다.
필요한 경우 기본 파이프라인을 사용하여 QA 계정에 배포할 선택적 조건이 있는 AWS CloudFormation 스택입니다.
hotfix
브랜치를 생성하고 삭제하여 기본 파이프라인 설정 없이도 패턴을 테스트할 수 있습니다.Service Catalog 제품을 생성하는 데 사용되는 CloudFormation 템플릿을 저장하는 Amazon Simple Storage Service(Amazon S3) 버킷입니다.
규정 준수 요구 사항에 따라 CodeCommit 리포지토리에 대한 PR 승인 규칙을 생성합니다(리포지토리 생성 후).
개발자 및 팀의 IAM 권한을 제한하면 파이프라인에서만 호출해야 하므로 prcreation-lambda
Lambda 함수의 실행이 거부됩니다.
제한 사항
CloudFormation 공급자는 배포 단계에서 사용되며 애플리케이션은 CloudFormation 변경 세트를 사용하여 배포됩니다. 다른 배포 옵션을 사용하려면 필요에 따라 CodePipeline 스택을 수정합니다.
이 패턴은 AWS CodeBuild 및 기타 구성 파일을 사용하여 샘플 마이크로서비스를 배포합니다. 워크로드 유형이 다른 경우(예: 서버리스 워크로드) 모든 관련 구성을 업데이트해야 합니다.
이 패턴은 애플리케이션을 단일 AWS 리전 (예: 미국 동부(버지니아 북부) us-east-1)에 배포합니다 AWS 계정. 여러 리전에 배포하려면 명령 및 스택에서 리전 참조를 변경합니다.
일부 AWS 서비스 는 전혀 사용할 수 없습니다 AWS 리전. 리전 가용성은 리전별 AWS 서비스를
참조하세요. 특정 엔드포인트는 서비스 엔드포인트 및 할당량을 참조하고 서비스 링크를 선택합니다.
아키텍처
이 섹션의 다이어그램은 수명 주기 이벤트 생성 및 수명 주기 이벤트 삭제에 대한 워크플로를 제공합니다.

수명 주기 이벤트를 생성하기 위한 위의 다이어그램은 다음을 보여줍니다.
개발자는 CodeCommit 리포지토리에
hotfix-*
브랜치를 생성하여 핫픽스 관련 솔루션을 개발합니다.hotfix-*
브랜치 생성 이벤트는 EventBridge 규칙을 통해 캡처됩니다. 이벤트 세부 정보에는 리포지토리 이름과 브랜치 이름이 포함됩니다.EventBridge 규칙은 AWS Lambda 함수를 호출합니다
hotfix-lambda-function
. EventBridge 규칙은 이벤트 정보를 Lambda 함수에 입력으로 전달합니다.Lambda 함수는 입력을 처리하여 리포지토리 이름과 브랜치 이름을 검색합니다. 처리된 입력에서 검색된 값으로 Service Catalog 제품을 시작합니다.
Service Catalog 제품에는 솔루션을 스테이지 및 프로덕션 환경에 배포하는 파이프라인 설정이 포함되어 있습니다. 파이프라인 블록에는 소스, 빌드 및 배포 단계가 포함됩니다. 또한 프로덕션 환경의 배포를 승격하기 위한 수동 승인 단계가 있습니다.
소스 단계는 첫 번째 단계에서 생성된 리포지토리 및
hotfix-*
브랜치에서 코드를 검색합니다. 코드는 아티팩트용 Amazon S3 버킷을 통해 빌드 단계로 전달됩니다. 빌드 단계에서는hotfix-*
브랜치에서 개발되어 Amazon Elastic Container Registry(Amazon ECR)로 푸시되는 핫픽스가 포함된 컨테이너 이미지가 생성됩니다.스테이지 환경에 배포 스테이지는 핫픽스가 포함된 최신 컨테이너 이미지로 Amazon Elastic Container Service(Amazon ECS)를 업데이트합니다. 핫픽스는 CloudFormation 변경 세트를 생성하고 실행하여 배포됩니다.
스테이지 환경에서 배포에 성공하면
prcreation-lambda
Lambda 함수가 호출됩니다. 이 Lambda 함수는hotfix-*
브랜치에서 리포지토리의develop
및main
브랜치로 PR을 생성합니다. Lambda 함수는hotfix-*
브랜치에서 개발된 수정 사항이 백머지되고 후속 배포에 포함되도록 합니다.수동 승인 단계는 필요한 이해관계자가 수정 사항을 검토하고 프로덕션에 배포할 수 있는 승인을 제공하는 데 도움이 됩니다.
프로덕션 환경에 배포 단계는 핫픽스가 포함된 최신 컨테이너 이미지로 Amazon ECS를 업데이트합니다. 핫픽스는 CloudFormation 변경 세트를 생성하고 실행하여 배포됩니다.

수명 주기 이벤트를 삭제하기 위한 위의 다이어그램은 다음을 보여줍니다.
개발자는 핫픽스를 프로덕션 환경에 성공적으로 배포한 후
hotfix-*
브랜치를 삭제합니다.hotfix-*
브랜치 삭제 이벤트는 EventBridge 규칙을 통해 캡처됩니다. 이벤트 세부 정보에는 리포지토리 이름과 브랜치 이름이 포함됩니다.EventBridge 규칙은 Lambda 함수를 호출합니다. EventBridge 규칙은 이벤트 정보를 Lambda 함수에 입력으로 전달합니다.
Lambda 함수는 입력을 처리하여 리포지토리 이름과 브랜치 이름을 검색합니다. Lambda 함수는 전달된 입력에서 각 Service Catalog 제품을 확인한 다음 제품을 종료합니다.
Service Catalog 프로비저닝된 제품 종료는 해당 제품에서 이전에 생성된 파이프라인 및 관련 리소스를 삭제합니다.
자동화 및 규모 조정
패턴에는 EventBridge 규칙과 여러 핫픽스 브랜치 생성 요청을 병렬로 처리할 수 있는 Lambda 함수가 포함됩니다. Lambda 함수는 일치하는 이벤트 규칙에 대해 Service Catalog 제품을 프로비저닝합니다.
파이프라인 설정은 버전 관리 기능을 제공하는 Service Catalog 제품을 사용하여 처리됩니다. 또한 솔루션은 동일한 애플리케이션에 대한 여러 핫픽스 개발을 병렬로 처리하도록 자동으로 확장됩니다.
prcreation-lambda
함수는 이러한 핫픽스 변경 사항이 자동 풀 요청 생성을 통해 main
및develop
브랜치에 다시 병합되도록 합니다. 이 접근 방식은main
및 브develop
랜치를 모든 수정 사항과 함께 최신 상태로 유지하고 잠재적 코드 회귀를 방지하는 데 필수적입니다. 이 프로세스는 모든 수명이 긴 브랜치에 최신 수정 사항이 적용되도록 하여 브랜치 간 일관성을 유지하고 코드 회귀를 방지하는 데 도움이 됩니다.
도구
AWS 서비스
AWS CloudFormation를 사용하면 AWS 리소스를 설정하고, 빠르고 일관되게 프로비저닝하고, 수명 주기 전반에 걸쳐 AWS 계정 및에서 리소스를 관리할 수 있습니다 AWS 리전.
AWS CodeBuild는 소스 코드를 컴파일하고, 단위 테스트를 실행하고, 배포할 준비가 된 아티팩트를 생성하는 데 도움이 되는 완전 관리형 빌드 서비스입니다.
AWS CodeCommit는 자체 소스 제어 시스템을 관리할 필요 없이 Git 리포지토리를 비공개로 저장하고 관리하는 데 도움이 되는 버전 관리 서비스입니다. AWS CodeCommit 는 더 이상 신규 고객이 사용할 수 없습니다. 의 기존 고객은 평소와 같이 서비스를 계속 사용할 AWS CodeCommit 수 있습니다. 자세한 내용은 AWS CodeCommit 리포지토리를 다른 Git 공급자로 마이그레이션하는 방법을 참조하세요
. AWS CodePipeline를 사용하면 소프트웨어 릴리스의 다양한 단계를 신속하게 모델링 및 구성하고 소프트웨어 변경 사항을 지속적으로 릴리스하는 데 필요한 단계를 자동화할 수 있습니다.
Amazon Elastic Container Registry(Amazon ECR)는 안전하고 확장 가능하고 신뢰할 수 있는 관리형 컨테이너 이미지 레지스트리 서비스입니다.
Amazon Elastic Container Service(Amazon ECS)는 클러스터에서 컨테이너를 실행, 중지 및 관리하는 데 도움이 되는 빠르고 확장 가능한 컨테이너 관리 서비스입니다.
AWS Key Management Service (AWS KMS)를 사용하면 암호화 키를 생성하고 제어하여 데이터를 보호할 수 있습니다.
AWS Service Catalog는 승인된 IT 서비스의 카탈로그를 중앙에서 관리할 수 있도록 지원합니다 AWS. 최종 사용자는 조직에서 규정한 제약에 따라, 필요에 따라 승인된 IT 서비스만 신속하게 배포할 수 있습니다.
Amazon Simple Storage Service(S3)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다.
기타 도구
AWS CloudFormation Linter(cfn-lint)
는 CloudFormation 리소스 사양과 비교하여 CloudFormation YAML 또는 JSON 템플릿을 확인하는 린터입니다. 또한 리소스 속성의 유효한 값 확인 및 모범 사례 준수와 같은 다른 검사를 수행합니다. cfn-nag
는 패턴을 검색하여 CloudFormation 템플릿의 잠재적 보안 문제를 식별하는 오픈 소스 도구입니다. Docker
는 운영 체제 수준의 가상화를 사용하여 컨테이너에 소프트웨어를 제공하는 서비스형 플랫폼(PaaS) 제품 세트입니다. 이 패턴은 Docker를 사용하여 로컬에서 컨테이너 이미지를 구축하고 테스트합니다. Git
은 오픈 소스 분산 버전 제어 시스템입니다.
코드 리포지토리
이 패턴의 코드는 GitHub dynamic_hotfix_codepipeline
모범 사례
환경에서 IAM 역할 및 서비스 제어 정책(SCP)을 검토하고 조정하여 액세스를 적절하게 제한하는지 확인합니다. 이는이 패턴에 포함된 보안 조치를 재정의할 수 있는 모든 작업을 방지하는 데 매우 중요합니다. 최소 권한 원칙을 따르고 작업을 수행하는 데 필요한 최소 권한을 부여합니다. 자세한 내용은 IAM 설명서의 최소 권한 부여 및 보안 모범 사례를 참조하세요.
에픽
작업 | 설명 | 필요한 기술 |
---|---|---|
리포지토리를 복제합니다. | 샘플 리포지토리
| DevOps |
CloudFormation 스택 배포를 위한 환경 변수를 내보냅니다. | 이 패턴의 뒷부분에서 CloudFormation 스택에 대한 입력으로 사용할 다음 환경 변수를 정의합니다.
| DevOps |
작업 | 설명 | 필요한 기술 |
---|---|---|
도구 계정에서 CI/CD에 필요한 리소스를 생성합니다. | 도구 계정에 CloudFormation 스택을 배포하려면 다음 명령을 사용합니다. ( 설정에 QA 계정을 사용하지 않는 경우
CodeCommit 리포지토리와 Amazon ECR이 이전 스택에서 생성한 리소스를 기록해 둡니다. 이러한 파라미터는 향후 단계에서 파이프라인의 | DevOps |
워크로드 계정에서 CI/CD에 필요한 리소스를 생성합니다. |
| DevOps |
워크로드 계정에 대한 액세스를 허용하도록 S3 아티팩트 버킷 정책을 업데이트합니다. | 도구 계정에서 CloudFormation 스택 사전 조건을 업데이트하려면 다음 명령을 사용하여 스테이지 및 프로덕션 워크로드 계정에 필요한 모든 권한을 추가합니다. ( 설정에 사용하지 않는 경우
| DevOps |
작업 | 설명 | 필요한 기술 |
---|---|---|
Service Catalog 포트폴리오 및 제품을 설정합니다. | Service Catalog 포트폴리오 및 제품을 설정하려면 다음을 수행합니다.
| DevOps |
Lambda 함수를 설정합니다. | 이 솔루션은 다음 Lambda 함수를 사용하여 핫픽스 워크플로를 관리합니다.
연결된 EventBridge 규칙을 통해
| DevOps |
작업 | 설명 | 필요한 기술 |
---|---|---|
| 기본 브랜치에 대한 파이프라인을 설정하려면 도구 계정에서 다음 명령을 실행합니다.
| DevOps |
|
| DevOps |
작업 | 설명 | 필요한 기술 |
---|---|---|
|
| DevOps |
| 이전에 생성한
| DevOps |
작업 | 설명 | 필요한 기술 |
---|---|---|
배포된 리소스를 정리합니다. | 이전에 배포된 리소스를 정리하려면 다음을 수행합니다.
자세한 내용은 Service Catalog 설명서의 프로비저닝된 제품 삭제를 참조하세요. | DevOps |
문제 해결
문제 | Solution |
---|---|
CodeCommit 리포지토리에 커밋한 변경 사항이 배포되지 않습니다. | CodeBuild 로그에서 Docker 구축 작업의 오류를 확인합니다. 자세한 내용은 CodeBuild 설명서를 참조하세요. |
Service Catalog 제품이 프로비저닝되지 않습니다. | 실패한 이벤트가 있는지 관련 CloudFormation 스택을 검토합니다. 자세한 내용은 CloudFormation 설명서를 참조하세요. |
관련 리소스
추가 정보
이 패턴은 CI/CD 프로세스의 개발 워크플로에 채택된 Gitflow 설정이 있는 환경을 위해 설계되었습니다. 파이프라인은 개발부터 시작하여 품질 보증(QA), 단계 및 프로덕션 환경을 거치는 배포 주기를 따릅니다. CI/CD 설정에는 다음과 같이 환경에 대한 프로모션 배포가 있는 두 개의 git 브랜치가 포함됩니다.
develop
브랜치는 개발 환경에 배포됩니다.main
브랜치는 QA, 스테이지 및 프로덕션 환경에 배포됩니다.
이 설정에서는 새로운 기능의 활성 개발이 진행되는 동안 일반적인 배포 주기보다 더 빠르게 핫픽스 또는 보안 패치를 적용하는 것이 어렵습니다. 핫픽스 또는 보안 요청을 해결하여 라이브 환경이 제대로 작동하고 안전하게 유지되도록 하려면 전용 프로세스가 필요합니다.
그러나 다음과 같은 경우 전용 배포 프로세스 없이 다른 사용 가능한 옵션을 사용할 수 있습니다.
CI/CD 프로세스는 기능 및 end-to-end 테스트와 같은 자동화된 테스트로 잘 구성되어 있으므로 수동 테스트가 필요하지 않으며 프로덕션으로의 배포 지연을 방지할 수 있습니다. 그러나 자동 테스트가 CI/CD 프로세스에 잘 통합되지 않는 경우 프로덕션 환경에 작은 수정 사항을 푸시하면 개발자가 복잡해지고 번거로워질 수 있습니다. 이는 QA 환경에서 승인 및 승인을 위해 대기 중인 새로운 기능이 있을 수 있기 때문입니다. 핫픽스 또는 보안 수정은 간단한 방식으로 동시에 프로덕션에 푸시할 수 없습니다.
개발 팀은 새로운 기능을 프로덕션 환경에 지속적으로 배포하여 핫픽스 또는 보안 패치를 각 새로운 기능의 예약된 배포에 통합합니다. 즉, 프로덕션 환경에 대한 다음 기능 업데이트는 두 가지 구성 요소, 즉 새 기능 추가와 핫픽스 또는 보안 패치 포함으로 구성됩니다. 그러나 배포 주기가 연속적이지 않은 경우 QA 환경에서 이미 승인을 기다리고 있는 새로운 기능이 여러 개 있을 수 있습니다. 다른 버전을 관리하고 올바른 변경 사항이 다시 적용되도록 하면 복잡해지고 오류가 발생하기 쉽습니다.
참고
hotfix
브랜치에 적절한 트리거가 설정된 AWS CodePipeline 의 버전 2를 사용하는 경우에도 예정되지 않은 요청을 해결하기 위한 전용 프로세스가 필요합니다. 버전 2에서는 푸시 또는 풀 요청에 대한 트리거를 설정할 수 있습니다. 실행은 파이프라인의 이전 상태에 따라 대기열에 추가되거나 즉시 실행됩니다. 그러나 전용 파이프라인을 사용하면 수정 사항이 프로덕션 환경에 즉시 적용되므로 긴급한 문제가 지연 없이 해결됩니다.