使用 GitHub 操作基于 AWS CloudFormation 模板配置 AWS Service Catalog 产品 - AWS 规范指引

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

使用 GitHub 操作基于 AWS CloudFormation 模板配置 AWS Service Catalog 产品

Ashish Bhatt 和 Ruchika Modi,Amazon Web Services

Summary

这种模式为组织提供了一种简化的方法,使用AWS Service Catalog产品和产品组合来 AWS 服务 跨团队进行标准化和合规的配置。 AWS CloudFormation有助于整合 Service Catalog 产品和产品组合中的基本组件,用于配置基础网络基础架构 AWS 云。这种模式还通过使用 Actions 将基础设施即代码 (IaC) 集成到自动化开发工作流程中,从而促进 DevOps 实践GitHub 。

AWS Service Catalog 使组织能够在上创建和管理经批准的 IT 服务 AWS,从而提供标准化、集中控制、自助服务配置和成本管理等好处。通过操作自动部署 Service Catalog 产品组合和产品,公司可以执行以下 GitHub 操作:

  • 确保部署一致且可重复。

  • 对 IaC 使用版本控制。

  • 整合云资源管理与现有开发工作流。

这种组合可简化云端运营、增强合规性、加快经批准服务的交付,同时减少人为错误并提升整体效率。

先决条件和限制

先决条件

  • 活跃的 AWS 账户

  • 访问GitHub 存储库

  • 对 AWS CloudFormation 和的基本理解 AWS Service Catalog

  • 用于托管模板的亚马逊简单存储服务 (Amazon S3) Service 存储桶 CloudFormation

  • 一个名为的 AWS Identity and Access Management (IAM) 角色github-actions,用于 GitHub 和之间的连接 AWS

限制

  • 此模式的可重用代码仅通过 Actions 进行了 GitHub 测试。

  • 有些 AWS 服务 并非全部可用 AWS 区域。有关区域可用性,请参阅按区域划分的AWS 服务。有关特定端点,请参阅服务端点和配额,然后选择相应服务的链接。

产品版本

此模式的解决方案是使用以下 GitHub Marketplace 操作及其相应的版本创建的:

  • actions/checkout@v4

  • aws-actions/configure-aws-credentials@v2

  • aws-actions/aws-cloudformation-github-deploy@v1.2.0

架构

下图显示了该解决方案的架构。

使用 GitHub 操作根据 CloudFormation 模板配置 Service Catalog 产品。
  1. 管理员或平台工程师将标准化 CloudFormation 模板推送到 GitHub 存储库,在那里维护这些模板。该 GitHub 存储库还包含 AWS Service Catalog 使用 GitHub 操作自动配置的工作流程。

  2. GitHub 操作会触发一个工作流,该工作流 AWS 云 使用 OpenID Connect (OIDC) 提供程序连接到以配置 Service Catalog。

  3. Service Catalog 包含开发人员可以直接用来配置标准化 AWS 资源的产品组合和产品。这种模式捆绑了虚拟私有云 (VPCs)、子网、NAT 和 Internet 网关以及路由表等 AWS 资源。

  4. 开发者创建服务目录产品后,Service Catalog 会将其转换为预先配置的标准化 AWS 资源。因此,开发人员可以节省时间,因为他们无需手动逐个预调配和配置资源。

工具

AWS 服务

  • AWS CloudFormation帮助您设置 AWS 资源,快速一致地配置资源,并在和的整个 AWS 账户 生命周期中对其进行管理 AWS 区域。它是一种基础设施即代码 (IaC) 服务,可以很容易地用作产品类型之一。 AWS Service Catalog

  • AWS Identity and Access Management (IAM) 通过控制谁经过身份验证并有权使用 AWS 资源,从而帮助您安全地管理对资源的访问权限。

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

  • Amazon Simple Storage Service(Amazon S3)是一项基于云的对象存储服务,可帮助您存储、保护和检索任意数量的数据。

其他

  • GitHub A@@ c tions 是一个持续集成和持续交付 (CI/CD) 平台,与 GitHub 存储库紧密集成。您可以使用 GitHub Actions 来自动执行构建、测试和部署管道。

代码存储库

此模式的代码可在 GitHub service-catalog-with-github- actions 存储库中找到。存储库包含以下相关文件:

  • github/workflows:

    • e2e-test.yaml – 此文件调用 workflow.yaml,这是可重用的工作流。当分支上有提交和推送操作时,就会触发此工作流。

    • workflow.yaml – 此文件包含该解决方案的可重用工作流,并配置为以 workflow_call 作为其触发器。作为可重用的工作流,workflow.yaml 可从任何其他工作流调用。

  • templates:

    • servicecatalog-portfolio.yaml— 此 CloudFormation 模板包括用于配置服务目录产品组合和服务目录产品的资源。模板包含在预调配 Service Catalog 组合和产品时使用的一组参数。一个参数接受用于上传 vpc.yaml 模板的 Amazon S3 文件 URL。尽管此模式包括 AWS 用于配置资源的vpc.yaml文件,但您也可以使用参数 S3 文件 URL 进行配置。

    • vpc.yaml— 此 CloudFormation 模板包含要添加到 Service Catalog 产品中的 AWS 资源。 AWS 资源包括子网 VPCs、互联网网关、NAT 网关和路由表。该vpc.yaml模板是如何将任何模板与 Service Catalog 产品和产品组合 CloudFormation 模板配合使用的示例。

最佳实践

操作说明

Task说明所需技能

在本地工作站上设置 Git。

要在本地工作站上安装和配置 Git,请遵照 Git 文档中的开始使用 – 安装 Git 说明操作。

应用程序开发人员

克隆 GitHub 项目存储库。

要克隆 GitHub 项目存储库,请执行以下操作:

  1. 打开此GitHub 模式的存储库

  2. 选择代码查看克隆选项,然后复制 HTTPS 选项卡中的 URL。

  3. 为工作站上的项目创建一个文件夹。

  4. 打开终端,导航到此文件夹

  5. 要克隆 GitHub 存储库,请使用您在步骤 2 中复制的 URL 运行以下命令:

    git clone https://github.com/aws-samples/service-catalog-with-github-actions.git
  6. 克隆完成后,若要更改为项目文件夹中的克隆存储库,请运行以下命令:

    cd <folder-name>/service-catalog-with-github-actions
  7. 在您选择的集成式开发环境(IDE)中打开项目。

DevOps 工程师
Task说明所需技能

配置 OIDC 提供程序。

创建一个 OpenID Connect (OIDC) 提供程序,允许 GitHub 操作工作流程访问其中的资源 AWS,而无需将 AWS 凭据存储为长期存在的机密。 GitHub 有关说明,请参阅文档中的在亚马逊 Web Services 中配置 OpenID Connect。 GitHub

OIDC 提供程序配置完成后,先前在先决条件部分提到的 IAM 角色github-actions的信任策略将更新。

AWS 管理员、AWS DevOps、常规 AWS
Task说明所需技能

更新 e2e-test.yaml

e2e-test.yaml 文件会触发 workflow.yaml 中的可重用工作流。更新并验证 e2e-test.yaml 中以下输入参数的值:

  • aws_account_id— 指定正确的 AWS 账户。

  • aws_region— 指定正确的 AWS 区域。

  • s3BucketName— 指定用于存放 CloudFormation 模板的 Amazon S3 存储桶。

  • 该工作流程文件需要两个 IAM 角色作为输入:

    • LaunchConstraintRole-最终用户启动、更新或终止产品时 AWS Service Catalog 扮演的 IAM 角色。

    • PrincipalArn - 将与 Service Catalog 组合关联的主体(IAM 用户、角色或组)的 Amazon 资源名称(ARN)。如果 PrincipalTypeIAM,支持的值为完全定义的 IAM Amazon 资源名称(ARN)。如果 PrincipalTypeIAM_PATTERN,支持的值为不带 AccountID 的 IAM ARN,格式如下:arn:partition:iam:::resource-type/resource-id

DevOps 工程师
Task说明所需技能

验证 Service Catalog 资源。

要验证 Service Catalog 资源,请执行以下操作:

  1. 登录到 AWS 管理控制台 AWS 账户,并验证是否正 AWS 区域 确。

  2. 导航到 AWS Service Catalog,验证组合是否出现在管理组合下。

  3. 选择产品组合,并验证产品约束访问权限选项卡上的信息。

AWS DevOps
Task说明所需技能

删除 CloudFormation 堆栈。

要删除 CloudFormation 堆栈,请执行以下操作:

  1. https://console.aws.amazon.com/cloudformat ion 上打开 AWS CloudFormation 控制台。

  2. 在屏幕顶部的导航栏上,选择堆栈 AWS 区域 所在的位置。

  3. 堆栈页面上,选择您要删除的堆栈。该堆栈当前必须处于运行状态。

  4. 在堆栈详细信息窗格中,选择删除

  5. 在系统提示时,选择删除堆栈

有关更多信息,请参阅 CloudFormation 文档中的从 CloudFormation 控制台删除堆栈

DevOps 工程师,AWS 管理员

问题排查

问题解决方案

e2e-test

Can't find 'action.yml', 'action.yaml' or 'Dockerfile' under '*/home/runner/work/service-catalog-with-github-actions/service-catalog-with-github-actions

Did you forget to run actions/checkout before running your local action?

要确保启用正确的存储库设置,请执行以下操作:

  1. 导航到 Github 存储库的设置选项卡。

  2. 从左侧菜单中选择操作常规

  3. 转到访问权限部分,然后选择可从“XXX”组织中的存储库访问选项。

相关资源

AWS 文档

其他资源

附加信息

要查看与 Epics 相关的屏幕截图,请转到此模式存储库中的 Images 文件夹。 GitHub 以下屏幕截图可用: