

终止支持通知：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-svc-update"></a>

您可以对 AWS Proton 服务进行以下编辑。
+ 编辑服务描述。
+ 添加和删除服务实例以编辑服务。

## 编辑服务描述
<a name="ag-svc-metadata"></a>

您可以使用控制台或编辑服务描述。 AWS CLI 

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

**使用控制台编辑服务，如以下步骤中所述。**

**在服务列表中。**

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

1. 在服务列表中，选择要更新的服务左侧的单选按钮。

1. 选择**编辑**。

1. 在**配置服务**页面中，填写表单并选择**下一步**。

1. 在**配置自定义设置**页面中，选择**下一步**。

1. 检查您的编辑内容并选择**保存更改**。

**在服务详细信息页面中。**

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

1. 在服务列表中，选择要编辑的服务的名称。

1. 在服务详细信息页面中，选择**编辑**。

1. 在**配置服务**页面中，填写表单并选择**下一步**。

1. 在**配置自定义设置**页面中，填写表单并选择**下一步**。

1. 检查您的编辑内容并选择**保存更改**。

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

**编辑描述，如以下 CLI 示例命令和响应中所示。**

命令:

```
$ aws proton update-service \
    --name "MySimpleService" \
    --description "Edit by updating description"
```

响应：

```
{
    "service": {
        "arn": "arn:aws:proton:region-id:123456789012:service/MySimpleService",
        "branchName": "main",
        "createdAt": "2021-03-12T22:39:42.318000+00:00",
        "description": "Edit by updating description",
        "lastModifiedAt": "2021-03-12T22:44:21.975000+00:00",
        "name": "MySimpleService",
        "repositoryConnectionArn": "arn:aws:codestar-connections:region-id:123456789012:connection/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
        "repositoryId": "my-repository/myorg-myapp",
        "status": "ACTIVE",
        "templateName": "fargate-service"
    }
}
```

------

## 编辑服务以添加或删除服务实例
<a name="ag-svc-update-instances"></a>

对于 AWS Proton 服务，您可以通过提交编辑后的规范来添加或删除服务实例。必须满足以下条件才能成功完成请求：
+ 在您提交编辑请求时，尚未编辑或删除您的服务和管道。
+ 您编辑的规范不包括修改服务管道的编辑或对*不会* 删除的现有服务实例的编辑。
+ 您编辑的规范不会删除任何具有附加组件的现有服务实例。要删除此类服务实例，您应该先更新组件以将其与服务实例分离。有关组件的更多信息，请参阅[AWS Proton 组件](ag-components.md)。

删除失败的实例是状态为 `DELETE_FAILED` 的服务实例。当您请求编辑服务时， AWS Proton 会尝试为您移除删除失败的实例，这是编辑过程的一部分。如果无法删除您的任何服务实例，则可能仍然存在与这些实例关联的资源，即使这些资源在控制台或 AWS CLI中不可见。检查删除失败的实例基础设施资源并将其清理干净，以便 AWS Proton 可以为您移除它们。

有关服务的服务实例配额，请参阅[AWS Proton 配额](ag-limits.md)。在创建服务后，您还必须为其保留至少 1 个服务实例。在更新过程中， AWS Proton 计算现有服务实例以及要添加或删除的实例。删除失败的实例包括在该计数中，您在编辑 `spec` 时必须考虑到这些实例。

### 使用控制台或 AWS CLI 添加或移除服务实例
<a name="ag-svc-update-console-cli"></a>

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

**使用控制台编辑您的服务以添加或删除服务实例。**

在 [AWS Proton 控制台](https://console.aws.amazon.com//proton/)中

1. 在导航窗格中，选择**服务**。

1. 选择您要编辑的服务。

1. 选择**编辑**。

1. （可选）在**配置服务**页面上，编辑服务名称或描述，然后选择**下一步**。

1. 在**配置自定义设置**页面上，选择**删除**以删除一个服务实例，然后选择**添加新实例**以添加一个服务实例并填写表单。

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

1. 检查您的更新内容并选择**保存更改**。

1. 一个模态框要求您确认删除服务实例。按照说明进行操作并选择**是，删除**。

1. 在服务详细信息页面上，查看您的服务的状态详细信息。

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

**添加和删除经过编辑的服务实例`spec`，如以下 AWS CLI 示例命令和响应所示。**

在您使用 CLI 时，您的 `spec` 必须*排除* 要删除的服务实例，并*包括* 要添加的服务实例以及*尚未* 标记为删除的现有服务实例。

以下列表显示编辑之前的示例 `spec` 以及规范部署的服务实例列表。在前面的示例中使用了以下规范以编辑服务描述。

规范：

```
proton: ServiceSpec

pipeline:
  my_sample_pipeline_optional_input: "abc"
  my_sample_pipeline_required_input: "123"

instances:
  - name: "my-instance"
    environment: "simple-env"
    spec:
      my_sample_service_instance_optional_input: "def"
      my_sample_service_instance_required_input: "456"
  - name: "my-other-instance"
    environment: "simple-env"
    spec:
      my_sample_service_instance_required_input: "789"
```

以下示例 CLI `list-service-instances` 命令和响应显示添加或删除服务实例之前的活动实例。

命令:

```
$ aws proton list-service-instances \
    --service-name "MySimpleService"
```

响应：

```
{
    "serviceInstances": [
        {
            "arn": "arn:aws:proton:region-id:123456789012:service/MySimpleService/service-instance/my-other-instance",
            "createdAt": "2021-03-12T22:39:42.318000+00:00",
            "deploymentStatus": "SUCCEEDED",
            "environmentName": "simple-env",
            "lastDeploymentAttemptedAt": "2021-03-12T22:39:43.109000+00:00",
            "lastDeploymentSucceededAt": "2021-03-12T22:39:43.109000+00:00",
            "name": "my-other-instance",
            "serviceName": "example-svc",
            "templateMajorVersion": "1",
            "templateMinorVersion": "0",
            "templateName": "fargate-service"
        },
        {
            "arn": "arn:aws:proton:region-id:123456789012:service/MySimpleService/service-instance/my-instance",
            "createdAt": "2021-03-12T22:39:42.318000+00:00",
            "deploymentStatus": "SUCCEEDED",
            "environmentName": "simple-env",
            "lastDeploymentAttemptedAt": "2021-03-12T22:39:43.160000+00:00",
            "lastDeploymentSucceededAt": "2021-03-12T22:39:43.160000+00:00",
            "name": "my-instance",
            "serviceName": "example-svc",
            "serviceTemplateArn": "arn:aws:proton:region-id:123456789012:service-template/fargate-service",
            "templateMajorVersion": "1",
            "templateMinorVersion": "0",
            "templateName": "fargate-service"
        }
    ]
}
```

以下列表显示用于删除和添加实例的编辑的 `spec` 示例。删除了名为 `my-instance` 的现有实例，并添加了名为 `yet-another-instance` 的新实例。

规范：

```
proton: ServiceSpec

pipeline:
  my_sample_pipeline_optional_input: "abc"
  my_sample_pipeline_required_input: "123"

instances:
  - name: "my-other-instance"
    environment: "simple-env"
    spec:
      my_sample_service_instance_required_input: "789"
  - name: "yet-another-instance"
    environment: "simple-env"
    spec:
      my_sample_service_instance_required_input: "789"
```

您可以使用 `"${Proton::CURRENT_VAL}"` 指示要在原始 `spec` 中保留哪些参数值（如果这些值在 `spec` 中存在）。可以使用 `get-service` 查看服务的原始 `spec`，如[查看服务数据](ag-svc-view.md)中所述。

以下列表说明了如何使用 `"${Proton::CURRENT_VAL}"` 确保 `spec` *不* 包含要保留的现有服务实例的参数值更改。

规范：

```
proton: ServiceSpec

pipeline:
  my_sample_pipeline_optional_input: "${Proton::CURRENT_VAL}"
  my_sample_pipeline_required_input: "${Proton::CURRENT_VAL}"

instances:
  - name: "my-other-instance"
    environment: "simple-env"
    spec:
      my_sample_service_instance_required_input: "${Proton::CURRENT_VAL}"
  - name: "yet-another-instance"
    environment: "simple-env"
    spec:
      my_sample_service_instance_required_input: "789"
```

下一个列表显示用于编辑服务的 CLI 命令和响应。

命令:

```
$ aws proton update-service 
    --name "MySimpleService" \
    --description "Edit by adding and deleting a service instance" \
    --spec "file://spec.yaml"
```

响应：

```
{
    "service": {
        "arn": "arn:aws:proton:region-id:123456789012:service/MySimpleService",
        "branchName": "main",
        "createdAt": "2021-03-12T22:39:42.318000+00:00",
        "description": "Edit by adding and deleting a service instance",
        "lastModifiedAt": "2021-03-12T22:55:48.169000+00:00",
        "name": "MySimpleService",
        "repositoryConnectionArn": "arn:aws:codestar-connections:region-id:123456789012:connection/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
        "repositoryId": "my-repository/myorg-myapp",
        "status": "UPDATE_IN_PROGRESS",
        "templateName": "fargate-service"
    }
}
```

以下 `list-service-instances` 命令和响应确认删除了名为 `my-instance` 的现有实例，并添加了名为 `yet-another-instance` 的新实例。

命令:

```
$ aws proton list-service-instances \
    --service-name "MySimpleService"
```

响应：

```
{
    "serviceInstances": [
        {
            "arn": "arn:aws:proton:region-id:123456789012:service/MySimpleService/service-instance/yet-another-instance",
            "createdAt": "2021-03-12T22:39:42.318000+00:00",
            "deploymentStatus": "SUCCEEDED",
            "environmentName": "simple-env",
            "lastDeploymentAttemptedAt": "2021-03-12T22:56:01.565000+00:00",
            "lastDeploymentSucceededAt": "2021-03-12T22:56:01.565000+00:00",
            "name": "yet-another-instance",
            "serviceName": "MySimpleService",
            "templateMajorVersion": "1",
            "templateMinorVersion": "0",
            "templateName": "fargate-service"
        },
        {
            "arn": "arn:aws:proton:region-id:123456789012:service/MySimpleService/service-instance/my-other-instance",
            "createdAt": "2021-03-12T22:39:42.318000+00:00",
            "deploymentStatus": "SUCCEEDED",
            "environmentName": "simple-env",
            "lastDeploymentAttemptedAt": "2021-03-12T22:39:43.109000+00:00",
            "lastDeploymentSucceededAt": "2021-03-12T22:39:43.109000+00:00",
            "name": "my-other-instance",
            "serviceName": "MySimpleService",
            "templateMajorVersion": "1",
            "templateMinorVersion": "0",
            "templateName": "fargate-service"
        }
    ]
}
```

------

### 在添加或删除服务实例时发生的情况
<a name="ag-svc-add-delete"></a>

提交服务编辑以删除和添加服务实例后， AWS Proton 将执行以下操作。
+ 将服务设置为 `UPDATE_IN_PROGRESS`。
+ 如果服务具有管道，则将其状态设置为 `IN_PROGRESS` 并阻止管道操作。
+ 将要删除的任何服务实例设置为 `DELETE_IN_PROGRESS`。
+ 阻止服务操作。
+ 阻止对标记为删除的服务实例执行操作。
+ 创建新的服务实例。
+ 删除您列出的要删除的实例。
+ 尝试将删除失败的实例删除。
+ 在添加和删除完成后，重新预置服务管道（如果有），将您的服务设置为 `ACTIVE` 并启用服务和管道操作。

AWS Proton 尝试修复故障模式，如下所示。
+ 如果一个或多个服务实例*创建失败，则* AWS Proton 尝试取消配置所有新创建的服务实例，并将其恢复`spec`到之前的状态。它*不会* 删除任何服务实例，也*不会* 以任何方式修改管道。
+ 如果删除一个或多个服务实例*失败，请在不删除*实例的情况下 AWS Proton 重新配置管道。将更新 `spec` 以包含添加的实例并排除标记为删除的实例。
+ 如果*管道预置失败*，则不会尝试*回滚*，并且服务和管道反映失败的更新状态。

### 标记和服务编辑
<a name="ag-svc-update-tagging"></a>

当您在服务编辑过程中添加服务实例时， AWS 托管标签会传播到新实例和预配置资源并自动为其创建。如果您创建新标签，这些标签仅应用于新实例。现有服务客户托管标签也会传播到新实例。有关更多信息，请参阅 [AWS Proton 资源和标记](resources.md)。