指定 Amazon ECS 部署时的 Amazon EBS 卷配置 - Amazon Elastic Container Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

指定 Amazon ECS 部署时的 Amazon EBS 卷配置

configuredAtLaunch 参数设置为 true 注册任务定义后,您可以在运行独立任务或创建或更新服务时在部署时配置 Amazon EBS 卷。

要配置卷,您可以使用 Amazon ECS API,也可以将 JSON 文件作为以下 Amazon CLI 命令的输入传递:

  • 运行独立 ECS 任务的 run-task

  • 在特定的容器实例中运行独立 ECS 任务的 start-task。此命令不适用于 Fargate 启动类型任务。

  • 创建新的 ECS 服务的 create-service

  • 更新现有服务的 update-service

注意

要使任务中的容器写入已挂载的 Amazon EBS 卷,您必须以根用户身份运行该容器。

您也可以使用 Amazon Web Services 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 基础设施 Amazon Identity and Access Management(IAM)角色的信息,请参阅Amazon ECS 基础设施 IAM 角色

以下是显示 Amazon EBS 卷配置的 JSON 代码段示例。这些示例可以通过将代码段保存在 JSON 文件中并将文件作为 Amazon 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/s。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 卷配置为附加到任务的服务的语法。您必须提供任务定义修订的 ARN,其 configuredAtLaunch 被设置为 true。以下 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 卷的语法。您必须提供 configuredAtLaunch 被设置为 false 的任务定义的 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 卷。使用该对象,您可以提供自己的标签,并从任务定义或服务中设置标签的传播,具体取决于卷是附加到一项独立任务还是附加到服务中的某项任务。可以附加到一个卷上的最大标签数为 50。

重要

Amazon ECS 会自动将保留的 AmazonECSCreatedAmazonECSManaged 标签附加到 Amazon EBS 卷中。这意味着您可以控制最多将 48 个其他标签附加到卷的情况。这些附加标签可以是用户定义的、ECS 管理的或传播的标签。

如果您想向卷中添加 Amazon ECS 托管的标签,则必须在 UpdateServiceCreateServiceRunTaskStartTask 调用中将 enableECSManagedTags 设置为 true。如果您启用 Amazon ECS 管理的标签,Amazon ECS 将使用集群和服务信息(aws:ecs:clusterNameaws:ecs:serviceName)自动标记卷。有关标记 Amazon ECS 源的更多信息,请参阅标记 Amazon EC2 资源

以下 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" } } ] }
重要

您必须指定 volume 资源类型来标记 Amazon EBS 卷。