本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Step Functions 和 Lambda Proxy 函數跨AWS帳戶啟動 CodeBuild 專案
由 Richard Milner-Watts (AWS) 和 Amit Anjarlekar (AWS) 建立
程式碼儲存庫:跨帳戶 CodeBuild 代理 | 環境:生產 | 技術: DevOps;管理與治理;操作;無伺服器 |
AWS 服務:AWS CodeBuild;AWSLambda;AWSStep Functions;AWSX-Ray; AWS CloudFormation |
Summary
此模式示範如何使用 AWS Step Functions 和 AWS Lambda Proxy 函數,在多個AWS帳戶中非同步啟動AWS CodeBuild 專案。您可以使用模式的範例 Step Functions 狀態機器來測試 CodeBuild 專案的成功。
CodeBuild 可協助您從完全受管的執行期環境使用AWS命令列介面 (AWS CLI) 啟動操作任務。您可以覆寫環境變數,在執行階段變更 CodeBuild 專案的行為。此外,您可以使用 CodeBuild 管理工作流程。如需詳細資訊,請參閱AWS研討會網站上的 Service Catalog Tools
先決條件和限制
先決條件
兩個作用中AWS帳戶:使用 Step Functions 叫用 Lambda 代理函數的來源帳戶,以及用於建置遠端 CodeBuild 範例專案的目標帳戶
限制
此模式無法用來在帳戶之間複製成品。
架構
下圖顯示此模式建置的架構。
該圖顯示以下工作流程:
Step Functions 狀態機器會剖析提供的輸入映射,並叫用您定義的每個帳戶、區域和專案的 Lambda 代理函數 (
codebuild-proxy-lambda
)。Lambda 代理函數使用 AWS Security Token Service (AWS STS) 擔任IAM代理角色 (
codebuild-proxy-role
),此角色與目標帳戶中IAM的政策 (codebuild-proxy-policy
) 相關聯。使用擔任的角色,Lambda 函數會啟動 CodeBuild 專案並傳回 CodeBuild 任務 ID。Step Functions 狀態機器會循環和輪詢 CodeBuild 任務,直到收到成功或失敗狀態為止。
狀態機器邏輯會顯示在下圖中。
技術堆疊
AWS CloudFormation
CodeBuild
IAM
Lambda
Step Functions
X-Ray
工具
AWS CloudFormation 可協助您設定AWS資源、快速且一致地佈建資源,並在其整個生命週期內跨AWS帳戶和區域進行管理。
AWS CloudFormation 設計工具提供整合JSON和YAML編輯器,可協助您檢視和編輯 CloudFormation 範本。
AWS CodeBuild 是一項完全受管建置服務,可協助您編譯原始程式碼、執行單位測試,並產生準備好部署的成品。
AWS Identity and Access Management (IAM) 可協助您安全地管理 AWS 資源的存取,方法是控制誰經過身分驗證並獲授權使用。
AWS Lambda 是一種運算服務,可協助您執行程式碼,而不需要佈建或管理伺服器。它只會在需要時執行程式碼並自動擴展,因此您只需支付您使用的運算時間。
AWS Step Functions 是一種無伺服器協調服務,可協助您結合 AWS Lambda 函數和其他AWS服務來建置業務關鍵型應用程式。
AWS X-Ray 可協助您收集應用程式提供的請求相關資料,並提供工具供您用來檢視、篩選和深入了解該資料,以識別問題和最佳化的機會。
Code
此模式的範例程式碼可在 GitHub跨帳戶 CodeBuild 代理
最佳實務
調整 Step Function 狀態機器中的等待時間值,以盡量減少任務狀態的輪詢請求。使用 CodeBuild 專案的預期執行時間。
在步驟函數中調整地圖的
MaxConcurrency
屬性,以控制可以平行執行的 CodeBuild 專案數量。如有需要,請檢閱生產準備的範例程式碼。考慮解決方案可能會記錄哪些資料,以及預設 Amazon CloudWatch 加密是否足夠。
史詩
任務 | 描述 | 所需的技能 |
---|---|---|
記錄AWS帳戶 IDs。 | AWS 需要 帳戶IDs才能跨帳戶設定存取權。 記錄來源和目標帳戶的帳戶 AWS ID。如需詳細資訊,請參閱 IAM 文件中的尋找AWS您的帳戶 ID。 | AWS DevOps |
下載 AWS CloudFormation 範本。 | 注意:在 AWS CloudFormation 範本中, | AWS DevOps |
建立和部署AWS CloudFormation 堆疊。 |
注意:您必須先建立代理 Lambda 函數的AWS CloudFormation 堆疊,才能在目標帳戶中建立任何資源。當您在目標帳戶中建立信任政策時,IAM角色會從角色名稱轉譯為內部識別碼。這就是為什麼IAM角色必須已經存在。 | AWS DevOps |
確認建立代理函數和狀態機器。 |
| AWS DevOps |
任務 | 描述 | 所需的技能 |
---|---|---|
建立和部署AWS CloudFormation 堆疊。 |
| AWS DevOps |
驗證範例 CodeBuild 專案的建立。 |
| AWS DevOps |
任務 | 描述 | 所需的技能 |
---|---|---|
啟動 狀態機器。 |
| AWS DevOps |
驗證環境變數。 |
| AWS DevOps |
故障診斷
問題 | 解決方案 |
---|---|
Step Functions 執行時間超過預期。 | 在 Step Function 狀態機器中調整地圖的 |
CodeBuild 任務的執行時間比預期長。 |
|