创建环境 - AWS Proton

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

创建环境

了解如何创建 AWS Proton 环境。

您可以通过以下两种方法之一创建 AWS Proton 环境:
  • 使用标准环境模板 创建、管理和预置标准环境。AWS Proton 为您的环境预置基础设施。

  • 使用客户托管环境模板 将 AWS Proton 连接到客户托管基础设施。您在 AWS Proton 外部预置自己的共享资源,然后提供 AWS Proton 可使用的预置输出。

在创建环境时,您可以选择多种预置方法之一。
  • AWS 托管式预置 - 在单个账户中创建、管理和预置环境。AWS Proton 预置您的环境。

    该方法仅支持 CloudFormation 基础设施即代码 (IaC) 模板。

  • 到另一个账户的 AWS 托管式预置 - 在单个管理账户中,创建和管理一个环境以在另一个具有环境账户连接的账户中进行预置。AWS Proton 在另一个账户中预置您的环境。有关更多信息,请参阅 在一个账户中创建环境并在另一个账户中预置环境账户连接

    该方法仅支持 CloudFormation IaC 模板。

  • 自托管式预置 - AWS Proton 使用您自己的预置基础设施将预置拉取请求提交到链接的存储库。

    该方法仅支持 Terraform IaC 模板。

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

    作为一个使用 CodeBuild 预置的示例,您可以包含使用 AWS Cloud Development Kit (AWS CDK) 预置 AWS 资源的代码,以及安装 CDK 和运行 CDK 代码的清单。

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

    注意

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

通过使用 AWS 托管式预置(在同一账户中预置以及预置到另一个账户),AWS Proton 直接进行调用以预置您的资源。

通过使用自托管式预置,AWS Proton 发出拉取请求以提供编译的 IaC 文件,您的 IaC 引擎使用这些文件以预置资源。

有关更多信息,请参阅AWS Proton 如何预置基础设施模板捆绑包环境模板捆绑包的架构要求

在同一账户中创建和预置标准环境

使用控制台或 AWS CLI 在单个账户中创建和预置环境。预置是由 AWS 管理的。

AWS Management Console
使用控制台在单个账户中创建和预置环境
  1. AWS Proton 控制台中,选择环境

  2. 选择 Create environment(创建环境)。

  3. 选择环境模板页面中,选择一个模板并选择配置

  4. 配置环境页面上的预置部分中,选择 AWS 托管式预置

  5. 部署账户部分中,选择该 AWS 账户 账户

  6. 配置环境页面上的环境设置部分中,输入一个环境名称

  7. (可选)输入环境的描述。

  8. 环境角色部分中,选择您在设置 AWS Proton 服务角色过程中创建的 AWS Proton 服务角色。

  9. (可选)在组件角色部分中,选择一个服务角色,该角色允许直接定义的组件在环境中运行并缩小它们可以预置的资源范围。有关更多信息,请参阅AWS Proton 组件

  10. (可选)在标签部分中,选择添加新标签,并输入键和值以创建一个客户托管标签。

  11. 选择下一步

  12. 配置环境自定义设置页面中,您必须输入 required 参数的值。您可以输入 optional 参数的值,或使用给定的默认值。

  13. 选择下一步并检查您的输入。

  14. 选择创建

    查看环境详细信息和状态,以及您的环境的 AWS 托管标签和客户托管标签。

  15. 在导航窗格中,选择环境

    新页面显示您的环境列表以及状态和其他环境详细信息。

AWS CLI

使用 AWS CLI 在单个账户中创建和预置环境。

要创建环境,您需要指定 AWS Proton 服务角色 ARN、规范文件路径、环境名称、环境模板 ARN、主要版本和次要版本以及描述(可选)。

下一个示例显示 YAML 格式的规范文件,该文件指定环境模板架构文件中定义的两个输入的值。您可以使用 get-environment-template-minor-version 命令查看环境模板架构。

proton: EnvironmentSpec spec: my_sample_input: "the first" my_other_sample_input: "the second"

运行以下命令以创建一个环境。

$ aws proton create-environment \ --name "MySimpleEnv" \ --template-name simple-env \ --template-major-version 1 \ --proton-service-role-arn "arn:aws:iam::123456789012:role/AWSProtonServiceRole" \ --spec "file://env-spec.yaml"

响应:

{ "environment": { "arn": "arn:aws:proton:region-id:123456789012:environment/MySimpleEnv", "createdAt": "2020-11-11T23:03:05.405000+00:00", "deploymentStatus": "IN_PROGRESS", "lastDeploymentAttemptedAt": "2020-11-11T23:03:05.405000+00:00", "name": "MySimpleEnv", "protonServiceRoleArn": "arn:aws:iam::123456789012:role/ProtonServiceRole", "templateName": "simple-env" } }

在创建新的环境后,您可以查看 AWS 和客户托管标签列表,如以下示例命令中所示。AWS Proton 自动为您生成 AWS 托管标签。您也可以使用 AWS CLI 修改和创建客户托管标签。有关更多信息,请参阅AWS Proton 资源和标记

命令:

$ aws proton list-tags-for-resource \ --resource-arn "arn:aws:proton:region-id:123456789012:environment/MySimpleEnv"

在一个账户中创建环境并在另一个账户中预置

可以使用控制台或 AWS CLI 在管理账户中创建标准环境,以在另一个账户中预置环境基础设施。预置是由 AWS 管理的。

在使用控制台或 CLI 之前,请完成以下步骤。
  1. 找到管理和环境账户的 AWS 账户 ID,并复制它们以供以后使用。

  2. 在环境账户中,创建一个 AWS Proton 服务角色,该角色具有要创建的环境的最低权限。有关更多信息,请参阅使用 AWS CloudFormation 进行预置的 AWS Proton 服务角色

AWS Management Console
使用控制台在一个账户中创建环境并在另一个账户中进行预置。
  1. 在环境账户中,创建一个环境账户连接,并使用该连接发送请求以连接到管理账户。
    1. AWS Proton 控制台中,在导航窗格中选择环境账户连接

    2. 环境账户连接页面中,选择请求连接

      注意

      验证环境账户连接页面标题中列出的账户 ID 是否与您预先找到的环境账户 ID 匹配。

    3. 请求连接页面上的环境角色部分中,选择现有的服务角色以及您为环境创建的服务角色的名称。

    4. 连接到管理账户部分中,输入您的 AWS Proton 环境的管理账户 ID环境名称。复制该名称以供以后使用。

    5. 选择页面右下角的请求连接

    6. 您的请求在发送到管理账户的环境连接表中显示为“待处理”,并且一个模态框说明了如何接受来自管理账户的请求。

  2. 在管理账户中,接受来自环境账户的连接请求。
    1. 登录到您的管理账户,并在 AWS Proton 控制台中选择环境账户连接

    2. 环境账户连接页面上的环境账户连接请求表中,选择环境账户 ID 与您预先找到的环境账户 ID 匹配的环境账户连接。

      注意

      验证环境账户连接页面标题中列出的账户 ID 是否与您预先找到的管理账户 ID 匹配。

    3. 选择 Accept (接受)。状态从“待处理”变为“已连接”。

  3. 在管理账户中,创建一个环境。
    1. 在导航窗格中,选择环境模板

    2. 环境模板页面中,选择创建环境模板

    3. 选择环境模板页面中,选择一个环境模板。

    4. 配置环境页面上的预置部分中,选择 AWS 托管式预置

    5. 部署账户部分中,选择其他 AWS 账户

    6. 环境详细信息部分中,选择您的环境账户连接环境名称

    7. 选择下一步

    8. 填写表单并选择下一步,直至到达审核和创建页面。

    9. 检查并选择创建环境

AWS CLI

可以使用 AWS CLI 在一个账户中创建环境并在另一个账户中进行预置。

在环境账户中,创建一个环境账户连接,并运行以下命令以请求连接。

$ aws proton create-environment-account-connection \ --environment-name "simple-env-connected" \ --role-arn "arn:aws:iam::222222222222:role/service-role/env-account-proton-service-role" \ --management-account-id "111111111111"

响应:

{ "environmentAccountConnection": { "arn": "arn:aws:proton:region-id:222222222222:environment-account-connection/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111", "environmentAccountId": "222222222222", "environmentName": "simple-env-connected", "id": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111", "lastModifiedAt": "2021-04-28T23:13:50.847000+00:00", "managementAccountId": "111111111111", "requestedAt": "2021-04-28T23:13:50.847000+00:00", "roleArn": "arn:aws:iam::222222222222:role/service-role/env-account-proton-service-role", "status": "PENDING" } }

在管理账户中,运行以下命令以接受环境账户连接请求。

$ aws proton accept-environment-account-connection \ --id "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"

响应:

{ "environmentAccountConnection": { "arn": "arn:aws:proton:region-id:222222222222:environment-account-connection/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111", "environmentAccountId": "222222222222", "environmentName": "simple-env-connected", "id": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111", "lastModifiedAt": "2021-04-28T23:15:33.486000+00:00", "managementAccountId": "111111111111", "requestedAt": "2021-04-28T23:13:50.847000+00:00", "roleArn": "arn:aws:iam::222222222222:role/service-role/env-account-proton-service-role", "status": "CONNECTED" } }

运行以下命令以查看您的环境账户连接。

$ aws proton get-environment-account-connection \ --id "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"

响应:

{ "environmentAccountConnection": { "arn": "arn:aws:proton:region-id:222222222222:environment-account-connection/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111", "environmentAccountId": "222222222222", "environmentName": "simple-env-connected", "id": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111", "lastModifiedAt": "2021-04-28T23:15:33.486000+00:00", "managementAccountId": "111111111111", "requestedAt": "2021-04-28T23:13:50.847000+00:00", "roleArn": "arn:aws:iam::222222222222:role/service-role/env-account-proton-service-role", "status": "CONNECTED" } }

在管理账户中,运行以下命令以创建一个环境。

$ aws proton create-environment \ --name "simple-env-connected" \ --template-name simple-env-template \ --template-major-version "1" \ --template-minor-version "1" \ --spec "file://simple-env-template/specs/original.yaml" \ --environment-account-connection-id "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"

响应:

{ "environment": { "arn": "arn:aws:proton:region-id:111111111111:environment/simple-env-connected", "createdAt": "2021-04-28T23:02:57.944000+00:00", "deploymentStatus": "IN_PROGRESS", "environmentAccountConnectionId": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111", "environmentAccountId": "222222222222", "lastDeploymentAttemptedAt": "2021-04-28T23:02:57.944000+00:00", "name": "simple-env-connected", "templateName": "simple-env-template" } }

使用自托管式预置创建和预置环境

在您使用自托管式预置时,AWS Proton 使用您自己的预置基础设施将预置拉取请求提交到链接的存储库。拉取请求启动您自己的工作流(调用 AWS 服务)以预置基础设施。

自托管式预置注意事项:
  • 在创建环境之前,设置一个用于自托管式预置的存储库资源目录。有关更多信息,请参阅AWS Proton 基础架构即代码文件

  • 在创建环境后,AWS Proton 等待接收有关基础设施预置状态的异步通知。您的预置代码必须使用 AWS Proton NotifyResourceStateChange API 将这些异步通知发送到 AWS Proton。

您可以在控制台中或通过 AWS CLI 使用自托管式预置。以下示例说明了如何使用 Terraform 进行自托管式预置。

AWS Management Console
使用控制台创建一个使用自托管式预置的 Terraform 环境。
  1. AWS Proton 控制台中,选择环境

  2. 选择 Create environment(创建环境)。

  3. 选择环境模板页面中,选择一个 Terraform 模板并选择配置

  4. 配置环境页面上的预置部分中,选择自托管式预置

  5. 预置存储库详细信息部分中:

    1. 如果您没有将预置存储库链接到 AWS Proton,请选择新存储库,选择存储库提供商之一,然后为 CodeStar 连接选择您的连接之一。

      注意

      如果您还没有连接到相关的存储库提供商账户,请选择添加新的 CodeStar 连接。接下来,创建一个连接,然后选择 CodeStar 连接菜单旁边的刷新按钮。您现在应该可以在菜单中选择您的新连接。

      如果您已将存储库链接到 AWS Proton,请选择现有存储库

    2. 对于存储库名称,选择一个存储库。下拉菜单为现有存储库显示链接的存储库,或者为新存储库显示提供商账户中的存储库列表。

    3. 对于分支名称,选择存储库分支之一。

  6. 环境设置部分中,输入一个环境名称

  7. (可选)输入环境的描述。

  8. (可选)在标签部分中,选择添加新标签,并输入键和值以创建一个客户托管标签。

  9. 选择下一步

  10. 配置环境自定义设置页面中,您必须输入 required 参数的值。您可以输入 optional 参数的值,或使用给定的默认值。

  11. 选择下一步并检查您的输入。

  12. 选择创建以发送一个拉取请求。

    • 如果您批准拉取请求,则会进行部署。

    • 如果您拒绝拉取请求,将取消创建环境。

    • 如果拉取请求超时,则不会 完成创建环境。

  13. 查看环境详细信息和状态,以及您的环境的 AWS 托管标签和客户托管标签。

  14. 在导航窗格中,选择环境

    新页面显示您的环境列表以及状态和其他环境详细信息。

AWS CLI

在您创建使用自托管式预置的环境时,您可以添加 provisioningRepository 参数并省略 ProtonServiceRoleArnenvironmentAccountConnectionId 参数。

使用 AWS CLI 创建具有自托管式预置的 Terraform 环境。
  1. 创建一个环境,并向存储库发送拉取请求以进行审核和批准。

    下一个示例显示一个 YAML 格式的规范文件,该文件根据环境模板架构文件定义两个输入的值。您可以使用 get-environment-template-minor-version 命令查看环境模板架构。

    规范:

    proton: EnvironmentSpec spec: ssm_parameter_value: "test"

    运行以下命令以创建一个环境。

    $ aws proton create-environment \ --name "pr-environment" \ --template-name "pr-env-template" \ --template-major-version "1" \ --provisioning-repository="branch=main,name=myrepos/env-repo,provider=GITHUB" \ --spec "file://env-spec.yaml"

    响应:

    { "environment": { "arn": "arn:aws:proton:region-id:123456789012:environment/pr-environment", "createdAt": "2021-11-18T17:06:58.679000+00:00", "deploymentStatus": "IN_PROGRESS", "lastDeploymentAttemptedAt": "2021-11-18T17:06:58.679000+00:00", "name": "pr-environment", "provisioningRepository": { "arn": "arn:aws:proton:region-id:123456789012:repository/github:myrepos/env-repo", "branch": "main", "name": "myrepos/env-repo", "provider": "GITHUB" }, "templateName": "pr-env-template" }
  2. 检查请求。

    • 如果您批准请求,则会进行预置。

    • 如果您拒绝请求,将取消创建环境。

    • 如果拉取请求超时,则不会 完成创建环境。

  3. 异步向 AWS Proton 提供预置状态。以下示例向 AWS Proton 通知预置成功。

    $ aws proton notify-resource-deployment-status-change \ --resource-arn "arn:aws:proton:region-id:123456789012:environment/pr-environment" \ --status "SUCCEEDED"