

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 GitHub 操作在亚马逊自动 CodeGuru 审查 AWS CDK Python 应用程序
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications"></a>

*Vanitha Dontireddy 和 Sarat Chandra Pothula，Amazon Web Services*

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

注意：自 2025 年 11 月 7 日起，您无法在 Amazon CodeGuru Reviewer 中创建新的存储库关联。要了解具有类似审阅者功能的服务，请参阅 CodeGuru Reviewer 文档中的 [Amazon CodeGuru Reviewer 可用性变更](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/codeguru-reviewer-availability-change.html)。 CodeGuru 

此模式展示了 Amazon 针对 AWS Cloud Development Kit (AWS CDK) Python 应用程序的 CodeGuru 自动代码审查的集成，这些审查是通过操作精心编排的。 GitHub 该解决方案部署了在 Python AWS CDK 中定义的无服务器架构。通过在开发管道中自动执行专家代码分析，此方法可以为 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 存储库，并通过 GitHub Actions 创建拉取请求 (PR)，以确保 PR 工作流程正常运行。
+ 在 “ GitHub 操作” 中扮演一个 OpenID Connect (OIDC) 角色，用于在中部署解决方案。 AWS 账户要创建角色，请使用 [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 仅[支持与来自以下来源提供商的 Java 和 Python 代码存储库的关联](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/working-with-repositories.html)： AWS CodeCommit、Bitbucket GitHub、、 GitHub 企业云和 GitHub 企业服务器。此外，只有通过操作才能支持 GitHub 亚马逊简单存储服务 (Amazon S3) Service 存储库。
+ 在持续集成和持续部署（CI/CD）管道中，没有自动打印调查发现的方法。相反，这种模式使用 GitHub 操作作为处理和显示发现结果的替代方法。
+ 有些 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 操作为 AWS CDK Python 应用程序集成 AWS CDK Python 应用程序 CodeGuru 代码审查的工作流程。](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/c5395e3e-ff2a-41cf-bd64-c73cc928b60b/images/18f880a2-9bc3-4d71-a598-bb83b68ee383.png)


如图所示，当开发者创建拉取请求 (PR) 以供审核时，Acti GitHub ons 会触发以下步骤：

1. IAM 角色假设 — 管道使用 GitHub 密钥中指定的 IAM 角色来执行部署任务。

1. 代码分析
   + CodeGuru 审阅者分析存储在 Amazon S3 存储桶中的代码。它可识别缺陷并提供关于修复和优化建议。
   + CodeGuru 对违反政策的行为和漏洞进行安全扫描。

1. 调查发现审核
   + 管道会在控制台输出中打印指向调查发现控制面板的链接。
   + 如果检测到关键调查发现，管道会立即失效。
   + 对于高、正常或低严重性的调查发现，管道会继续执行下一步。

1. PR 批准
   + 审阅者必须手动批准 PR。
   + 如果 PR 被拒绝，则管道将失败并停止进一步的部署步骤。

1. CDK 部署 – 在 PR 批准后，开始 CDK 部署过程。它设置了以下内容 AWS 服务 和资源：
   + CodeGuru Profiler
   + AWS Lambda 函数
   + Amazon Simple Queue Service（Amazon SQS）队列

1. 生成分析数据-要为 P CodeGuru rofiler 生成足够的分析数据，请执行以下操作：
   + 该管道通过定期向 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 Cloud 基础架构。
+ [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) 使用程序分析和机器学习来检测开发人员难以发现的潜在缺陷。然后，P CodeGuru rofiler 会提供改进你的 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（Amazon S3）](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)是一项基于云的对象存储服务，可帮助您存储、保护和检索任意数量的数据。

**其他工具**
+ GitHub A@@ [c](https://docs.github.com/en/actions/writing-workflows/quickstart) tions 是一个持续集成和持续交付 (CI/CD) 平台，与 GitHub 存储库紧密集成。您可以使用 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 操作工作流程[中使用时，请遵循 IAM AWS 服务 中的安全最佳实践](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)，包括：
  + 请勿在存储库代码中存储凭证。
  + [代入 IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-workloads-use-roles)以接收临时凭证，并在可能的情况下使用临时凭证。
  + 向 GitHub 操作工作流程中使用的 IAM 角色@@ [授予最低权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)。仅授予在操作工作流程中执行操作所需的权限。 GitHub 
  + [监控 GitHub 操作工作流程中使用的 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>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 设置 AWS 凭据。 | 要导出定义堆栈 AWS 账户 以及部署堆栈 AWS 区域 位置的变量，请运行以下命令：<pre>export CDK_DEFAULT_ACCOUNT=<12-digit AWS account number></pre><pre>export CDK_DEFAULT_REGION=<AWS Region></pre><br />的 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 Toolkit。 | 要确认已安装 CDK Toolkit 并检查其版本，请运行以下命令： <pre>cdk --version</pre><br />如果 CDK Toolkit 版本低于 2.27.0，输入以下命令以将其更新至 2.27.0 版本：<pre>npm install -g aws-cdk@2.27.0</pre><br />如果*未*安装 CDK Toolkit，请运行以下命令进行安装：<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 环境。 | 要[引导](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html) AWS CDK 环境，请运行以下命令：<pre>npm install<br />npm run cdk bootstrap "aws://${ACCOUNT_NUMBER}/${AWS_REGION}"</pre><br />成功引导环境后，应该显示以下输出：<pre>⏳  Bootstrapping environment aws://{account}/{region}...<br />✅  Environment aws://{account}/{region} bootstrapped</pre> | AWS DevOps， DevOps 工程师 | 

### 部署 CDK 应用程序
<a name="deploy-the-cdk-app"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 合成 AWS CDK 应用程序。 | 要合成 AWS CDK 应用程序，请运行以下命令：<pre>cdk synth</pre><br />有关此命令的更多信息，请参阅文档中的 [cdk synthesiz](https://docs.aws.amazon.com/cdk/v2/guide/ref-cli-cmd-synth.html) e。 AWS CDK  | 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>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在中创建所需的密钥 GitHub。 | 要允许 A GitHub ctions 工作流程在不暴露仓库代码中的敏感信息的情况下安全地访问 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)中的说明进行操作。<br />下面是有关这些变量的详细信息：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/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/zh_cn/prescriptive-guidance/latest/patterns/automate-amazon-codeguru-reviews-for-aws-cdk-python-applications.html) | AWS DevOps， DevOps 工程师 | 

### 清理
<a name="clean-up"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 清理资源。 | 要清理你的 AWS CDK Python 应用程序，请运行以下命令：<pre>cdk destroy --all</pre> | DevOps 工程师 | 

## 问题排查
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-troubleshooting"></a>


| 问题 | 解决方案 | 
| --- | --- | 
| 显示指向控制面板调查发现的链接。 | 在 CI/CD 管道期间无法打印调查结果。相反，这种模式使用 GitHub 操作作为处理和显示发现结果的替代方法。 | 

## 相关资源
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-resources"></a>

**AWS resources**
+ [AWS Cloud 开发套件](https://aws.amazon.com/cdk/)
+ [亚马逊 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 操作](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) 