Fargateでエフェメラルストレージを拡張する

FargateのエフェメラルストレージをAWS CLIを用いて拡張する方法をまとめます。

はじめに

おはよう。@bioerrorlogです。

先日のアップデートで、Fargateのエフェメラルストレージ機能が拡張されました。 20GBのエフェメラルストレージがデフォルト(無料)でアタッチされ、最大200GBまで拡張できます。

Amazon ECS on AWS Fargate now allows you to configure the size of ephemeral storage for your Tasks

ただし上のアナウンス記事にも書かれている通り、エフェメラルストレージの拡張を設定できるのは現時点でCopilot CLI, CloudFormation, AWS SDK, AWS CLIのみであり、マネジメントコンソール上からは設定できません。

You can configure the size of the ephemeral storage for your Amazon ECS Tasks running on AWS Fargate platform version 1.4.0 or higher in all regions where AWS Fargate is available using AWS Copilot CLI, CloudFormation, AWS SDK, and AWS CLI.


今回は、AWS CLIを用いてエフェメラルストレージを拡張する方法をメモします。

AWS CLIバージョンの確認

Fargateのエフェメラルストレージを拡張するには、AWS CLIバージョンがv1, v2でそれぞれ以下を満たしている必要があります。 aws --versionでバージョンを確認してください。

  • v1: 1.19.61以上
  • v2: 2.2.1以上

※参考:
aws-cli/CHANGELOG.rst at v2 · aws/aws-cli · GitHub

Fargateでエフェメラルストレージを拡張する

エフェメラルストレージを拡張する方法としては以下の2つがあります。

  • Task Definition作成時に指定するやり方
  • Run Task時に指定する(上書きする)やり方

Task Definition作成時にエフェメラルストレージを指定する

Task Definition作成時にエフェメラルストレージ指定するregister-task-definitionコマンド例:

aws ecs register-task-definition \
  --family test-ephemeral-storage \
  --requires-compatibilities FARGATE \
  --network-mode awsvpc\
  --cpu 256 \
  --memory 512 \
  --ephemeral-storage "{\"sizeInGiB\":200}" \
  --execution-role-arn arn:aws:iam::123456789012:role/ecsTaskExecutionRole \
  --container-definitions "[{\"name\":\"df\",\"image\":\"public.ecr.aws/ubuntu/ubuntu:18.04\",\"command\":[\"df\",\"-h\"],\"essential\":true,\"logConfiguration\":{\"logDriver\":\"awslogs\",\"options\":{\"awslogs-group\":\"/ecs/test-ephemeral-storage\",\"awslogs-region\":\"ap-northeast-1\",\"awslogs-stream-prefix\":\"ecs\"}}}]"

# Task Definition "test-ephemeral-storage:1"が作成される

--ephemeral-storage "{\"sizeInGiB\":integer}"オプションで、拡張するエフェメラルストレージを21~200(GiB)の範囲で指定できます。

作成したTask Definition (public.ecr.aws/ubuntu/ubuntu:18.04でcommanddf -hが実行される) からTaskを実行してディスクサイズを確認すると、

# Taskを実行
aws ecs run-task --launch-type FARGATE \
  --cluster test-cluster \
  --task-definition test-ephemeral-storage:1 \
  --network-configuration "awsvpcConfiguration={subnets=[subnet-1234567]}"
# CloudWatch Logsに出力されたログ
Filesystem      Size  Used Avail Use% Mounted on
overlay         207G  9.4G  189G   5% /
tmpfs            64M     0   64M   0% /dev
shm             2.0G     0  2.0G   0% /dev/shm
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/xvdcz      207G  9.4G  189G   5% /etc/hosts
tmpfs           2.0G     0  2.0G   0% /proc/acpi
tmpfs           2.0G     0  2.0G   0% /sys/firmware
tmpfs           2.0G     0  2.0G   0% /proc/scsi

利用可能なディスクサイズが拡張されていることが確認できます。

Run Task時にエフェメラルストレージを指定する

次は、Task Definition作成時にはエフェメラルストレージを指定せず、Task実行時にエフェメラルストレージ設定を上書きしてみます。

# エフェメラルストレージを指定せずにTask Definitionを作成
aws ecs register-task-definition \
  --family test-ephemeral-storage \
  --requires-compatibilities FARGATE \
  --network-mode awsvpc\
  --cpu 256 \
  --memory 512 \
  --execution-role-arn arn:aws:iam::123456789012:role/ecsTaskExecutionRole \
  --container-definitions "[{\"name\":\"df\",\"image\":\"public.ecr.aws/ubuntu/ubuntu:18.04\",\"command\":[\"df\",\"-h\"],\"essential\":true,\"logConfiguration\":{\"logDriver\":\"awslogs\",\"options\":{\"awslogs-group\":\"/ecs/test-ephemeral-storage\",\"awslogs-region\":\"ap-northeast-1\",\"awslogs-stream-prefix\":\"ecs\"}}}]"

# Task Definition "test-ephemeral-storage:2"が作成される
# エフェメラルストレージを指定してTaskを実行
aws ecs run-task --launch-type FARGATE \
  --cluster test-cluster \
  --task-definition test-ephemeral-storage:2 \
  --overrides "{\"ephemeralStorage\":{\"sizeInGiB\":200}}" \
  --network-configuration "awsvpcConfiguration={subnets=[subnet-1234567]}"

--overridesオプション内で"ephemeralStorage":{"sizeInGiB":integer}を指定することで、Task実行時にエフェメラルストレージを上書き設定することが出来ます。

CloudWatch Logsの出力を見ると、以下のようにディスク容量が拡張されていることが確認できます。

# CloudWatch Logsに出力されたログ
Filesystem      Size  Used Avail Use% Mounted on
overlay         207G  9.4G  189G   5% /
tmpfs            64M     0   64M   0% /dev
shm             2.0G     0  2.0G   0% /dev/shm
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/xvdcz      207G  9.4G  189G   5% /etc/hosts
tmpfs           2.0G     0  2.0G   0% /proc/acpi
tmpfs           2.0G     0  2.0G   0% /sys/firmware
tmpfs           2.0G     0  2.0G   0% /proc/scsi


ちなみにTask実行時にエフェメラルストレージを指定しなければ、デフォルトのまま20GBのエフェメラルストレージがアタッチされます。

# エフェメラルストレージを指定せずにTaskを実行
aws ecs run-task --launch-type FARGATE \
  --cluster test-cluster \
  --task-definition test-ephemeral-storage:2 \
  --network-configuration "awsvpcConfiguration={subnets=[subnet-1234567]}"
# CloudWatch Logsに出力されたログ
# 20GBのエフェメラルストレージがアタッチされている
Filesystem      Size  Used Avail Use% Mounted on
overlay          30G  9.4G   19G  34% /
tmpfs            64M     0   64M   0% /dev
shm             2.0G     0  2.0G   0% /dev/shm
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/xvdcz       30G  9.4G   19G  34% /etc/hosts
tmpfs           2.0G     0  2.0G   0% /proc/acpi
tmpfs           2.0G     0  2.0G   0% /sys/firmware
tmpfs           2.0G     0  2.0G   0% /proc/scsi

おわりに

今回は、FargateのエフェメラルストレージをAWS CLIを用いて拡張する方法をまとめました。

ECS / Fargateはアップデートのたびにどんどん使いやすくなっています。 キャッチアップして使いこなしていきたいものです。

[関連記事]

www.bioerrorlog.work

www.bioerrorlog.work

参考

Amazon ECS on AWS Fargate now allows you to configure the size of ephemeral storage for your Tasks

Amazon ECS on AWS Fargate now enables customers to configure ephemeral storage up to 200GiB | Containers

Fargate task storage - Amazon Elastic Container Service

register-task-definition — AWS CLI 1.20.11 Command Reference

run-task — AWS CLI 1.20.11 Command Reference

aws-cli/CHANGELOG.rst at v2 · aws/aws-cli · GitHub