本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
AWS Service Catalog 使用程式碼儲存庫在 中佈建 Terraform 產品
由 Dr. Rahul Sharad Gaikwad (AWS) 和 Tamilselvan P (AWS) 建立
Summary
AWS Service Catalog 支援自助式佈建,並控管 HashiCorp Terraform
此模式可協助您使用 Terraform 程式碼部署 AWS 資源。儲存 GitHub 庫中的 Terraform 程式碼可透過 Service Catalog 存取。使用此方法,您可以將產品與現有的 Terraform 工作流程整合。管理員可以建立 Service Catalog 產品組合,並使用 Terraform 將 AWS Launch Wizard 產品新增至這些產品組合。
以下是此解決方案的優點:
由於 Service Catalog 中的復原功能,如果在部署期間發生任何問題,您可以將產品還原至先前的版本。
您可以輕鬆識別產品版本之間的差異。這可協助您解決部署期間的問題。
您可以在 Service Catalog 中設定儲存庫連線,例如 至 GitHub 或 GitLab。您可以直接透過儲存庫進行產品變更。
如需 整體優勢的相關資訊 AWS Service Catalog,請參閱什麼是 Service Catalog。
先決條件和限制
先決條件
架構
該圖顯示以下工作流程:
當 Terraform 組態就緒時,開發人員會建立包含所有 Terraform 程式碼的 .zip 檔案。開發人員會將 .zip 檔案上傳至連線至 Service Catalog 的程式碼儲存庫。
管理員將 Terraform 產品與 Service Catalog 中的產品組合建立關聯。管理員也會建立啟動限制條件,以允許使用者佈建產品。
在服務目錄中,最終使用者使用 Terraform 組態啟動 AWS 資源。他們可以選擇要部署的產品版本。
工具
AWS 服務
AWS Lambda 是一項運算服務,可協助您執行程式碼,無需佈建或管理伺服器。它只會在需要時執行程式碼並自動擴展,因此您只需支付您使用的運算時間。
AWS Service Catalog 可協助您集中管理已核准的 IT 服務目錄 AWS。最終使用者可在機構所設的限制範圍內,迅速地只部署自己需要且經核准的 IT 服務。
其他服務
程式碼儲存庫
如果您需要可透過 Service Catalog 部署的 Terraform 組態範例,您可以使用 GitHub 使用 Terraform 儲存庫的Amazon Macie Organization Setup
最佳實務
史詩
任務 | 描述 | 所需的技能 |
---|---|---|
(選用) 安裝 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*" ] } } } ] }