本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
AWS Service Catalog 使用程式碼儲存庫在 中佈建 Terraform 產品
Rahul Sharad Gaikwad 醫生和 Tamilselvan P,Amazon Web Services
Summary
AWS Service Catalog 支援對 HashiCorp Terraform
此模式可協助您使用 Terraform 程式碼部署 AWS 資源。GitHub 儲存庫中的 Terraform 程式碼可透過 Service Catalog 存取。使用此方法,您可以將產品與現有的 Terraform 工作流程整合。管理員可以使用 Terraform 建立 Service Catalog 產品組合,並將 AWS Launch Wizard 產品新增至這些產品組合。
以下是此解決方案的優點:
由於 Service Catalog 中的復原功能,如果在部署期間發生任何問題,您可以將產品還原至先前的版本。
您可以輕鬆識別產品版本之間的差異。這可協助您解決部署期間的問題。
您可以在 Service Catalog 中設定儲存庫連線,例如 GitHub 或 GitLab。您可以直接透過儲存庫進行產品變更。
如需 整體優勢的詳細資訊 AWS Service Catalog,請參閱什麼是 Service Catalog。
先決條件和限制
先決條件
架構

該圖顯示以下工作流程:
當 Terraform 組態就緒時,開發人員會建立包含所有 Terraform 程式碼的 .zip 檔案。開發人員會將 .zip 檔案上傳至連線至 Service Catalog 的程式碼儲存庫。
管理員會將 Terraform 產品與 Service Catalog 中的產品組合建立關聯。管理員也會建立啟動限制,允許最終使用者佈建產品。
在 Service Catalog 中,最終使用者使用 Terraform 組態啟動 AWS 資源。他們可以選擇要部署的產品版本。
工具
AWS 服務
AWS Lambda 是一項運算服務,可協助您執行程式碼,無需佈建或管理伺服器。它只會在需要時執行程式碼並自動擴展,因此您只需按使用的運算時間付費。
AWS Service Catalog 可協助您集中管理已核准的 IT 服務目錄 AWS。最終使用者可在機構所設的限制範圍內,迅速地只部署自己需要且經核准的 IT 服務。
其他服務
程式碼儲存庫
如果您需要可透過 Service Catalog 部署的範例 Terraform 組態,您可以使用 GitHub Amazon Macie Organization Setup using Terraform
最佳實務
史詩
任務 | 描述 | 所需的技能 |
---|---|---|
(選用) 安裝 Docker。 | 如果您想要在開發環境中執行 AWS Lambda 函數,請安裝 Docker。如需相關說明,請參閱 Docker 文件中的安裝 Docker 引擎 | DevOps 工程師 |
安裝適用於 Terraform 的 AWS Service Catalog 引擎。 |
| DevOps 工程師、AWS 管理員 |
任務 | 描述 | 所需的技能 |
---|---|---|
建立 GitHub 儲存庫的連線。 |
| AWS 管理員 |
任務 | 描述 | 所需的技能 |
---|---|---|
建立 Service Catalog 產品。 |
| AWS 管理員 |
建立組合。 |
| AWS 管理員 |
將 Terraform 產品新增至產品組合。 |
| AWS 管理員 |
建立存取政策。 |
| AWS 管理員 |
建立自訂信任政策。 | AWS 管理員 | |
將啟動限制新增至 Service Catalog 產品。 |
| AWS 管理員 |
授予產品存取權。 |
| AWS 管理員 |
啟動產品。 |
| DevOps 工程師 |
任務 | 描述 | 所需的技能 |
---|---|---|
驗證部署。 | Service Catalog 佈建工作流程有兩種 AWS Step Functions 狀態機器:
您檢查
| DevOps 工程師 |
任務 | 描述 | 所需的技能 |
---|---|---|
刪除佈建的產品。 |
| DevOps 工程師 |
移除適用於 Terraform 的 AWS Service Catalog 引擎。 |
| AWS 管理員 |
相關資源
AWS 文件
Terraform 文件
其他資訊
存取政策
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "s3:GetObject", "Resource": "*", "Condition": { "StringEquals": { "s3:ExistingObjectTag/servicecatalog:provisioning": "true" } } }, { "Action": [ "s3:CreateBucket*", "s3:DeleteBucket*", "s3:Get*", "s3:List*", "s3:PutBucketTagging" ], "Resource": "arn:aws:s3:::*", "Effect": "Allow" }, { "Action": [ "resource-groups:CreateGroup", "resource-groups:ListGroupResources", "resource-groups:DeleteGroup", "resource-groups:Tag" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "tag:GetResources", "tag:GetTagKeys", "tag:GetTagValues", "tag:TagResources", "tag:UntagResources" ], "Resource": "*", "Effect": "Allow" } ] }
信任政策
{ "Version": "2012-10-17", "Statement": [ { "Sid": "GivePermissionsToServiceCatalog", "Effect": "Allow", "Principal": { "Service": "servicecatalog.amazonaws.com" }, "Action": "sts:AssumeRole" }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::account_id:root" }, "Action": "sts:AssumeRole", "Condition": { "StringLike": { "aws:PrincipalArn": [ "arn:aws:iam::accounti_id:role/TerraformEngine/TerraformExecutionRole*", "arn:aws:iam::accounti_id:role/TerraformEngine/ServiceCatalogExternalParameterParserRole*", "arn:aws:iam::accounti_id:role/TerraformEngine/ServiceCatalogTerraformOSParameterParserRole*" ] } } } ] }