

终止支持通知：2026 年 10 月 7 日， AWS 将终止对的支持。 AWS Proton 2026 年 10 月 7 日之后，您将无法再访问 AWS Proton 控制台或 AWS Proton 资源。您部署的基础架构将保持不变。有关更多信息，请参阅《[AWS Proton 服务弃用和迁移指南》](https://docs.aws.amazon.com/proton/latest/userguide/proton-end-of-support.html)。

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

# 创建环境
<a name="ag-create-env"></a>

学习创建 AWS Proton 环境。

**您可以通过以下两种方式之一创建 AWS Proton 环境：**
+ 使用标准环境*模板创建、管理和配置标准环境*。 AWS Proton 为您的环境配置基础架构。
+ 使用客户管理的*环境模板 AWS Proton 连接到客户管理*的基础架构。您可以在外部配置自己的共享资源 AWS Proton，然后提供 AWS Proton 可供使用的配置输出。

**在创建环境时，您可以选择多种预置方法之一。**
+ *AWS 托管配置*-使用单一账户创建、管理和配置环境。 AWS Proton 配置您的环境。

  此方法仅支持 CloudFormation 基础设施代码 (IaC) 模板。
+ *AWS 托管配置到另一个账户* — 在单个管理账户中，创建和管理在具有环境账户连接的另一个账户中配置的环境。 AWS Proton 在另一个账户中配置您的环境。有关更多信息，请参阅[在一个账户中创建环境并在另一个账户中预置](#ag-create-env-deploy-other)和[环境账户连接](ag-env-account-connections.md)。

  此方法仅支持 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 配置模板包](ag-infrastructure-tmp-files-codebuild.md)。
**注意**  
您可以对环境和服务使用 CodeBuild 置备。目前，您无法通过这种方法预置组件。

使用 AWS 托管配置（在同一个账户和另一个账户中）， AWS Proton 可以直接调用以配置您的资源。

通过自我管理配置， AWS Proton 可以发出拉取请求以提供已编译的 IaC 文件，供您的 IaC 引擎用于配置资源。

有关更多信息，请参阅 [如何配置 AWS Proton 基础架构](ag-works-prov-methods.md)、[模板捆绑包](ag-template-authoring.md#ag-template-bundles) 和 [环境模板捆绑包的架构要求](ag-schema.md#schema-req-env)。

**Topics**
+ [在同一账户中创建和预置标准环境](#ag-create-env-same-account)
+ [在一个账户中创建环境并在另一个账户中预置](#ag-create-env-deploy-other)
+ [使用自托管式预置创建和预置环境](#ag-create-env-pull-request)

## 在同一账户中创建和预置标准环境
<a name="ag-create-env-same-account"></a>

使用控制台或 AWS CLI 在单个账户中创建和配置环境。资源调配由管理 AWS。

------
#### [ AWS 管理控制台 ]

**使用控制台在单个账户中创建和预置环境**

1. 在 [AWS Proton 控制台](https://console.aws.amazon.com//proton/)中，选择**环境**。

1. 选择**创建环境**。

1. 在**选择环境模板**页面中，选择一个模板并选择**配置**。

1. 在**配置环境**页面上的**预置**部分中，选择 **AWS 托管式预置**。

1. 在**部署账户**部分中，选择**该 AWS 账户账户**。

1. 在**配置环境**页面上的**环境设置**部分中，输入一个**环境名称**。

1. （可选）输入环境的描述。

1. 在**环境角色**部分中，选择您在[设置 AWS Proton 服务角色](ag-setting-up-iam.md#setting-up-cicd)过程中创建的 AWS Proton 服务角色。

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

1. （可选）在**标签**部分中，选择**添加新标签**，并输入键和值以创建一个客户托管标签。

1. 选择**下一步**。

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

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

1. 选择**创建**。

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

1. 在导航窗格中，选择**环境**。

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

------
#### [ AWS CLI ]

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

要创建环境，您需要指定 [AWS Proton 服务角色](security_iam_service-role-policy-examples.md#proton-svc-role) 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/{{AWS ProtonServiceRole}}" \
    --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 资源和标记](resources.md)。

命令:

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

------

## 在一个账户中创建环境并在另一个账户中预置
<a name="ag-create-env-deploy-other"></a>

使用控制台或 AWS CLI 在管理账户中创建标准环境，在另一个账户中配置环境基础架构。预置是由 AWS管理的。

**在使用控制台或 CLI 之前，请完成以下步骤。**

1. 确定管理和环境帐户 AWS 账户 IDs 的，然后将其复制以备后用。

1. 在环境帐户中，创建一个具有最低权限的 AWS Proton 服务角色，供环境创建。有关更多信息，请参阅 [AWS Proton 使用进行置备的服务角色 CloudFormation](security_iam_service-role-policy-examples.md#proton-svc-role)。

------
#### [ AWS 管理控制台 ]

**使用控制台在一个账户中创建环境并在另一个账户中进行预置。**

1. 

**在环境账户中，创建一个环境账户连接，并使用该连接发送请求以连接到管理账户。**

   1. 在 [AWS Proton 控制台](https://console.aws.amazon.com//proton/)中，在导航窗格中选择**环境账户连接**。

   1. 在**环境账户连接**页面中，选择**请求连接**。
**注意**  
验证**环境账户连接**页面标题中列出的账户 ID 是否与您预先找到的环境账户 ID 匹配。

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

   1. 在 **Connect to 管理账户****部分，输入您的环境的管理账户 ID** **和 AWS Proton 环境名称**。复制该名称以供以后使用。

   1. 选择页面右下角的**请求连接**。

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

1. 

**在管理账户中，接受来自环境账户的连接请求。**

   1. 登录您的管理账户，然后在 AWS Proton 控制台中选择**环境帐户连接**。

   1. 在**环境账户连接**页面上的**环境账户连接请求**表中，选择环境账户 ID 与您预先找到的环境账户 ID 匹配的环境账户连接。
**注意**  
验证**环境账户连接**页面标题中列出的账户 ID 是否与您预先找到的管理账户 ID 匹配。

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

1. 

**在管理账户中，创建一个环境。**

   1. 在导航窗格中，选择**环境模板**。

   1. 在**环境模板**页面中，选择**创建环境模板**。

   1. 在**选择环境模板**页面中，选择一个环境模板。

   1. 在**配置环境**页面上的**预置**部分中，选择 **AWS 托管式预置**。

   1. 在 “**部署帐户**” 部分中，选择**其他 AWS 帐户;**。

   1. 在**环境详细信息**部分中，选择您的**环境账户连接**和**环境名称**。

   1. 选择**下一步**。

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

   1. 检查并选择**创建环境**。

------
#### [ 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"
    }
}
```

------

## 使用自托管式预置创建和预置环境
<a name="ag-create-env-pull-request"></a>

使用自我管理配置时，使用您自己的配置基础架构将配置拉取请求 AWS Proton 提交到链接存储库。拉取请求会启动您自己的工作流程，该工作流程调用 AWS 服务；以配置基础架构。

**自托管式预置注意事项：**
+ 在创建环境之前，设置一个用于自托管式预置的存储库资源目录。有关更多信息，请参阅 [AWS Proton 基础架构即代码文件](ag-infrastructure-tmp-files.md)。
+ 创建环境后， AWS Proton 等待收到有关基础设施配置状态的异步通知。您的配置代码必须使用 AWS Proton `NotifyResourceStateChange` API 将这些异步通知发送到 AWS Proton。

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

------
#### [ AWS 管理控制台 ]

**使用控制台创建一个使用自托管式预置的 Terraform 环境。**

1. 在 [AWS Proton 控制台](https://console.aws.amazon.com//proton/)中，选择**环境**。

1. 选择**创建环境**。

1. 在**选择环境模板**页面中，选择一个 Terraform 模板并选择**配置**。

1. 在**配置环境**页面上的**预置**部分中，选择**自托管式预置**。

1. 在**预置存储库详细信息**部分中：

   1. 如果您尚未将[配置存储库链接到 AWS Proton](ag-create-repo.md)，请选择 “**新建存储库**”，选择其中一个存储库提供程序，然后选择其中一个连接进行**CodeStar连接**。
**注意**  
如果您尚未连接到相关的存储库提供商帐户，请选择 “**添加新 CodeStar 连接**”。然后，创建连接，然后选择**CodeStar 连接**菜单旁边的刷新按钮。您现在应该可以在菜单中选择您的新连接。

      如果您已经将仓库链接到 AWS Proton，请选择**现有存储库**。

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

   1. 对于**分支名称**，选择存储库分支之一。

1. 在**环境设置**部分中，输入一个**环境名称**。

1. （可选）输入环境的描述。

1. （可选）在**标签**部分中，选择**添加新标签**，并输入键和值以创建一个客户托管标签。

1. 选择**下一步**。

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

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

1. 选择**创建**以发送一个拉取请求。
   + 如果您批准拉取请求，则会进行部署。
   + 如果您拒绝拉取请求，将取消创建环境。
   + 如果拉取请求超时，则*不会* 完成创建环境。

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

1. 在导航窗格中，选择**环境**。

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

------
#### [ AWS CLI ]

在您创建使用自托管式预置的环境时，您可以*添加* `provisioningRepository` 参数并省略 `ProtonServiceRoleArn` 和 `environmentAccountConnectionId` 参数。

**使用创建具有自我管理配置的 Terraform 环境。 AWS CLI**

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"
       }
   ```

1. 检查请求。
   + 如果您批准请求，则会进行预置。
   + 如果您拒绝请求，将取消创建环境。
   + 如果拉取请求超时，则*不会* 完成创建环境。

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

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

------