

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 GitHub 動作自動化 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 動作協調的 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 儲存庫，具有讀取和寫入工作流程許可，以及 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) 撰寫的應用程式](https://docs.aws.amazon.com/codeguru/latest/profiler-ug/what-is-codeguru-profiler.html#what-is-language-support)，以及執行時間和 Python 3.6 或更新版本。
+ Amazon CodeGuru Reviewer 僅[支援來自下列來源提供者的 Java 和 Python 程式碼儲存庫關聯](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/working-with-repositories.html)：Bitbucket AWS CodeCommit、GitHub、GitHub Enterprise Cloud 和 GitHub Enterprise Server。此外，僅透過 GitHub 動作支援 Amazon Simple Storage Service (Amazon S3) 儲存庫。
+ 在持續整合和持續部署 (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)，然後選擇服務的連結。

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

下圖顯示此解決方案的架構。

![使用 GitHub 動作整合 AWS CDK Python 應用程式 CodeGuru 程式碼檢閱的工作流程。](http://docs.aws.amazon.com/zh_tw/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 Secrets 中指定的 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 (Amazon 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 動作來自動化建置、測試和部署管道。

**程式碼儲存庫**

此模式的程式碼可在 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) 來接收臨時登入資料，並盡可能使用臨時登入資料。
  + 將[最低權限授予](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)  GitHub 動作工作流程中使用的 IAM 角色。僅授予在 GitHub 動作工作流程中執行動作所需的許可。
  + [監控 GitHub 動作工作流程中使用的 IAM 角色活動](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#remove-credentials) 。 GitHub 
  + 定期輪換您使用的任何長期登入資料。

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

### 設定您的環境
<a name="set-up-your-environment"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 設定 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>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 合成 AWS CDK 應用程式。 | 若要合成 AWS CDK 應用程式，請執行下列命令：<pre>cdk synth</pre><br />如需此命令的詳細資訊，請參閱 AWS CDK 文件中的 [cdk 合成](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>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 在 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)中的指示。<br />以下是有關變數的詳細資訊：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/automate-amazon-codeguru-reviews-for-aws-cdk-python-applications.html) | AWS DevOps，DevOps 工程師 | 
| 建立 GitHub 個人存取字符。 | 若要為您的 GitHub 動作工作流程設定安全的方式來驗證身分並與 GitHub 互動，請執行下列動作：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/automate-amazon-codeguru-reviews-for-aws-cdk-python-applications.html) | AWS DevOps，DevOps 工程師 | 

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


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 清除資源。 | 若要清除 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 雲端開發套件](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 動作](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) 