本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用代码存储库在中 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 示例配置,则可以使用 Amazon Mac GitHub ie 组织设置
最佳实践
操作说明
| Task | 说明 | 所需技能 |
|---|---|---|
(可选)安装 Docker。 | 如果要在开发环境中运行这些 AWS Lambda 函数,请安装 Docker。有关说明,请参阅 Docker 文档中的安装 Docker 引擎 | DevOps 工程师 |
为 Terraform 安装 AWS Service Catalog 引擎。 |
| DevOps 工程师,AWS 管理员 |
| Task | 说明 | 所需技能 |
|---|---|---|
创建与 GitHub 存储库的连接。 |
| AWS 管理员 |
| Task | 说明 | 所需技能 |
|---|---|---|
创建 Service Catalog 产品。 |
| AWS 管理员 |
创建产品组合。 |
| AWS 管理员 |
将 Terraform 产品添加到产品组合中。 |
| AWS 管理员 |
创建访问策略。 |
| AWS 管理员 |
创建自定义信任策略。 | AWS 管理员 | |
向 Service Catalog 产品添加启动约束。 |
| AWS 管理员 |
授予对产品的访问权限。 |
| AWS 管理员 |
启动产品。 |
| DevOps 工程师 |
| Task | 说明 | 所需技能 |
|---|---|---|
验证部署。 | Service Catalog 配置工作流程有两台 AWS Step Functions 状态机:
您可以检查
| DevOps 工程师 |
| Task | 说明 | 所需技能 |
|---|---|---|
删除预调配产品。 |
| DevOps 工程师 |
移除 Terraform 的 AWS Service Catalog 引擎。 |
| AWS 管理员 |
相关资源
AWS 文档
Terraform 文档
Terraform installation
(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*" ] } } } ] }