亚马逊AWS官方博客

新增 – 使用 AWS Service Catalog 自助预置 Terraform 开源配置



借助 AWS Service Catalog,您可以创建、管控和管理获准在 AWS 上使用的基础设施即代码(IaC)模板目录。这些 IaC 模板涵盖所有方面,从虚拟机映像、服务器、软件和数据库,到完整的多层应用程序架构。可以根据个人、组、部门或成本中心控制可用的 IaC 模板和版本、每个版本配置的内容以及可以访问每个模板的用户。然后,工程师、数据库管理员和数据科学家等最终用户可以快速发现并自助预置其履行日常工作职能所需的经批准 AWS 资源。

使用 Service Catalog 时,第一步是基于您的 IaC 模板创建产品。然后,您可以在产品组合中收集产品和配置信息。

从今天开始,您可以使用 AWS CloudFormationHashicorp Terraform 定义 Service Catalog 产品及其资源,然后选择更符合自己流程和专业知识的工具。现在,您可以将现有 Terraform 配置集成到 Service Catalog 中,使其属于集中批准的产品组合,并与最终用户使用的 AWS 账户共享。通过这种方式,可以防止不一致并降低不合规的风险。

由 Service Catalog 部署资源时,您可以在预置期间保持最低权限访问权并管控已部署资源的标记。Service Catalog 的最终用户从其有权访问的产品和版本列表中选择需要的内容。然后,无论部署使用何种技术(CloudFormation 或 Terraform),这些最终用户都可以在单个操作中预置产品。

可让组织实现大规模管控的 Service Catalog 中心辐射型模型现在可以扩展以包括 Terraform 配置。借助 Service Catalog 中心辐射型模型,您可以使用管理/用户账户关系集中管理部署:

  • 一个管理账户 – 用于创建 Service Catalog 产品、将它们组织成产品组合,以及与用户账户共享产品组合
  • 多个用户账户(最多数千个)– 用户账户是指任何 AWS 账户,Service Catalog 的最终用户在其中配置资源。

我们来看看该方法的实际应用。

使用 Terraform 创建 AWS Service Catalog 产品
首先,我安装 Terraform 参考引擎(由 AWS 在 GitHub 上提供),该引擎配置 Terraform 开源引擎与 AWS Service Catalog 配合使用所需的代码和基础设施。我只需要在 Service Catalog 的管理账户中执行此操作一次,并且只需几分钟即可完成设置。我使用自动安装脚本:

./deploy-tre.sh -r us-east-1

为简单起见,我创建使用 AWS Graviton 处理器和 Amazon Linux 2023 操作系统部署单个 EC2 实例的产品。以下是我的 main.tf 文件的内容:

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 4.16"
    }
  }

  required_version = ">= 1.2.0"
}

provider "aws" {
  region  = "us-east-1"
}

resource "aws_instance" "app_server" {
  ami           = "ami-00c39f71452c08778"
  instance_type = "t4g.large"

  tags = {
    Name = "GravitonServerWithAmazonLinux2023"
  }
}

我在 Service Catalog 的管理账户中登录 AWS 管理控制台。在 Service Catalog 控制台中,我在导航窗格的管理部分中选择产品列表。我从中选择创建产品

产品详细信息中,我选择 Terraform 开源作为产品类型。我输入产品名称和描述以及所有者的姓名。

控制台屏幕截图。

版本详细信息中,我选择上传模板文件(使用 tar.gz 存档)。或者,我可以使用 S3 URL 指定模板,或者使用 AWS CodeStar 提供商指定外部代码存储库(在 GitHubGitHub Enterprise ServerBitbucket 上)。

控制台屏幕截图。

我输入支持详细信息和自定义标签。请注意,标签可用于对您的资源进行分类,也可以用于检查创建资源的权限。然后,我完成产品的创建。

使用 Terraform 将 AWS Service Catalog 产品添加到产品组合中
现在 Terraform 产品已经准备就绪,我将其添加到自己的产品组合中。产品组合可以同时包括 Terraform 和 CloudFormation 产品。我从导航窗格的管理员部分中选择产品组合。从中,我按名称搜索自己的产品组合并将其打开。我选择将产品添加到产品组合。我按名称搜索 Terraform 产品并选择该产品。

控制台屏幕截图。

Terraform 产品要求启动限制。启动限制指定用于部署产品的 AWS Identity and Access Management(IAM)角色的名称。我需要分别确保在共享产品的每个账户中创建此角色。

当最终用户启动、更新或终止产品时,由管理账户中的 Terraform 开源引擎担任此启动角色。启动角色还包含描述、创建和更新预置产品的资源组以及标记产品资源的权限。通过这种方式,Service Catalog 可以使资源组保持最新状态并标记与产品相关的资源。

启动角色为最终用户启用最低权限访问。使用此功能,最终用户无需权限即可直接预置产品的底层资源,因为您的 Terraform 开源引擎担任预置这些资源的启动角色,例如 Amazon Elastic Compute Cloud(Amazon EC2)实例的已批准配置。

启动限制部分中,我选择输入角色名称以使用之前为该产品创建的角色:

  • 角色的信任关系定义可以担任该角色的实体。对于此角色,信任关系包括 Service Catalog 和包含 Terraform 参考引擎的管理账户。
  • 对于权限,该角色允许预置、更新和终止我的产品所需的资源,以及允许管理这些资源上的资源组和标签。

控制台屏幕截图。

我完成将产品添加到自己的产品组合中的工作。现在,该产品可供有权访问该产品组合的最终用户使用。

使用 Terraform 启动 AWS Service Catalog 产品
最终用户可以看到他们有权访问的产品和版本列表,并可以在单个操作中部署这些产品。如果您已经在使用 Service Catalog,则体验与使用 CloudFormation 产品相同。

我在 Service Catalog 的用户账户中登录 AWS 控制台。我之前使用的产品组合已由管理账户与该用户账户共享。在 Service Catalog 控制台中,我从导航窗格的预置组中选择产品。我按名称搜索产品并选择启动产品

控制台屏幕截图。

我让 Service Catalog 为预置产品生成唯一的名称,然后选择要部署的产品版本。然后,我启动该产品。

控制台屏幕截图。

几分钟后,该产品已完成部署并可使用。由 Terraform 参考引擎管理部署。

控制台屏幕截图。

关联标签选项卡中,我看到 Service Catalog 自动添加有关产品组合和产品的信息。

控制台屏幕截图。

资源选项卡中,我看到预置产品创建的资源。正如预期,这是一个 EC2 实例,我可以点击链接打开 Amazon EC2 控制台并获取更多信息。

控制台屏幕截图。

工程师、数据库管理员和数据科学家等最终用户可以继续使用 Service Catalog 并启动他们所需的产品,而不必考虑是使用 Terraform 还是 CloudFormation 预置这些产品。

可用性和定价
目前,Terraform 开源配置的 AWS Service Catalog 支持在提供此产品的所有 AWS 区域中均可用。使用 Terraform 时,定价没有更改。使用 Service Catalog,您只需为对服务执行的 API 调用付费,然后可以通过免费套餐开始免费使用。您还需要为 Terraform 参考引擎使用和创建的资源付费。有关更多信息,请参阅 Service Catalog 定价

为您的 Terraform 开源配置大规模启用自助服务预置。

Danilo