编辑服务 - AWS Proton

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

编辑服务

您可以对 AWS Proton 服务进行以下编辑。

  • 编辑服务描述。

  • 添加和删除服务实例以编辑服务。

编辑服务描述

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

AWS Management Console

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

在服务列表中。
  1. AWS Proton 控制台中,选择服务

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

  3. 选择编辑

  4. 配置服务页面中,填写表单并选择下一步

  5. 配置自定义设置页面中,选择下一步

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

在服务详细信息页面中。
  1. AWS Proton 控制台中,选择服务

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

  3. 在服务详细信息页面中,选择编辑

  4. 配置服务页面中,填写表单并选择下一步

  5. 配置自定义设置页面中,填写表单并选择下一步

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

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

编辑服务以添加或删除服务实例

对于 AWS Proton 服务,您可以提交编辑的规范以添加或删除服务实例。必须满足以下条件才能成功完成请求:

  • 在您提交编辑请求时,尚未编辑或删除您的服务和管道。

  • 您编辑的规范不包括修改服务管道的编辑或对不会 删除的现有服务实例的编辑。

  • 您编辑的规范不会删除任何具有附加组件的现有服务实例。要删除此类服务实例,您应该先更新组件以将其与服务实例分离。有关组件的更多信息,请参阅AWS Proton 组件

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

有关服务的服务实例配额,请参阅AWS Proton 配额。在创建服务后,您还必须为其保留至少 1 个服务实例。在更新过程中,AWS Proton 对现有服务实例和要添加或删除的实例进行计数。删除失败的实例包括在该计数中,您在编辑 spec 时必须考虑到这些实例。

使用控制台或 AWS CLI 添加或删除服务实例

AWS Management Console

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

AWS Proton 控制台

  1. 在导航窗格中,选择服务

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

  3. 选择编辑

  4. (可选)在配置服务页面上,编辑服务名称或描述,然后选择下一步

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

  6. 选择下一步

  7. 检查您的更新内容并选择保存更改

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

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

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,如查看服务数据中所述。

以下列表说明了如何使用 "${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" } ] }

在添加或删除服务实例时发生的情况

在您提交服务编辑以删除和添加服务实例后,AWS Proton 执行以下操作。

  • 将服务设置为 UPDATE_IN_PROGRESS

  • 如果服务具有管道,则将其状态设置为 IN_PROGRESS 并阻止管道操作。

  • 将要删除的任何服务实例设置为 DELETE_IN_PROGRESS

  • 阻止服务操作。

  • 阻止对标记为删除的服务实例执行操作。

  • 创建新的服务实例。

  • 删除您列出的要删除的实例。

  • 尝试将删除失败的实例删除。

  • 在添加和删除完成后,重新预置服务管道(如果有),将您的服务设置为 ACTIVE 并启用服务和管道操作。

AWS Proton 尝试修复故障模式,如下所示。

  • 如果一个或多个服务实例创建失败,AWS Proton 尝试取消预置所有新创建的服务实例,并将 spec 恢复到以前的状态。它不会 删除任何服务实例,也不会 以任何方式修改管道。

  • 如果一个或多个服务实例删除失败,AWS Proton 重新预置管道而不包含删除的实例。将更新 spec 以包含添加的实例并排除标记为删除的实例。

  • 如果管道预置失败,则不会尝试回滚,并且服务和管道反映失败的更新状态。

标记和服务编辑

如果您在服务编辑期间添加服务实例,AWS 托管标签将传播到新实例和预置的资源,并自动为它们创建该标签。如果您创建新标签,这些标签仅应用于新实例。现有服务客户托管标签也会传播到新实例。有关更多信息,请参阅AWS Proton 资源和标记