Amazon ECS のデプロイ時に Amazon EBS ボリューム設定を指定する - Amazon Elastic Container Service

Amazon ECS のデプロイ時に Amazon EBS ボリューム設定を指定する

configuredAtLaunch パラメータを true に設定してタスク定義を登録すると、デプロイ時にスタンドアロンタスクを実行するとき、またはサービスを作成または更新するときに Amazon EBS ボリュームを設定できます。

ボリュームを設定するには、Amazon ECS API を使用するか、あるいは次の AWS CLI コマンドの入力として JSON ファイルを渡します。

  • スタンドアロン ECS タスクを実行するための run-task

  • 特定のコンテナインスタンスでスタンドアロン ECS タスクを実行するための start-task。このコマンドは Fargate 起動タイプのタスクには適用されません。

  • 新しい ECS サービスを作成するための create-service

  • 既存のサービスを更新するための update-service

注記

マウントした Amazon EBS ボリュームにタスク内のコンテナから書き込みを行うには、コンテナをルートユーザーとして実行する必要があります。

あるいは、AWS Management Console を使用して Amazon EBS ボリュームを設定することもできます。詳細についてはAmazon ECS タスクとしてのアプリケーションの実行コンソールを使用した Amazon ECS サービスの作成、およびAmazon ECS サービスを更新するを参照してください。

以下の JSON スニペットは、デプロイ時に設定可能なすべての Amazon EBS ボリュームパラメータを示します。ボリューム設定でこれらのパラメータを使用するには、user input placeholders をユーザー自身の情報に置き換えます。これらのパラメータの詳細については、「ボリュームの設定」を参照してください。

"volumeConfigurations": [ { "name": "ebs-volume", "managedEBSVolume": { "encrypted": true, "kmsKeyId": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "volumeType": "gp3", "sizeInGiB": 10, "snapshotId": "snap-12345", "volumeInitializationRate":100, "iops": 3000, "throughput": 125, "tagSpecifications": [ { "resourceType": "volume", "tags": [ { "key": "key1", "value": "value1" } ], "propagateTags": "NONE" } ], "roleArn": "arn:aws:iam::1111222333:role/ecsInfrastructureRole", "terminationPolicy": { "deleteOnTermination": true//can't be configured for service-managed tasks, always true }, "filesystemType": "ext4" } } ]
重要

設定内で指定する volumeName は、タスク定義で指定する volumeName と同じであること。

ボリュームアタッチメントのステータスの確認については、「Amazon ECS タスクへの Amazon EBS ボリュームのアタッチに関するトラブルシューティング 」を参照してください。EBS ボリュームのアタッチメントに必要な Amazon ECS インフラストラクチャ AWS Identity and Access Management (IAM) ロールの詳細については、「Amazon ECS インフラストラクチャ IAM ロール」を参照してください。

Amazon EBS ボリュームの設定内容を示す JSON スニペットの例を以下に挙げます。これらの例は、スニペットを JSON ファイルに保存し、そのファイルを AWS CLI コマンドのパラメータ (--cli-input-json file://filename パラメータを使用) として渡すことで使用できます。user input placeholders を、ユーザー自身の情報に置き換えます。

スタンドアロンタスク向けボリュームの設定

以下のスニペットは、Amazon EBS ボリュームをスタンドアロンタスクにアタッチする設定の構文を示します。以下の JSON スニペットは、volumeTypesizeInGiBencryptedkmsKeyId の各設定を構成するための構文を示します。JSON ファイルに指定された設定を使用して EBS ボリュームを作成し、スタンドアロンタスクにアタッチします。

{ "cluster": "mycluster", "taskDefinition": "mytaskdef", "volumeConfigurations": [ { "name": "datadir", "managedEBSVolume": { "volumeType": "gp3", "sizeInGiB": 100, "roleArn":"arn:aws:iam::1111222333:role/ecsInfrastructureRole", "encrypted": true, "kmsKeyId": "arn:aws:kms:region:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" } } ] }

サービス作成時のボリューム設定

以下のスニペットは、サービスで管理されるタスクにアタッチする Amazon EBS ボリュームを設定する構文を示します。ボリュームは、snapshotId パラメータを使用して指定されたスナップショットから 200 MiB/秒のレートで取得されます。JSON ファイルに指定された設定を使用して EBS ボリュームを作成し、サービスで管理される各タスクにアタッチします。

{ "cluster": "mycluster", "taskDefinition": "mytaskdef", "serviceName": "mysvc", "desiredCount": 2, "volumeConfigurations": [ { "name": "myEbsVolume", "managedEBSVolume": { "roleArn":"arn:aws:iam::1111222333:role/ecsInfrastructureRole", "snapshotId": "snap-12345", "volumeInitializationRate": 200 } } ] }

サービス更新時のボリューム設定

以下の JSON スニペットは、これまでタスクへのアタッチ用に Amazon EBS ボリュームが設定されていなかったサービスを更新するための構文を示します。configuredAtLaunchtrue に設定したタスク定義リビジョンの ARN を提供する必要があります。以下の JSON スニペットは、volumeTypesizeInGiBthroughputiops、および filesystemType 設定を構成する構文を示します。これらの設定を使用して EBS ボリュームを作成し、サービスで管理される各タスクにアタッチします。

{ "cluster": "mycluster", "taskDefinition": "mytaskdef", "service": "mysvc", "desiredCount": 2, "volumeConfigurations": [ { "name": "myEbsVolume", "managedEBSVolume": { "roleArn":"arn:aws:iam::1111222333:role/ecsInfrastructureRole", "volumeType": "gp3", "sizeInGiB": 100, "iops": 3000, "throughput": 125, "filesystemType": "ext4" } } ] }

Amazon EBS ボリュームを使用しないようにサービスを設定する

以下の JSON スニペットは、Amazon EBS ボリュームをそれ以上使用しないようにサービスを更新するための構文を示します。configuredAtLaunchfalse に設定したタスク定義の ARN 、または configuredAtLaunch パラメータのないタスク定義を提供する必要があります。空の volumeConfigurations オブジェクトも提供する必要があります。

{ "cluster": "mycluster", "taskDefinition": "mytaskdef", "service": "mysvc", "desiredCount": 2, "volumeConfigurations": [] }

Amazon EBS ボリュームの終了ポリシー

Amazon ECS タスクが終了すると、Amazon ECS は deleteOnTermination の値に基づいて、終了したタスクに関連付けられている Amazon EBS ボリュームを削除する必要があるかどうかを判断します。デフォルトでは、タスクにアタッチされている EBS ボリュームは、タスクが終了すると削除されます。スタンドアロンタスクの場合、タスク終了時にボリュームを保存するように設定を変更することができます。

注記

サービスにより管理されるタスクにアタッチされたボリュームは保存されず、タスク終了時に必ず削除されます。

Amazon EBS ボリュームのタグ付け

tagSpecifications オブジェクトを使用して Amazon EBS ボリュームにタグを付けることができます。このオブジェクトを使用すると、ボリュームがスタンドアロンタスクにアタッチされているか、あるいはサービス内のタスクにアタッチされているかに応じて、独自のタグを提供したり、あるいはタスク定義またはサービスからタグを伝播するよう設定することができます。1 つのボリュームにアタッチできるタグの最大数は 50 個です。

重要

Amazon ECS は、AmazonECSCreated および AmazonECSManaged のリザーブドタグを Amazon EBS ボリュームに自動的にアタッチするので、1 つのボリュームにユーザーが追加できるタグの最大数は 48 個になります。追加できるタグは、ユーザー定義タグ、ECS マネージド型タグ、または伝播されたタグのいずれです。

Amazon ECS マネージド型タグをボリュームに追加する場合は、UpdateServiceCreateServiceRunTaskStartTask の呼び出しの enableECSManagedTagstrue に設定する必要があります。Amazon ECS マネージド型タグをオンにすると、Amazon ECS はボリュームにクラスターとサービスの情報 (aws:ecs:clusterNameaws:ecs:serviceName) を自動的にタグ付けします。Amazon ECS リソースへのタグ付けの詳細については、「Amazon ECS リソースのタグ付け」を参照してください。

以下の JSON スニペットは、サービス内の各タスクにアタッチされた Amazon EBS ボリュームにユーザー定義タグを付ける構文を示します。この例を使用してサービスを作成するには、user input placeholders をユーザー自身の情報に置き換えます。

{ "cluster": "mycluster", "taskDefinition": "mytaskdef", "serviceName": "mysvc", "desiredCount": 2, "enableECSManagedTags": true, "volumeConfigurations": [ { "name": "datadir", "managedEBSVolume": { "volumeType": "gp3", "sizeInGiB": 100, "tagSpecifications": [ { "resourceType": "volume", "tags": [ { "key": "key1", "value": "value1" } ], "propagateTags": "NONE" } ], "roleArn":"arn:aws:iam:1111222333:role/ecsInfrastructureRole", "encrypted": true, "kmsKeyId": "arn:aws:kms:region:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" } } ] }
重要

Amazon EBS ボリュームにタグを付けるには、volume リソースタイプを指定する必要があります。