将 Amazon ECS 短服务 ARN 迁移到长 ARN
Amazon ECS 为每个服务分配一个唯一的 Amazon 资源名称(ARN)。2021 年之前创建的服务采用短 ARN 格式:
arn:aws:ecs:
region
:aws_account_id
:service/service-name
Amazon ECS 已将 ARN 格式更改为包含集群名称。这是一种长 ARN 格式:
arn:aws:ecs:
region
:aws_account_id
:service/cluster-name
/service-name
您的服务必须使用长 ARN 格式才能标记服务。
您可以将短 ARN 格式的服务迁移到长 ARN 格式,而无需重新创建服务。您可以使用 API、CLI 或控制台。您不能撤消迁移操作。
如果要使用 Amazon CloudFormation 标记简短 ARN 格式的服务,则必须使用 API、CLI 或控制台迁移该服务。迁移完成后,您可以使用 Amazon CloudFormation 标记服务。
如果要使用 Terraform 标记简短 ARN 格式的服务,则必须使用 API、CLI 或控制台迁移该服务。迁移完成后,您可以使用 Terraform 标记服务。
完成迁移后,服务将具有以下更改:
-
长 ARN 格式
arn:aws:ecs:
region
:aws_account_id
:service/cluster-name
/service-name
-
当您使用控制台进行迁移时,Amazon ECS 会向服务添加一个标签,其键设置为“ecs:serviceArnMigratedAt”,值设置为迁移时间戳(UTC 格式)。
此标签计入您的标签配额。
-
当 Amazon CloudFormation 堆栈中的
PhysicalResourceId
表示服务 ARN 时,该值不会更改,并且将继续作为短服务 ARN。
先决条件
在迁移服务 ARN 之前执行以下操作。
-
要查看您的服务 ARN 是否较短,请在 Amazon ECS 控制台中查看服务详细信息(当服务采用短 ARN 格式时,您会看到警告),或者查看来自
describe-services
的serviceARN
返回参数。当 ARN 不包含集群名称时,您就有一个短 ARN。短 ARN 的格式如下所示:arn:aws:ecs:
region
:aws_account_id
:service/service-name
-
记下已创建日期。
如果您的 IAM 策略使用的是短 ARN 格式,则请将其更新为长 ARN 格式。
将每个
用户输入占位符
替换为您自己的信息。arn:aws:ecs:
region
:aws_account_id
:service/cluster-name
/service-name
有关更多信息,请参阅 Amazon Identity and Access Management User Guide 中的 Editing IAM policies。
如果您的工具使用的是短 ARN 格式,则请将其更新为长 ARN 格式。
将每个
用户输入占位符
替换为您自己的信息。arn:aws:ecs:
region
:aws_account_id
:service/cluster-name
/service-name
-
启用服务长 ARN 格式。在
serviceLongArnFormat
选项设置为enabled
的情况下运行put-account-setting
。有关更多信息,请参阅《Amazon Elastic Container Service API 参考》中的 put-account-setting。当您的服务有未知
createdAt
日期时,以根用户身份运行该命令。aws ecs put-account-setting --name serviceLongArnFormat --value enabled
示例输出
{ "setting": { "name": "serviceLongArnFormat", "value": "enabled", "principalArn": "arn:aws:iam::
123456789012:role/your-role
", "type": user } } -
启用任务长 ARN 格式。这允许作为服务的一部分运行的任务具有长 ARN 格式。在
taskLongArnFormat
选项设置为enabled
的情况下运行put-account-setting
。有关更多信息,请参阅《Amazon Elastic Container Service API 参考》中的 put-account-setting。当您的服务有未知
createdAt
日期时,以根用户身份运行该命令。aws ecs put-account-setting --name taskLongArnFormat --value enabled
示例输出
{ "setting": { "name": "taskLongArnFormat", "value": "enabled", "principalArn": "arn:aws:iam::
123456789012:role/your-role
", "type": user } }
过程
使用以下内容迁移您的服务 ARN。
-
在 Clusters(集群)页面上,选择集群。
-
在服务部分中,选择 ARN 列中包含警告的服务。
此时系统会显示服务详细信息页面。
-
选择迁移到长 ARN。
将显示“迁移服务”对话框。
-
选择 Migrate。
完成先决条件后,您可以标记服务。运行以下命令:
Amazon ECS 考虑在带有短 ARN 的服务的 tag-resource
API 请求中传递长 ARN 格式,作为将服务迁移到使用长 ARN 格式的信号。
aws ecs tag-resource \ --resource-arn arn:aws:ecs:
region
:aws_account_id
:service/cluster-name
/service-name
--tags key=key1
,value=value1
以下示例使用键设置为“TestService”、值设置为“WebServers”的标签来标记 MyService:
aws ecs tag-resource \ --resource-arn arn:aws:ecs:us-east-1:123456789012:service/MyCluster/MyService --tags key=TestService1,value=WebServers
完成先决条件后,您可以标记服务。创建 aws_ecs_service
资源并设置 tags
引用。有关更多信息,请参阅 Terraform 文档中的 Resource: aws_ecs_service
resource "aws_ecs_service" "MyService" { name = "example" cluster = aws_ecs_cluster.MyService.id tags = { "Name" = "MyService" "Environment" = "Production" "Department" = "QualityAssurance" } }
后续步骤
您可以向服务添加标签。有关更多信息,请参阅 向 Amazon ECS 资源添加标签。
如果您希望 Amazon ECS 将标签从任务定义或服务传播到任务中,则请使用 propagateTags
参数运行 update-service
。有关更多信息,请参阅《Amazon Command Line Interface 参考》中的 update-service。
故障排除
一些用户在从短 ARN 格式迁移到长 ARN 格式时可能会遇到以下错误。
There was an error while migrating the ARN of service
service-name
. The specified account does not have
serviceLongArnFormat or taskLongArnFormat account settings enabled. Add account
settings in order to enable tagging.
如果您已经启用了 serviceLongArnFormat
账户设置,但仍然遇到此错误,则可能是因为最初创建服务的特定 IAM 主体尚未启用长 ARN 格式的账户设置。
-
确定创建服务的主体。
在控制台中,可以在 Amazon ECS 控制台的“服务详细信息”页面的配置和网络选项卡中的创建者字段中找到该信息。
对于 Amazon CLI,运行下面的命令:
将
user-input
替换为您的值。aws ecs describe-services --cluster
cluster-name
--servicesservice-name
--query 'services[0].{createdBy: createdBy}'
-
为该特定主体启用所需的账户设置。您可以通过下列方式之一来执行该操作:
-
代入该主体的 IAM 用户或角色。然后运行
put-account-setting
。 -
使用 root 用户运行命令,同时使用
principal-arn
指定创建主体。示例。
将
principal-arn
替换为步骤 1 中的值。aws ecs put-account-setting --name serviceLongArnFormat --value enabled --principal-arn
arn:aws:iam::123456789012:role/jdoe
-
这两种方法都会在创建服务的主体上启用所需的 serviceLongArnFormat
账户设置,从而允许 ARN 迁移继续进行。