

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

# GitHub Actions를 사용하여 AWS CDK Python 애플리케이션에 대한 Amazon CodeGuru 리뷰 자동화
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications"></a>

*Vanitha Dontireddy와 Sarat Chandra Pothula, Amazon Web Services*

## 요약
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-summary"></a>

참고: 2025년 11월 7일부터 Amazon CodeGuru Reviewer에서 새 리포지토리 연결을 생성할 수 없습니다. CodeGuru Reviewer와 유사한 기능을 갖춘 서비스에 대한 자세한 내용은 [ CodeGuru Reviewer 설명서의 Amazon CodeGuru Reviewer 가용성 변경을](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/codeguru-reviewer-availability-change.html) 참조하세요. CodeGuru 

이 패턴은 GitHub Actions를 통해 오케스트레이션된 AWS Cloud Development Kit (AWS CDK) Python 애플리케이션에 대한 Amazon CodeGuru 자동 코드 검토의 통합을 보여줍니다. 이 솔루션은 AWS CDK Python에 정의된 서버리스 아키텍처를 배포합니다. 이 접근 방식은 개발 파이프라인 내에서 전문가 코드 분석을 자동화하여 AWS CDK Python 프로젝트에 대해 다음을 수행할 수 있습니다.
+ 코드 품질을 개선합니다.
+ 워크플로를 간소화합니다.
+ 서버리스 컴퓨팅의 이점을 극대화합니다.

## 사전 조건 및 제한 사항
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-prereqs"></a>

**사전 조건 **
+ 활성. AWS 계정
+ AWS Command Line Interface (AWS CLI) 버전 2.9.11 이상, [설치](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html) 및 [구성](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)됨.
+ 활성 GitHub 계정 및 읽기 및 쓰기 워크플로 권한이 있고 GitHub Actions에서 풀 요청(PR)을 생성하여 PR 워크플로가 올바르게 작동하는지 확인하는 GitHub 리포지토리입니다.
+ 에 솔루션을 배포하기 위한 GitHub Actions의 OpenID Connect(OIDC) 역할입니다 AWS 계정. IAM 콘솔을 생성하려면 [AWS CDK 구문](https://github.com/aws-samples/github-actions-oidc-cdk-construct)을 사용합니다.

**제한 사항 **
+ Amazon CodeGuru Profiler는 모든 Java 가상 머신(JVM) 언어(예: Scala 및 Kotlin), 런타임 및 Python 3.6 이상으로 작성된 [애플리케이션을 지원합니다](https://docs.aws.amazon.com/codeguru/latest/profiler-ug/what-is-codeguru-profiler.html#what-is-language-support).
+ Amazon CodeGuru Reviewer는 Bitbucket AWS CodeCommit, GitHub, GitHub Enterprise Cloud 및 GitHub Enterprise Server 소스 공급자의 Java 및 GitHub 코드 리포지토리와의 [연결만 지원합니다](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/working-with-repositories.html). 또한 Amazon Simple Storage Service(Amazon S3) 리포지토리는 GitHub Actions를 통해서만 지원됩니다.
+ 지속적 통합 및 지속적 배포(CI/CD) 파이프라인 중에 결과를 인쇄하는 자동화된 방법은 없습니다. 대신이 패턴은 GitHub Actions를 대체 방법으로 사용하여 결과를 처리하고 표시합니다.
+ 일부 AWS 서비스 는 전혀 사용할 수 없습니다 AWS 리전. 리전별 가용성은 [리전별 AWS 서비스](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)를 참조하세요. 구체적인 엔드포인트는 [서비스 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)을 참조하고 서비스 링크를 선택합니다.

## 아키텍처
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-architecture"></a>

다음 다이어그램은 이 솔루션의 아키텍처를 보여 줍니다.

![\[GitHub Actions를 사용하여 AWS CDK Python 애플리케이션에 대한 CodeGuru 코드 검토를 통합하는 워크플로입니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/c5395e3e-ff2a-41cf-bd64-c73cc928b60b/images/18f880a2-9bc3-4d71-a598-bb83b68ee383.png)


다이어그램에 표시된 대로 개발자가 검토를 위해 풀 요청(PR)을 생성하면 GitHub Actions는 다음 단계를 트리거합니다.

1. IAM 역할 가정 - 파이프라인은 GitHub 시크릿에 지정된 IAM 역할을 사용하여 배포 작업을 수행합니다.

1. 코드 분석
   + CodeGuru Reviewer는 Amazon S3 버킷에 저장된 코드를 분석합니다. 결함을 식별하고 수정 및 최적화에 대한 권장 사항을 제공합니다.
   + CodeGuru Security는 정책 위반 및 취약성을 검사합니다.

1. 조사 결과 검토
   + 파이프라인은 콘솔 출력에서 결과 대시보드에 대한 링크를 인쇄합니다.
   + 중요한 결과가 감지되면 파이프라인이 즉시 실패합니다.
   + 심각도가 높거나 정상이거나 낮은 결과의 경우 파이프라인은 다음 단계로 계속됩니다.

1. PR 승인
   + 검토자는 PR을 수동으로 승인해야 합니다.
   + PR이 거부되면 파이프라인이 실패하고 추가 배포 단계를 중지합니다.

1. CDK 배포 - PR 승인 시 CDK 배포 프로세스가 시작됩니다. 다음 AWS 서비스 및 리소스를 설정합니다.
   + CodeGuru Profiler
   + AWS Lambda 함수
   + Amazon Simple Queue Service(Amazon SQS) 대기열

1. 프로파일링 데이터 생성 - CodeGuru Profiler에 대한 충분한 프로파일링 데이터를 생성하려면:
   + 파이프라인은 Amazon SQS 대기열로 메시지를 주기적으로 전송하여 Lambda 함수를 여러 번 간접적으로 호출합니다.

## 도구
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-tools"></a>

**AWS 서비스**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html)는 코드로 AWS 클라우드 인프라를 정의하고 프로비저닝하는 데 도움이 되는 소프트웨어 개발 프레임워크입니다.
+ [CDK Toolkit](https://docs.aws.amazon.com/cdk/latest/guide/cli.html)은 AWS CDK 앱과 상호 작용하는 데 도움이 되는 명령줄 클라우드 개발 키트입니다.
+ [Amazon CodeGuru Profiler](https://docs.aws.amazon.com/codeguru/latest/profiler-ug/what-is-codeguru-profiler.html)는 라이브 애플리케이션에서 런타임 성능 데이터를 수집하고 애플리케이션 성능을 미세 조정하는 데 도움이 되는 권장 사항을 제공합니다.
+ [Amazon CodeGuru Reviewer](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/welcome.html)는 프로그램 분석 및 기계 학습을 사용하여 개발자가 찾기 어려운 잠재적 결함을 감지합니다. 그런 다음 CodeGuru Profiler는 Java 및 Python 코드 개선을 위한 제안을 제공합니다.
+ Amazon CodeGuru Security는 기계 학습을 사용하여 보안 정책 위반 및 취약성을 탐지하는 정적 애플리케이션 보안 도구입니다. 보안 리스크를 해결하기 위한 제안을 제공하고 애플리케이션의 보안 태세를 추적할 수 있도록 지표를 생성합니다.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)는 AWS 리소스에 대한 액세스를 인증하고 사용할 수 있는 권한을 부여받은 사용자를 제어하여 리소스에 대한 액세스를 안전하게 관리하는 데 도움이 됩니다.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)는 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행하는 데 도움이 되는 컴퓨팅 서비스입니다. 필요할 때만 코드를 실행하며 자동으로 확장이 가능하므로 사용한 컴퓨팅 시간만큼만 비용을 지불합니다.
+ [Amazon Simple Queue Service(Amazon SQS)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html)는 내구력 있고 가용성이 뛰어난 보안 호스팅 대기열을 제공하며 이를 통해 분산 소프트웨어 시스템과 구성 요소를 통합 및 분리할 수 있습니다.
+ [Amazon Simple Storage Service(S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다.

**기타 도구**
+ [GitHub Actions](https://docs.github.com/en/actions/writing-workflows/quickstart)는 GitHub 리포지토리와 긴밀하게 통합된 지속적 통합 및 지속적 전달(CI/CD) 플랫폼입니다. GitHub Actions를 사용하여 빌드, 테스트 및 배포 파이프라인을 자동화할 수 있습니다.

**코드 리포지토리**

이 패턴의 코드는 GitHub [amazon-codeguru-suite-cdk-python](https://github.com/aws-samples/amazon-codeguru-suite-cdk-python) 리포지토리에서 사용할 수 있습니다.

## 모범 사례
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-best-practices"></a>
+ [AWS CDK를 사용하여 클라우드 인프라를 개발하고 배포하기 위한 모범 사례](https://docs.aws.amazon.com/cdk/v2/guide/best-practices.html)를 따릅니다.
+ GitHub Actions 워크플로[에서를 사용할 때는 다음을 포함하여 IAM의 보안 모범 사례를](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) 따르세요. AWS 서비스 
  + 리포지토리 코드에 자격 증명을 저장하지 마세요.
  + [IAM 역할을 수임](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-workloads-use-roles)하여 임시 자격 증명을 받고 가능하면 임시 자격 증명을 사용합니다.
  + GitHub Actions 워크플로에 사용되는 IAM 역할에 [최소 권한을 부여합니다](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege). GitHub Actions 워크플로에서 작업을 수행하는 데 필요한 권한만 부여합니다.
  + GitHub Actions 워크플로에 사용되는 IAM 역할의 [활동을 모니터링합니다](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#remove-credentials).
  + 사용하는 장기 자격 증명을 주기적으로 교체합니다.

## 에픽
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-epics"></a>

### 환경을 설정합니다
<a name="set-up-your-environment"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
|  AWS 자격 증명을 설정합니다. | 스택을 배포하는 AWS 계정 및 AWS 리전 를 정의하는 변수를 내보내려면 다음 명령을 실행합니다.<pre>export CDK_DEFAULT_ACCOUNT=<12-digit AWS account number></pre><pre>export CDK_DEFAULT_REGION=<AWS Region></pre>의 AWS 자격 증명은 환경 변수를 통해 AWS CDK 제공됩니다. | AWS DevOps, DevOps 엔지니어 | 
| 리포지토리를 복제합니다. | 리포지토리를 로컬 시스템에 복제하려면 다음 명령을 실행하세요.<pre>git clone https://github.com/aws-samples/amazon-codeguru-suite-cdk-python.git</pre> | AWS DevOps, DevOps 엔지니어 | 
| CDK 툴킷을 설치합니다. | CDK Toolkit이 설치되었는지 확인하고 버전을 확인하려면 다음 명령을 실행합니다. <pre>cdk --version</pre>CDK 툴킷 버전이 2.27.0 이전인 경우 다음 명령을 입력하여 버전 2.27.0으로 업데이트합니다.<pre>npm install -g aws-cdk@2.27.0</pre>CDK 툴킷이 설치되지 *않은* 경우에는 다음 명령을 실행하여 설치합니다.<pre>npm install -g aws-cdk@2.27.0 --force</pre> | AWS DevOps, DevOps 엔지니어 | 
| 필요한 종속 항목을 설치합니다. | 필요한 프로젝트 종속성을 설치하려면 다음 명령을 실행합니다.<pre>python -m pip install --upgrade pip<br />pip install -r requirements.txt</pre> | AWS DevOps, DevOps 엔지니어 | 
| CDK 환경을 부트스트랩합니다. | AWS CDK 환경을 [부트스트랩](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html)하려면 다음 명령을 실행합니다.<pre>npm install<br />npm run cdk bootstrap "aws://${ACCOUNT_NUMBER}/${AWS_REGION}"</pre>환경을 성공적으로 부트스트랩한 후에는 다음 출력이 표시되어야 합니다.<pre>⏳  Bootstrapping environment aws://{account}/{region}...<br />✅  Environment aws://{account}/{region} bootstrapped</pre> | AWS DevOps, DevOps 엔지니어 | 

### CDK 앱 배포
<a name="deploy-the-cdk-app"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
|  AWS CDK 앱을 합성합니다. |  AWS CDK 앱을 합성하려면 다음 명령을 실행합니다.<pre>cdk synth</pre>이 명령에 대한 자세한 내용은 AWS CDK 설명서의 [cdk synthesize](https://docs.aws.amazon.com/cdk/v2/guide/ref-cli-cmd-synth.html)를 참조하세요. | AWS DevOps, DevOps 엔지니어 | 
| 리소스를 배포합니다. | 리소스를 배포하려면 다음 명령을 실행합니다.<pre>cdk deploy --require-approval never</pre>`--require-approval never` 플래그는 CDK가 모든 변경 사항을 자동으로 승인하고 실행함을 의미합니다. 여기에는 CDK가 일반적으로 수동 검토가 필요한 것으로 플래그를 지정하는 변경 사항(예: IAM 정책 변경 또는 리소스 제거)이 포함됩니다. 프로덕션 환경에서 `--require-approval never` 플래그를 사용하기 전에 CDK 코드 및 CI/CD 파이프라인이 잘 테스트되고 안전한지 확인합니다. | AWS DevOps, DevOps 엔지니어 | 

### GitHub 시크릿 및 개인용 액세스 토큰 생성
<a name="create-github-secrets-and-personal-access-token"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| GitHub에서 필요한 시크릿을 생성합니다. | GitHub Actions 워크플로가 리포지토리의 코드에 민감한 정보를 노출하지 않고 AWS 리소스에 안전하게 액세스할 수 있도록 하려면 보안 암호를 생성합니다. GitHub에서 `ROLE_TO_ASSUME`, `CodeGuruReviewArtifactBucketName` 및 `AWS_ACCOUNT_ID`에 대한 보안 암호를 생성하려면 GitHub 작업 설명서의 [리포지토리에 대한 보안 암호 생성](https://docs.github.com/en/actions/security-for-github-actions/security-guides/using-secrets-in-github-actions#creating-secrets-for-a-repository)의 지침을 따릅니다.다음은 이러한 변수에 대한 자세한 정보입니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automate-amazon-codeguru-reviews-for-aws-cdk-python-applications.html) | AWS DevOps, DevOps 엔지니어 | 
| GitHub 개인용 액세스 토큰을 생성합니다. | GitHub Actions 워크플로가 GitHub를 인증하고 상호 작용할 수 있는 안전한 방법을 설정하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automate-amazon-codeguru-reviews-for-aws-cdk-python-applications.html) | AWS DevOps, DevOps 엔지니어 | 

### 정리
<a name="clean-up"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 리소스를 정리하십시오. |  AWS CDK Python 앱을 정리하려면 다음 명령을 실행합니다.<pre>cdk destroy --all</pre> | DevOps 엔지니어 | 

## 문제 해결
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-troubleshooting"></a>


| 문제 | Solution | 
| --- | --- | 
| 대시보드 조사 결과에 대한 링크를 표시합니다. | CI/CD 파이프라인 중에 조사 결과를 인쇄할 수 있는 방법은 없습니다. 대신이 패턴은 GitHub Actions를 대체 방법으로 사용하여 결과를 처리하고 표시합니다. | 

## 관련 리소스
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-resources"></a>

**AWS resources**
+ [AWS 클라우드 개발 키트](https://aws.amazon.com/cdk/)
+ [Amazon CodeGuru 설명서](https://docs.aws.amazon.com/codeguru/)
+ [Amazon S3](https://aws.amazon.com/s3/)
+ [AWS Identity and Access Management](https://aws.amazon.com/iam/)
+ [Amazon Simple Queue Service](https://aws.amazon.com/sqs/)
+ [란 무엇입니까 AWS Lambda?](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)

**GitHub 설명서**
+ [Amazon Web Services에서 OpenID Connect 구성](https://docs.github.com/en/actions/security-for-github-actions/security-hardening-your-deployments/configuring-openid-connect-in-amazon-web-services)
+ [GitHub Actions](https://github.com/features/actions)
+ [워크플로 재사용](https://docs.github.com/en/actions/using-workflows/reusing-workflows)
+ [워크플로 트리거](https://docs.github.com/en/actions/using-workflows/triggering-a-workflow) 