如何配置 AWS Proton 基础架构 - AWS Proton

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

如何配置 AWS Proton 基础架构

AWS Proton 可以通过以下几种方式之一配置基础架构:

  • AWS-托管配置 — 代表您调 AWS Proton 用配置引擎。该方法仅支持 AWS CloudFormation 模板捆绑包。有关更多信息,请参阅 AWS CloudFormation IaC 文件

  • CodeBuild 配置 — AWS Proton AWS CodeBuild 用于运行您提供的 shell 命令。您的命令可以读取 AWS Proton 提供并负责配置或取消配置基础设施以及生成输出值的输入。该方法的模板捆绑包包括清单文件中的命令,以及这些命令可能需要的任何程序、脚本或其他文件。

    作为使用 CodeBuild 预配的示例,您可以包括使用 AWS Cloud Development Kit (AWS CDK) 来配置 AWS 资源的代码,以及用于安装 CDK 并运行 CDK 代码的清单。

    有关更多信息,请参阅 CodeBuild 配置模板包

    注意

    您可以对环境和服务使用 CodeBuild 置备。目前,您无法通过这种方法预置组件。

  • 自我管理配置 — 向您提供的存储库 AWS Proton 发出拉取请求 (PR),由您自己的基础架构部署系统在其中运行配置过程。该方法仅支持 Terraform 模板捆绑包。有关更多信息,请参阅 Terraform IaC 文件

AWS Proton 分别确定和设置每个环境和服务的配置方法。在您创建或更新环境或服务时, AWS Proton 检查您提供的模板捆绑包,并确定模板捆绑包指示的预置方法。在环境级别,您可以提供环境及其潜在服务的配置方法可能需要的参数,即AWS Identity and Access Management (IAM) 角色、环境账户连接或基础设施存储库。

无论采用 AWS Proton 何种预配方式,过去配置服务的开发者都具有相同的体验。开发人员不需要了解预置方法,也不需要在服务预置过程中更改任何内容。服务模板设置预置方法,开发人员部署服务的每个环境提供服务实例预置所需的参数。

下图简要说明了不同预置方法的一些主要特征。表后面的部分提供了有关每种方法的详细信息。

预置方法 模板 预置者 状态跟踪者

AWS托管式

清单、架构、IaC 文件 () CloudFormation

AWS Proton (通过 CloudFormation)

AWS Proton (通过 CloudFormation)

CodeBuild

清单(带命令)、架构、命令依赖关系(例如 AWS CDK 代码)

AWS Proton (通过 CodeBuild)

AWS Proton (您的命令通过返回状态 CodeBuild)

自行管理

清单、架构、IaC 文件 (Terraform)

您的代码(通过 Git 操作)

您的代码( AWS 通过 API 调用传递给)

AWS托管配置的工作原理

当环境或服务使用 AWS托管配置时,将按以下方式配置基础架构:

  1. AWS Proton 客户(管理员或开发人员)创建 AWS Proton 资源(环境或服务)。客户为资源选择模板,并提供所需的参数。有关更多信息,请参阅AWS托管配置的注意事项一节。

  2. AWS Proton 呈现用于配置资源的完整 AWS CloudFormation 模板。

  3. AWS Proton 调用 AWS CloudFormation 以使用渲染的模板开始配置。

  4. AWS Proton 持续监控部 AWS CloudFormation 署。

  5. 配置完成后,如果出现故障,则会 AWS Proton 报告错误,并在成功时捕获配置输出,例如 Amazon VPC ID。

下图显示了可以直接 AWS Proton 完成其中的大多数步骤。

该图说明了中的 AWS托管配置 AWS Proton

AWS托管配置的注意事项

  • 基础设施配置角色 — 当环境或其中运行的任何服务实例可能使用 AWS托管配置时,管理员需要配置 IAM 角色(直接配置或作为 AWS Proton 环境账户连接的一部分)。 AWS Proton 使用此角色来配置这些 AWS托管配置资源的基础架构。该角色应有权使用 AWS CloudFormation 来创建这些资源的模板中包含的所有资源。

    有关更多信息,请参阅IAM 角色AWS Proton IAM 服务角色策略示例

  • 服务配置 — 当开发人员向环境部署使用 AWS托管配置的服务实例时, AWS Proton 使用提供给该环境的角色为该服务实例配置基础架构。开发人员看不到该角色,也无法更改该角色。

  • 带管道的服务 — 使用 AWS托管配置的服务模板可能包含以 AWS CloudFormation YAML 架构编写的管道定义。 AWS Proton 还可以通过调用来创建管道 AWS CloudFormation。 AWS Proton 用于创建管道的角色与每个单独环境的角色是分开的。该角色是 AWS Proton 单独提供的,仅在 AWS 账户级别提供一次,用于配置和管理所有托管的 AWS管道。该角色应有权创建管道以及管道所需的其他资源。

    以下过程说明了如何向 AWS Proton提供管道角色。

    AWS Proton console
    提供管道角色
    1. AWS Proton 控制台的导航窗格中,选择设置 > 账户设置,然后选择配置

    2. 使用 AWS Pipeline-managed 角色部分为 AWS托管置备配置配置新的或现有的管道角色。

    AWS Proton API
    提供管道角色
    1. 使用 UpdateAccountSettingsAPI 操作。

    2. pipelineServiceRoleArn 参数中提供您的管道服务角色的 Amazon 资源名称 (ARN)。

    AWS CLI

    提供管道角色

    运行以下命令:

    $ aws proton update-account-settings \ --pipeline-service-role-arn \ "arn:aws:iam::123456789012:role/my-pipeline-role"

CodeBuild 配置的工作原理

当环境或服务使用 CodeBuild 预配时,基础架构的配置方式如下:

  1. AWS Proton 客户(管理员或开发人员)创建 AWS Proton 资源(环境或服务)。客户为资源选择模板,并提供所需的参数。有关更多信息,请参阅 CodeBuild 置备注意事项一节。

  2. AWS Proton 呈现带有用于置备资源的输入参数值的输入文件。

  3. AWS Proton 打电话 CodeBuild 开始工作。该 CodeBuild 作业运行模板中指定的客户 shell 命令。这些命令预置所需的基础设施,同时可以选择读取输入值。

  4. 配置完成后,最终的客户命令会将配置状态返回到, CodeBuild 并调用 NotifyResourceDeploymentStatusChange AWS Proton API 操作以提供输出,例如 Amazon VPC ID(如果有)。

    重要

    请确保您的命令正确返回配置状态 CodeBuild 并提供输出。如果他们不这样做,就 AWS Proton 无法正确跟踪配置状态,也无法向服务实例提供正确的输出。

下图说明了在 CodeBuild 作业中 AWS Proton 执行的步骤和命令执行的步骤。

该图说明了中 CodeBuild基于基础的资源调配 AWS Proton

CodeBuild 置备注意事项

  • 基础设施配置角色 — 当环境或其中运行的任何服务实例可能使用 CodeBuild基于基础的配置时,管理员需要配置 IAM 角色(直接配置或作为 AWS Proton 环境账户连接的一部分)。 AWS Proton 使用此角色来配置这些 CodeBuild 配置资源的基础架构。该角色应 CodeBuild 有权使用创建您在这些资源配置的模板中命令的所有资源。

    有关更多信息,请参阅IAM 角色AWS Proton IAM 服务角色策略示例

  • 服务预配-当开发人员向环境部署使用 CodeBuild 预配的服务实例时, AWS Proton 使用提供给该环境的角色为该服务实例配置基础架构。开发人员看不到该角色,也无法更改该角色。

  • 带管道的服务-使用 CodeBuild 预配的服务模板可能包括配置管道的命令。 AWS Proton 还可以通过调用来创建管道 CodeBuild。 AWS Proton 用于创建管道的角色与每个单独环境的角色是分开的。此角色是 AWS Proton 单独提供的,仅在 AWS 账户级别提供一次,用于配置和管理所有 CodeBuild基于流水线的管道。该角色应有权创建管道以及管道所需的其他资源。

    以下过程说明了如何向 AWS Proton提供管道角色。

    AWS Proton console
    提供管道角色
    1. AWS Proton 控制台的导航窗格中,选择设置 > 账户设置,然后选择配置

    2. 使用 Codebuild 管道配置角色部分为置备 CodeBuild配置新的或现有的管道角色。

    AWS Proton API
    提供管道角色
    1. 使用 UpdateAccountSettingsAPI 操作。

    2. pipelineCodebuildRoleArn 参数中提供您的管道服务角色的 Amazon 资源名称 (ARN)。

    AWS CLI

    提供管道角色

    运行以下命令:

    $ aws proton update-account-settings \ --pipeline-codebuild-role-arn \ "arn:aws:iam::123456789012:role/my-pipeline-role"

自托管式预置的工作方式

在环境或服务配置为使用自托管式预置时,基础设施按以下方式进行预置:

  1. AWS Proton 客户(管理员或开发人员)创建 AWS Proton 资源(环境或服务)。客户为资源选择模板,并提供所需的参数。对于环境,客户还会提供链接的基础设施存储库。有关更多信息,请参阅自托管式预置的注意事项一节。

  2. AWS Proton 渲染一个完整的 Terraform 模板。它由一个或多个 Terraform 文件(可能位于多个文件夹中)和一个.tfvars变量文件组成。 AWS Proton 将资源创建调用中提供的参数值写入此变量文件。

  3. AWS Proton 使用渲染的 Terraform 模板向基础设施存储库提交 PR。

  4. 在客户(管理员或开发人员)合并 PR 时,客户的自动化代码触发预置引擎,以使用合并的模板开始预置基础设施。

    注意

    如果客户(管理员或开发人员)关闭 PR,则将 PR AWS Proton 识别为已关闭并将部署标记为已取消。

  5. 配置完成后,客户自动调用 NotifyResourceDeploymentStatusChange AWS Proton API 操作以指示已完成,提供状态(成功或失败),并提供输出,例如 Amazon VPC ID(如果有)。

    重要

    请确保您的自动化代码使用配置状态和输出 AWS Proton 进行回调。如果不是, AWS Proton 可能会将置备视为待处理的时间超过应有的时间,并继续显示 “进行” 状态。

下图说明了 AWS Proton 执行的步骤以及您自己的配置系统执行的步骤。

该图说明了中的自我管理配置 AWS Proton

自托管式预置的注意事项

  • 基础架构存储库-当管理员为自我管理配置配置环境时,他们需要提供链接的基础架构存储库。 AWS Proton 提交 PRs 到此存储库以配置环境的基础架构和部署到该存储库的所有服务实例。存储库中客户拥有的自动化操作应扮演一个 IAM 角色,该角色有权创建您的环境和服务模板包含的所有资源,并具有反映目标 AWS 账户的身份。有关扮演角色的 GitHub 操作示例,请参阅 “配置 AWS 凭据” GitHub 操作文档中的代入角色

  • 权限-您的配置代码必须根据需要使用账户进行身份验证(例如,向 AWS 账户进行身份验证),并提供资源配置授权(例如,提供角色)。

  • 服务配置-当开发人员向环境部署使用自我管理配置的服务实例时, AWS Proton 向与环境关联的存储库提交 PR,以便为该服务实例配置基础架构。开发人员看不到存储库,也无法更改存储库。

    注意

    无论预置方法如何,创建服务的开发人员使用相同的过程,并对它们的差异进行抽象处理。不过,对于自托管式预置,开发人员可能会遇到响应速度较慢的情况,因为他们需要等待某人(可能不是他们自己)将 PR 合并到基础设施存储库中,然后才能开始预置。

  • 带管道的服务 — 具有自我管理配置的环境的服务模板可能包括用 Terraform HCL 编写的 AWS CodePipeline 管道定义(例如管道)。 AWS Proton 为了能够配置这些管道,管理员提供了一个链接的管道存储库 AWS Proton。在配置管道时,存储库中客户拥有的自动化操作应扮演一个具有配置管道权限的 IAM 角色和反映目标 AWS 账户的身份。管道存储库和角色与用于每个单独环境的存储库和角色是分开的。链接存储库是 AWS Proton 单独提供的,仅在 AWS 账户级别提供一次,用于配置和管理所有管道。该角色应有权创建管道以及管道所需的其他资源。

    以下过程说明了如何向 AWS Proton提供管道存储库和角色。

    AWS Proton console
    提供管道角色
    1. AWS Proton 控制台的导航窗格中,选择设置 > 账户设置,然后选择配置

    2. 使用 CI/CD 管道存储库部分配置新的或现有的存储库链接。

    AWS Proton API
    提供管道角色
    1. 使用 UpdateAccountSettingsAPI 操作。

    2. pipelineProvisioningRepository 参数中提供管道存储库的提供商、名称和分支。

    AWS CLI

    提供管道角色

    运行以下命令:

    $ aws proton update-account-settings \ --pipeline-provisioning-repository \ "provider=GITHUB,name=my-pipeline-repo-name,branch=my-branch"
  • 删除自托管式预置资源 - 除了资源定义以外,Terraform 模块可能还包含 Terraform 操作所需的配置元素。因此, AWS Proton 无法删除环境或服务实例的所有 Terraform 文件。而是将文件 AWS Proton 标记为删除,并在 PR 元数据中更新标记。您的自动化代码可以读取该标记,并使用它触发 Terraform 销毁命令。