

# Amazon ECS の短いサービス ARN を長い ARN に移行する
<a name="service-arn-migration"></a>

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

移行プロセスはシームレスで、サービスのダウンタイムゼロを確保できます。移行中の詳細
+ **サービスの可用性**: トラフィックや機能を中断することなく、サービスを正常に実行し続けます。
+ **タスクの実行**: 既存のタスクは中断されることなく、実行し続けます。`taskLongArnFormat` アカウント設定が有効になっている場合、移行後に起動される新しいタスクには長い ARN 形式が使用されます。
+ **コンテナインスタンス**: コンテナインスタンスはサービス ARN の移行の影響を受けることはなく、正常に動作し続けます。
+ **サービス設定**: すべてのサービス設定が変更されません (タスク定義、ネットワーク、ロードバランサー設定など)。

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

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

移行が完了すると、サービスには次の変更が行われます。
+ 長い ARN 形式

  `arn:aws:ecs:region:aws_account_id:service/cluster-name/service-name`
+ コンソールを使用して移行する場合、Amazon ECS はキーを「ecs:serviceArnMigratedAt」に設定し、値を移行タイムスタンプ (UTC 形式) に設定して、サービスにタグを追加します。

  このタグは、タグクォータにカウントされます。
+ CloudFormation スタック内の `PhysicalResourceId` がサービス ARN を表す場合、値は変更されず、引き続き短いサービス ARN になります。

## 前提条件
<a name="migrate-service-arn-prerequisite"></a>

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

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

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

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

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

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

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

   詳細については、「*AWS Identity and Access Management ユーザーガイド*」の「[Editing IAM policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-edit.html)」(IAM ポリシーの編集) を参照してください。

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

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

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

1. サービスの長い ARN 形式を有効にします。`serviceLongArnFormat` オプションを `enabled` に設定して `put-account-setting` を実行します。詳細については、「*Amazon Elastic Container Service API リファレンス*」の「[put-account-setting](https://docs.aws.amazon.com/cli/latest/reference/ecs/put-account-setting.html)」を参照してください。

   サービスの `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
       }
   }
   ```

1. タスクの長い ARN 形式を有効にします。このアカウント設定により、サービス移行の完了後に起動される新しいタスクの ARN 形式が制御されます。`taskLongArnFormat` オプションを `enabled` に設定して `put-account-setting` を実行します。詳細については、「*Amazon Elastic Container Service API リファレンス*」の「[put-account-setting](https://docs.aws.amazon.com/cli/latest/reference/ecs/put-account-setting.html)」を参照してください。

   サービスの `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
       }
   }
   ```
**注記**  
`taskLongArnFormat` 設定では、既存のタスクは直接移行されません。設定が有効になった後に作成される新しいタスクの ARN 形式のみに影響を与えます。通常のサービスオペレーション (デプロイやスケーリングアクティビティなど) によって置き換えられるまで、既存の実行中のタスクは現在の ARN 形式を保持します。

## 手順
<a name="migrate-service-arn-procedure"></a>

サービス ARN を移行するには、以下を使用します。

### コンソール
<a name="migrate-service-arn-procedure-console"></a>

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

1. **[クラスター]** ページで、クラスターを選択します。

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

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

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

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

1. **移行** を選択します。

### CLI
<a name="migrate-service-arn-procedure-cli"></a>

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

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

### Terraform
<a name="migrate-service-arn-procedure-terraform"></a>

前提条件を完了したら、サービスにタグを付けることができます。`aws_ecs_service` リソースを作成し、`tags` リファレンスを設定します。詳細については、Terraform ドキュメントの「[Resource: aws\$1ecs\$1service](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/ecs_service)」を参照してください。

```
resource "aws_ecs_service" "MyService" {
  name    = "example"
  cluster = aws_ecs_cluster.MyService.id

 tags = {
 "Name"  =  "MyService"
 "Environment"  =  "Production"
 "Department"  =  "QualityAssurance"
  }
}
```

### 次のステップ
<a name="tag-next-steps"></a>

サービスにタグを追加できます。詳細については、「[Amazon ECS リソースにタグを追加する](tag-resources-console.md)」を参照してください。

Amazon ECS でタスク定義またはサービスからタスクにタグを伝達する場合は、`propagateTags` パラメータを指定して `update-service` を実行します。詳細については、「* AWS Command Line Interface リファレンス*」の「[create-service](https://docs.aws.amazon.com/cli/latest/reference/ecs/update-service.html)」を参照してください。

## トラブルシューティング
<a name="troubleshooting-arn-migration"></a>

 一部のユーザーの場合、短い 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 コンソールのサービスの詳細ページの **[設定とネットワーク]** タブの **[作成者]** フィールドで情報を確認できます。

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

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

      ```
      aws ecs describe-services --cluster cluster-name --services service-name --query 'services[0].{createdBy: createdBy}'
      ```

1. その特定のプリンシパルに必要なアカウント設定を有効にします。これは、次のいずれかの方法で行うことができます。

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

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

      例。

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

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

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