使用代码存储库在中 AWS Service Catalog 配置 Terraform 产品 - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用代码存储库在中 AWS Service Catalog 配置 Terraform 产品

由 Rahul Sharad Gaikwad 博士 () 和 Tamilselvan P () AWS 创作 AWS

摘要

AWS Service Catalog 支持自助服务配置,并管理您的 HashiCorp Terraform 配置。如果您使用 Terraform,则可以使用 Service Catalog 作为单一工具,在其中大规模组织、管理和分发 Terraform 配置。 AWS 您可以访问 Service Catalog 的主要功能,包括对标准化和预先批准的基础架构即代码 (IaC) 模板进行编目、访问控制、使用最低权限访问的云资源配置、版本控制、与数 AWS 账户千人共享以及标记。最终用户(例如工程师、数据库管理员和数据科学家)会看到他们有权访问的产品和版本列表,他们可以通过一个操作进行部署。

此模式可帮助您使用 Terraform 代码部署 AWS 资源。 GitHub 存储库中的 Terraform 代码可通过 Service Catalog 进行访问。使用这种方法,您可以将产品与现有的 Terraform 工作流程集成。管理员可以使用 Terraform 创建 Service Catalog AWS Launch Wizard 产品组合并向其中添加产品。

以下是此解决方案的好处:

  • 由于 Service Catalog 中具有回滚功能,因此如果在部署过程中出现任何问题,则可以将产品恢复到以前的版本。

  • 您可以轻松识别产品版本之间的差异。这可以帮助您在部署期间解决问题。

  • 您可以在 Service Catalog 中配置存储库连接,例如到 GitHub 或 GitLab。您可以直接通过存储库进行产品更改。

有关总体优势的信息 AWS Service Catalog,请参阅什么是 Service Catalog

先决条件和限制

先决条件

  • 活跃 AWS 账户的.

  • GitHub BitBucket、或其他包含格式化的 Terraform 配置文件的存储库。ZIP

  • AWS Serverless Application Model 命令行界面 (AWS SAM CLI),已安装

  • AWS Command Line Interface (AWS CLI),已安装配置

  • 去吧,安装好了

  • Python 版本 3.9,已安装。 AWS SAM CLI需要这个版本的 Python。

  • 编写和运行 AWS Lambda 函数的权限以及访问和管理 Service Catalog 产品和产品组合的权限。

架构

通过代码存储库在 Service Catalog 中配置 Terraform 产品的架构图

图表显示了以下工作流:

  1. 当 Terraform 配置准备就绪后,开发人员会创建一个包含所有 Terraform 代码的.zip 文件。开发者将.zip 文件上传到连接到 Service Catalog 的代码存储库中。

  2. 管理员将 Terraform 产品与 Service Catalog 中的产品组合相关联。管理员还会创建启动约束,允许最终用户配置产品。

  3. 在 Service Catalog 中,最终用户使用 Terraform 配置启动 AWS 资源。他们可以选择要部署的产品版本。

工具

AWS 服务

  • AWS Lambda 是一项计算服务,可帮助您运行代码,无需预置或管理服务器。它仅在需要时运行您的代码,并且能自动扩缩,因此您只需为使用的计算时间付费。

  • AWS Service Catalog帮助您集中管理已获批准的 IT 服务目录。 AWS最终用户可在遵循组织设定约束的情况下快速部署他们所需已获得批准的 IT 服务。

其他服务

  • Go 是谷歌支持的开源编程语言。

  • Python 是通用的计算机编程语言。

代码存储库

如果您需要可通过 Service Catalog 部署的 Terraform 示例配置,则可以使用 Amazon Mac GitHub ie 组织设置使用 Terraform 存储库中的配置。不需要使用此存储库中的代码示例。

最佳实践

  • 在通过 Service Catalog 启动产品时配置变量值,而不是在 Terraform 配置文件 (terraform.tfvars) 中为变量提供值。

  • 仅向特定用户或管理员授予对产品组合的访问权限。

  • 遵循最低权限原则,授予执行任务所需的最低权限。有关更多信息,请参阅 AWS Identity and Access Management (IAM) 文档中的授予最低权限安全最佳实践

操作说明

任务描述所需技能

(可选)安装 Docker。

如果要在开发环境中运行这些 AWS Lambda 函数,请安装 Docker。有关说明,请参阅 Docker 文档中的安装 Docker 引擎

DevOps 工程师

为 Terraform 安装 AWS Service Catalog 引擎。

  1. 输入以下命令来克隆适用于 Terraform 的AWS Service Catalog 引擎存储库。

    git clone https://github.com/aws-samples/service-catalog-engine-for-terraform-os.git
  2. 导航到克隆存储库的根目录。

  3. 输入以下 命令。这将安装引擎。

    run ./bin/bash/deploy-tre.sh -r

    自动安装期间不使用默认配置文件中 AWS 区域 设置的内容。相反,您可以在运行此命令时提供区域。

DevOps 工程师、AWS管理员
任务描述所需技能

创建与 GitHub 存储库的连接。

  1. 登录 AWS Management Console,然后打开开发者工具控制台。您可以通过选择诸如 AWS CodePipeline 或之类的服务来访问开发者工具控制台 AWS CodeDeploy。

  2. 在左侧导航窗格中,选择 “设置”,然后选择 “连接”。

  3. 选择创建连接

  4. 选择用于维护 Terraform 源代码的存储库。例如,您可以选择 Bitbucket GitHub、或GitHub 企业服务器

  5. 输入连接的名称,然后选择 Connect

  6. 出现提示时,对存储库进行身份验证。

    身份验证完成后,连接即创建完毕,状态更改为 “活动”。

AWS 管理员
任务描述所需技能

创建 Service Catalog 产品。

  1. 打开 AWS Service Catalog 管理控制台

  2. 导航到管理部分,然后选择产品列表

  3. 选择创建产品

  4. 产品详情部分的创建产品页面上,选择外部产品类型。Service Catalog 使用此产品类型来支持 Terraform 社区版产品。

  5. 输入 Service Catalog 产品的名称和所有者。

  6. 选择 “使用 CodeStar 提供程序指定您的代码存储库”。

  7. 为您的存储库输入以下信息:

    • 使用连接您的提供商 AWS CodeConnections — 选择您之前创建的连接。

    • 存储库-选择存储库。

    • 分支-选择分支。

    • 模板文件路径-选择存储代码模板文件的路径。文件名应以结尾tar.gz

  8. 在 “版本名称和描述” 下,提供有关产品版本的信息。

  9. 选择创建产品

AWS 管理员

创建产品组合。

  1. 打开 AWS Service Catalog 管理控制台

  2. 导航到 “管理” 部分,然后选择,选择 “电子档案夹”。

  3. 选择创建产品组合

  4. 输入以下值:

    • 产品组合名称Sample terraform

    • 产品组合描述Sample portfolio for Terraform configurations

    • 所有者-您的联系信息,例如电子邮件地址

  5. 选择创建

AWS 管理员

将 Terraform 产品添加到产品组合中。

  1. 打开 AWS Service Catalog 管理控制台

  2. 导航到管理部分,然后选择产品列表

  3. 选择您之前创建的 Terraform 产品。

  4. 选择 “操作”,然后选择 “将产品添加到产品组合”。

  5. 选择Sample terraform投资组合。

  6. 选择将产品添加到产品组合

AWS 管理员

创建访问策略。

  1. 打开 AWS Identity and Access Management (IAM) 控制台

  2. 在导航窗格中,选择策略

  3. 在内容窗格中,选择创建策略

  4. 选择该JSON选项。

  5. 在此模式的 “其他信息” 部分的 “访问策略” 中输入示例JSON策略。

  6. 选择下一步

  7. 在 “查看并创建” 页面的 “策略名称” 框中,输入TerraformResourceCreationAndArtifactAccessPolicy

  8. 选择创建策略

AWS 管理员

创建自定义信任策略。

  1. 打开 IAM 管理控制台

  2. 在导航窗格中,选择角色

  3. 选择 Create role(创建角色)。

  4. 在 “可信实体类型” 下,选择 “自定义信任策略”。

  5. 在JSON策略编辑器中,在此模式的 “其他信息” 部分的 “信任策略” 中输入示例JSON策略。

  6. 选择下一步

  7. 在 “权限策略” 下TerraformResourceCreationAndArtifactAccessPolicy,选择您之前创建的。

  8. 选择下一步

  9. 在 “角色详细信息” 下的 “角色名称” 框中输入SCLaunch-product。 

    重要

     角色名称必须以开头SCLaunch

  10. 选择 Create role(创建角色)。

AWS 管理员

向 Service Catalog 产品添加启动约束。

  1. 以具有管理权限的用户身份登录。 AWS Management Console

  2. 打开 AWS Service Catalog 管理控制台

  3. 在导航窗格中,选择投资组合

  4. 选择您之前创建的投资组合。

  5. 产品组合详细信息页面上,选择约束选项卡,然后选择创建约束

  6. 对于产品,请选择您之前创建的 Terraform 产品。

  7. 在 “启动约束” 下,对于 “方法”,选择 “输入角色名称”。

  8. 在 “角色名称” 框中输入SCLaunch-product

  9. 选择创建

AWS 管理员

授予对产品的访问权限。

  1. 打开 AWS Service Catalog 管理控制台

  2. 在导航窗格中,选择投资组合

  3. 选择您之前创建的投资组合。

  4. 选择 “访问权限” 选项卡,然后选择 “授予访问权限”。

  5. 选择 “角色” 选项卡,然后选择应有权部署此产品的角色。

  6. 选择 Grant access (授予访问权限)

AWS 管理员

启动产品。

  1. 以有权部署 Service Catalog 产品的用户 AWS Management Console 身份登录。

  2. 打开 AWS Service Catalog 管理控制台

  3. 在导航窗格中,选择产品

  4. 选择您之前创建的农产品,然后选择 Launch 产品

  5. 输入产品名称并定义任何必需的参数。

  6. 选择启动产品

DevOps 工程师
任务描述所需技能

验证部署。

Service Catalog 配置工作流程有两台 AWS Step Functions 状态机:

  • ManageProvisionedProductStateMachine— 在配置新的 Terraform 产品和更新现有 Terraform 预配置产品时,Service Catalog 会调用此状态机。

  • TerminateProvisionedProductStateMachine— 在终止现有 Terraform 预配置产品时,Service Catalog 会调用此状态机。

您可以检查ManageProvisionedProductStateMachine状态机的日志,以确认产品已配置。

  1. 登录 AWS Management Console,然后打开AWS Step Functions 控制台

  2. 在左侧导航窗格中,选择状态机

  3. 选择 ManageProvisionedProductStateMachine

  4. 在 “执行” 列表中,输入预配置的产品 ID 以定位执行。

    注意

    状态文件后端存储桶名称以开头sc-terraform-engine-state-

  5. 验证账户中是否已创建所有必需的资源。

DevOps 工程师
任务描述所需技能

删除预配置的产品。

  1. 以有权部署 Service Catalog 产品的用户 AWS Management Console 身份登录。

  2. 打开 AWS Service Catalog 管理控制台

  3. 在左侧导航栏中,选择预配置产品。

  4. 选择您创建的产品。

  5. 在 “操作” 列表中,选择 “终止”。

  6. 在确认文本框中,输入terminate,然后选择终止预配置的产品。

  7. 重复这些步骤以终止所有预配置的产品。

DevOps 工程师

移除 Terraform 的 AWS Service Catalog 引擎。

  1. 以具有管理权限的用户身份登录。 AWS Management Console

  2. 打开亚马逊简单存储服务 (Amazon S3) S ervice 控制台。

  3. 在导航窗格中,选择存储桶

  4. 选择sc-terraform-engine-logging-XXXX存储桶。

  5. 选择 “”。

  6. 对以下存储桶重复步骤 4—5:

    • sc-terraform-engine-state-XXXX

    • terraform-engine-bootstrap-XXXX

  7. 打开AWS CloudFormation 控制台,然后验证您的操作是否正确 AWS 区域。

  8. 在左侧导航栏中,选择堆栈

  9. 选择SAM-TRE,然后选择 “删除”。等到堆栈被删除。

  10. 选择Bootstrap-TRE,然后选择 “删除”。等到堆栈被删除。

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*" ] } } } ] }