Amazon ECS の短いサービス ARN を長い ARN に移行する - Amazon Elastic Container Service

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、またはコンソールを使用できます。移行オペレーションを元に戻すことはできません。

AWS CloudFormation を使用して短い ARN 形式でサービスにタグ付けする場合は、API、CLI、またはコンソールを使用してサービスを移行する必要があります。移行が完了したら、 AWS CloudFormation を使用してサービスにタグを付けることができます。

Terraform を使用して短い ARN 形式でサービスにタグ付けする場合は、API、CLI、またはコンソールを使用してサービスを移行する必要があります。移行が完了したら、Terraform を使用してサービスにタグを付けることができます。

移行が完了すると、サービスには次の変更が行われます。

  • 長い ARN 形式

    arn:aws:ecs:region:aws_account_id:service/cluster-name/service-name

  • コンソールを使用して移行する場合、Amazon ECS はキーを「ecs:serviceArnMigratedAt」に設定し、値を移行タイムスタンプ (UTC 形式) に設定して、サービスにタグを追加します。

    このタグは、タグクォータにカウントされます。

  • AWS CloudFormation スタック内の PhysicalResourceId がサービス ARN を表す場合、値は変更されず、引き続き短いサービス ARN になります。

前提条件

サービス ARN を移行する前に、次のオペレーションを実行します。

  1. 短い ARN 形式 があるかどうかを確認するには、Amazon ECS コンソールでサービスの詳細を表示するか (サービスが短い ARN 形式である場合は警告が表示されます)、または describe-servicesserviceARN 戻りパラメータを表示します。ARN にクラスター名が含まれていない場合、短い ARN になります。短い ARN の形式は次のとおりです。

    arn:aws:ecs:region:aws_account_id:service/service-name

  2. 作成日をメモします。

  3. 短い ARN 形式を使用する IAM ポリシーがある場合は、長い ARN 形式に更新します。

    ユーザー入力プレースホルダーを独自の情報に置き換えます。

    arn:aws:ecs:region:aws_account_id:service/cluster-name/service-name

    詳細については、「AWS Identity and Access Management ユーザーガイド」の「Editing IAM policies」(IAM ポリシーの編集) を参照してください。

  4. 短い ARN 形式を使用するツールがある場合は、長い ARN 形式に更新してください。

    ユーザー入力プレースホルダーを独自の情報に置き換えます。

    arn:aws:ecs:region:aws_account_id:service/cluster-name/service-name

  5. サービスの長い 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 } }
  6. タスクの長い 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 を移行するには、以下を使用します。

  1. コンソールをhttps://console.aws.amazon.com/ecs/v2で開きます。

  2. [Clusters] (クラスター) ページで、クラスターを選択します。

  3. [サービス] セクションで、ARN 列に警告があるサービスを選択します。

    [サービス詳細] ページが表示されます。

  4. [長い ARN に移行する] を選択します。

    サービス移行ダイアログボックスが表示されます。

  5. 移行 を選択します。

前提条件を完了したら、サービスにタグを付けることができます。次のコマンドを実行してください。

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 を実行します。詳細については、「 AWS Command Line Interface リファレンス」の「create-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 アカウント設定を既に有効にしていてもこのエラーが発生する場合は、長い ARN 形式のアカウント設定が、最初にサービスを作成した特定の IAM プリンシパルに対して有効になっていない可能性があります。

  1. サービスを作成したプリンシパルを特定します。

    1. コンソールでは、Amazon ECS コンソールのサービスの詳細ページの [設定とネットワーク] タブの [作成者] フィールドで情報を確認できます。

    2. AWS CLI の場合、次のコマンドを実行します。

      user-input を独自の値に置き換えます。

      aws ecs describe-services --cluster cluster-name --services service-name --query 'services[0].{createdBy: createdBy}'
  2. その特定のプリンシパルに必要なアカウント設定を有効にします。これには以下の 2 つの方法があります。

    1. そのプリンシパルの IAM ユーザーまたはロールを引き受けます。次に、put-account-setting を実行します。

    2. principal-arn で作成プリンシパルを指定しながら、ルートユーザーを使用してコマンドを実行します。

      例。

      [principal-arn] をステップ 1 で確認した値に置き換えます。

      aws ecs put-account-setting --name serviceLongArnFormat --value enabled --principal-arn arn:aws:iam::123456789012:role/jdoe

どちらの方法でも、サービスを作成したプリンシパルに必要な serviceLongArnFormat アカウント設定が有効になり、ARN 移行を続行できます。