기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Step Functions와 Lambda 프록시 함수를 사용하여 여러 AWS 계정에서 CodeBuild 프로젝트 시작
Richard Milner-Watts 및 Amit Anjarlekar, Amazon Web Services
요약
이 패턴은 AWS Step Functions와 AWS Lambda 프록시 함수를 사용하여 여러 AWS 계정에서 AWS CodeBuild 프로젝트를 비동기적으로 시작하는 방법을 보여줍니다. 패턴의 샘플 Step Functions 상태 머신을 사용하여 CodeBuild 프로젝트의 성공 여부를 테스트할 수 있습니다.
CodeBuild는 완전관리형 런타임 환경에서 AWS Command Line Interface(AWS CLI)를 사용하여 운영 작업을 시작할 수 있도록 지원합니다. 환경 변수를 재정의하여 런타임 시 CodeBuild 프로젝트의 동작을 변경할 수 있습니다. 또한 CodeBuild를 사용하여 워크플로우를 관리할 수 있습니다. 자세한 내용은 AWS 워크숍 웹사이트의 서비스 카탈로그 도구
사전 조건 및 제한 사항
사전 조건
활성 AWS 계정 두 개: Step Functions를 사용하여 Lambda 프록시 함수를 호출하기 위한 소스 계정과 원격 CodeBuild 샘플 프로젝트를 빌드하기 위한 대상 계정
제한 사항
이 패턴은 계정 간에 아티팩트를 복사하는 데 사용할 수 없습니다.
아키텍처
다음 다이어그램은 이 패턴이 구축하는 아키텍처를 보여줍니다.

이 다이어그램은 다음 워크플로를 보여줍니다.
Step Functions 상태 시스템은 제공된 입력 맵을 구문 분석하고 정의한 각 계정, 리전 및 프로젝트에 대해 Lambda 프록시 함수(
codebuild-proxy-lambda)를 간접적으로 호출합니다.이 Lambda 프록시 함수는 AWS Security Token Service(AWS STS)를 사용하여 대상 계정의 IAM 정책(
codebuild-proxy-policy)과 연결된 IAM 프록시 역할(codebuild-proxy-role)을 맡습니다.맡은 역할을 사용하여 이 Lambda 함수는 CodeBuild 프로젝트를 시작하고 CodeBuild 작업 ID를 반환합니다. Step Functions 상태 머신은 성공 또는 실패 상태를 수신할 때까지 CodeBuild 작업을 반복하고 폴링합니다.
상태 시스템 로직은 다음 이미지에 나와 있습니다.

기술 스택
AWS CloudFormation
CodeBuild
IAM
Lambda
단계 함수
X-Ray
도구
AWS CloudFormation을 사용하면 AWS 리소스를 설정하고, 빠르고 일관되게 프로비저닝하고, 전체 AWS 계정 및 리전에서 수명 주기 전반에 걸쳐 관리할 수 있습니다.
AWS CloudFormation Designer는 CloudFormation 템플릿을 보고 편집하는 데 도움이 되는 통합 JSON 및 YAML 편집기를 제공합니다.
AWS CodeBuild는 소스 코드를 컴파일하고 유닛 테스트를 실행하며 배포할 준비가 완료된 아티팩트를 생성하는 완전 관리형 빌드 서비스입니다.
AWS Identity and Access Management(IAM)는 사용자에 대한 인증 및 권한 부여를 제어함으로써 AWS 리소스에 대한 액세스를 안전하게 제어할 수 있습니다.
AWS Lambda는 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행하는 데 도움이 되는 컴퓨팅 서비스입니다. 필요할 때만 코드를 실행하며 자동으로 확장이 가능하므로 사용한 컴퓨팅 시간만큼만 비용을 지불합니다.
AWS Step Functions는 AWS Lambda 함수와 기타 AWS 서비스를 결합할 수 있는 서버리스 오케스트레이션 서비스로, 비즈니스 크리티컬 애플리케이션을 구축합니다.
AWS X-Ray는 애플리케이션이 처리하는 요청에 대한 데이터를 수집하는 웹 서비스이며 해당 데이터를 보고, 필터링하고, 통찰을 얻어 문제와 최적화 기회를 식별할 수 있는 도구를 제공합니다.
코드
이 패턴의 샘플 코드는 GitHub 교차 계정 CodeBuild 프록시
모범 사례
Step Function 상태 시스템의 대기 시간 값을 조정하여 작업 상태에 대한 폴링 요청을 최소화합니다. CodeBuild 프로젝트의 예상 실행 시간을 사용합니다.
Step Functions에서 맵의
MaxConcurrency속성을 조정하여 병렬로 실행할 수 있는 CodeBuild 프로젝트 수를 제어합니다.필요한 경우 샘플 코드에서 프로덕션 준비 상태를 검토합니다. 솔루션에서 로깅할 수 있는 데이터와 기본 Amazon CloudWatch 암호화가 충분한지 여부를 고려합니다.
에픽
| 작업 | 설명 | 필요한 기술 |
|---|---|---|
AWS 계정 ID를 기록합니다. | 여러 계정에 대한 액세스를 설정하려면 AWS 계정 ID가 필요합니다. 소스 및 대상 계정의 AWS 계정 ID를 기록해 둡니다. 자세한 내용은 IAM 설명서의 AWS 계정 ID 찾기를 참조하세요. | AWS DevOps |
AWS CloudFormation 템플릿을 다운로드합니다. |
참고AWS CloudFormation 템플릿에서 는 소스 계정의 AWS 계정 ID이고, 는 대상 계정의 AWS 계정 ID입니다. | DevOps |
AWS CloudFormation 스택을 생성하고 배포합니다. |
참고대상 계정에 리소스를 생성하기 전에 프록시 Lambda 함수를 위한 AWS CloudFormation 스택을 생성해야 합니다. 대상 계정에서 신뢰 정책을 생성하면 IAM 역할이 역할 이름에서 내부 식별자로 변환됩니다. 따라서 IAM 역할이 이미 존재해야 합니다. | AWS DevOps |
프록시 함수 및 상태 머신의 생성을 확인합니다. |
| AWS DevOps |
| 작업 | 설명 | 필요한 기술 |
|---|---|---|
AWS CloudFormation 스택을 생성하고 배포합니다. |
| AWS DevOps |
샘플 CodeBuild 프로젝트가 생성되었는지 확인합니다. |
| AWS DevOps |
| 작업 | 설명 | 필요한 기술 |
|---|---|---|
상태 머신을 실행합니다. |
| AWS DevOps |
환경 변수를 확인합니다. |
| DevOps |
문제 해결
| 문제 | Solution |
|---|---|
Step Functions 실행 시간이 예상보다 오래 걸립니다. | Step Function 상태 시스템에서 맵의 |
CodeBuild 작업 실행 시간이 예상보다 오래 걸립니다. |
|