本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 GitHub 動作自動化 AWS CDK Python 應用程式的 Amazon CodeGuru 檢閱
由 Vanitha Dontireddy (AWS) 和 Sarat Chandra Pothula (AWS) 建立
Summary
此模式展示透過 GitHub 動作協調的 AWS Cloud Development Kit (AWS CDK) Python 應用程式 Amazon CodeGuru 自動化程式碼檢閱的整合。解決方案會部署 AWS CDK Python 中定義的無伺服器架構。透過在開發管道中自動化專家程式碼分析,此方法可以對 AWS CDK Python 專案執行下列動作:
增強程式碼品質。
簡化工作流程。
最大化無伺服器運算的優勢。
先決條件和限制
先決條件
作用中 AWS 帳戶。
作用中的 GitHub 帳戶和 GitHub 儲存庫,具有讀取和寫入工作流程許可,以及 GitHub Actions 建立提取請求 (PR),以確保 PR 工作流程正確運作。
GitHub 動作中的 OpenID Connect (OIDC) 角色,可在 中部署解決方案 AWS 帳戶。若要建立角色,請使用 AWS CDK 建構
。
限制
Amazon CodeGuru Profiler 支援以所有 Java 虛擬機器 (JVM) 語言 (例如 Scala 和 Kotlin) 撰寫的應用程式,以及執行期和 Python 3.6 或更新版本。
Amazon CodeGuru Reviewer 僅支援來自下列來源提供者的 Java 和 Python 程式碼儲存庫關聯:Bitbucket AWS CodeCommit、GitHub、GitHub Enterprise Cloud 和 GitHub Enterprise Server。此外,Amazon Simple Storage Service (Amazon S3) 儲存庫僅透過 GitHub 動作支援。
在持續整合和持續部署 (CI/CD) 管道期間,沒有自動列印問題清單的方法。反之,此模式會使用 GitHub 動作做為替代方法來處理和顯示問題清單。
有些 AWS 服務 完全無法使用 AWS 區域。如需區域可用性,請參閱依區域分類的 AWS 服務
。如需特定端點,請參閱服務端點和配額,然後選擇服務的連結。
架構
下圖顯示此解決方案的架構。

如圖表所示,當開發人員建立提取請求 (PR) 以供檢閱時,GitHub 動作會觸發下列步驟:
IAM 角色假設 – 管道使用 GitHub Secrets 中指定的 IAM 角色來執行部署任務。
程式碼分析
CodeGuru Reviewer 會分析存放在 Amazon S3 儲存貯體中的程式碼。它可識別瑕疵,並提供修正和最佳化的建議。
CodeGuru Security 會掃描政策違規和漏洞。
調查結果檢閱
管道會在主控台輸出中列印問題清單儀表板的連結。
如果偵測到關鍵調查結果,管道會立即失敗。
對於高、正常或低嚴重性問題清單,管道會繼續下一個步驟。
PR 核准
檢閱者必須手動核准 PR。
如果 PR 遭拒,管道會失敗並停止進一步的部署步驟。
CDK 部署 – 在 PR 核准後,CDK 部署程序就會開始。它會設定下列 AWS 服務 和資源:
CodeGuru Profiler
AWS Lambda 函數
Amazon Simple Queue Service (Amazon SQS) 佇列
分析資料產生 – 若要為 CodeGuru Profiler 產生足夠的分析資料:
管道會定期傳送訊息至 Amazon SQS 佇列,多次叫用 Lambda 函數。
工具
AWS 服務
AWS Cloud Development Kit (AWS CDK) 是一種軟體開發架構,可協助您在程式碼中定義和佈建 AWS 雲端 基礎設施。
CDK Toolkit 是命令列雲端開發套件,可協助您與 AWS CDK 應用程式互動。
Amazon CodeGuru Profiler 會從即時應用程式收集執行期效能資料,並提供建議,協助您微調應用程式效能。
Amazon CodeGuru Reviewer 使用程式分析和機器學習來偵測開發人員難以找到的潛在瑕疵。然後,CodeGuru Profiler 會提供改善 Java 和 Python 程式碼的建議。
Amazon CodeGuru Security 是一種靜態應用程式安全工具,使用機器學習來偵測安全政策違規和漏洞。它提供解決安全風險的建議,並產生指標,以便您可以追蹤應用程式的安全狀態。
AWS Identity and Access Management (IAM) 透過控制已驗證並獲授權使用資源的人員,協助您安全地管理對 AWS 資源的存取。
AWS Lambda 是一項運算服務,可協助您執行程式碼,無需佈建或管理伺服器。它只會在需要時執行程式碼並自動擴展,因此您只需支付您使用的運算時間。
Amazon Simple Queue Service (Amazon SQS) 提供安全、耐用且可用的託管佇列,可協助您整合和分離分散式軟體系統和元件。
Amazon Simple Storage Service (Amazon S3) 是一種雲端型物件儲存服務,可協助您儲存、保護和擷取任何數量的資料。
其他工具
GitHub Actions
是與 GitHub 儲存庫緊密整合的持續整合和持續交付 (CI/CD) 平台。您可以使用 GitHub 動作來自動化建置、測試和部署管道。
程式碼儲存庫
此模式的程式碼可在 GitHub amazon-codeguru-suite-cdk-python
最佳實務
在 GitHub Actions 工作流程中使用 時,請遵循 IAM 中的安全最佳實務,包括: AWS 服務
請勿將登入資料存放在您的儲存庫程式碼中。
擔任 IAM 角色來接收臨時登入資料,並盡可能使用臨時登入資料。
將最低權限授予 GitHub 動作工作流程中使用的 IAM 角色。僅授予在 GitHub 動作工作流程中執行動作所需的許可。
監控 GitHub 動作工作流程中使用的 IAM 角色活動。 GitHub
定期輪換您使用的任何長期憑證。
史詩
任務 | 描述 | 所需的技能 |
---|---|---|
設定 AWS 登入資料。 | 若要匯出定義 的變數, AWS 帳戶 以及您要部署堆疊 AWS 區域 的位置,請執行下列命令:
的 AWS 登入資料 AWS CDK 是透過環境變數提供。 | AWS DevOps,DevOps 工程師 |
複製儲存庫。 | 若要複製本機電腦上的儲存庫,請執行下列命令:
| AWS DevOps,DevOps 工程師 |
安裝 CDK Toolkit。 | 若要確認已安裝 CDK Toolkit 並檢查版本,請執行下列命令:
如果 CDK Toolkit 版本早於 2.27.0,請輸入下列命令將其更新至 2.27.0 版:
如果未安裝 CDK Toolkit,請執行下列命令來安裝它:
| AWS DevOps,DevOps 工程師 |
安裝所需的依存項目。 | 若要安裝所需的專案相依性,請執行下列命令:
| AWS DevOps,DevOps 工程師 |
引導 CDK 環境。 | 若要引導 AWS CDK 環境,請執行下列命令:
成功引導環境後,應該會顯示下列輸出:
| AWS DevOps,DevOps 工程師 |
任務 | 描述 | 所需的技能 |
---|---|---|
合成 AWS CDK 應用程式。 | 若要合成 AWS CDK 應用程式,請執行下列命令:
如需此命令的詳細資訊,請參閱 AWS CDK 文件中的 cdk 合成。 | AWS DevOps,DevOps 工程師 |
部署 資源。 | 若要部署 資源,請執行下列命令:
注意
| AWS DevOps,DevOps 工程師 |
任務 | 描述 | 所需的技能 |
---|---|---|
在 GitHub 中建立所需的秘密。 | 若要允許 GitHub Actions 工作流程安全地存取 AWS 資源,而不會在儲存庫的程式碼中公開敏感資訊,請建立秘密。若要在 GitHub 中為 以下是有關變數的詳細資訊:
| AWS DevOps,DevOps 工程師 |
建立 GitHub 個人存取字符。 | 若要為您的 GitHub 動作工作流程設定安全的方式來驗證 GitHub 並與之互動,請執行下列動作: | AWS DevOps,DevOps 工程師 |
任務 | 描述 | 所需的技能 |
---|---|---|
清除資源。 | 若要清除 AWS CDK Python 應用程式,請執行下列命令:
| DevOps 工程師 |
故障診斷
問題 | 解決方案 |
---|---|
顯示儀表板問題清單的連結。 | 在 CI/CD 管道期間,無法列印問題清單。反之,此模式會使用 GitHub 動作做為替代方法來處理和顯示問題清單。 |
相關資源
AWS resources
GitHub 文件