本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用程式碼儲存庫在 AWS Service Catalog 中佈建 Terraform 產品
由 Dr. Rahul Sharad Gaikwad (AWS) 和 Tamilselvan P (AWS) 建立
環境:PoC 或試行 | 技術:基礎設施; DevOps | 工作負載:所有其他工作負載 |
AWS 服務:AWSService Catalog;Amazon EC2 |
Summary
AWS Service Catalog 支援自助佈建,並對 HashiCorp Terraform
此模式可協助您使用 Terraform 程式碼部署AWS資源。 GitHub 儲存庫中的 Terraform 程式碼可透過 Service Catalog 存取。使用此方法,您可以將產品與現有的 Terraform 工作流程整合。管理員可以使用 Terraform 建立 Service Catalog 產品組合,並將 AWS Launch Wizard 產品新增至這些產品組合。
以下是此解決方案的優點:
由於 Service Catalog 中的復原功能,如果在部署期間發生任何問題,您可以將產品還原至先前的版本。
您可以輕鬆識別產品版本之間的差異。這可協助您解決部署期間的問題。
您可以在 Service Catalogue 中設定儲存庫連線,例如 GitHub GitLab、 或 AWS CodeCommit。您可以直接透過儲存庫進行產品變更。
如需 AWS Service Catalog 整體優點的相關資訊,請參閱什麼是 Service Catalog。
先決條件和限制
先決條件
架構
目標技術堆疊
AWS Service Catalog
AWS Lambda
目標架構
該圖顯示以下工作流程:
當 Terraform 組態準備就緒時,開發人員會建立包含所有 terraform 程式碼的 .zip 檔案。開發人員會將 .zip 檔案上傳至連線至 Service Catalog 的程式碼儲存庫。
管理員將 Terraform 產品與 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 Engine。 |
| 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 Engine。 |
| 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*" ] } } } ] }