AWS Fargateがストレージ容量を監視できるようになりました

2022.11.23

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Amazon ECS FargateがECSタスクメタデータエンドポイントまたはECS Container Insights経由でストレージの総容量と使用量をモニタリングできるようになりました。 容量不足のアプリ障害ともおさらばです。

AWS Fargate adds support for monitoring the storage utilization@2022/11/18

ECS FargateのLinuxプラットフォーム1.4.0以降にのみ対応しています。

追加されたストレージのメトリクスについて

Fargateに割り当てられたストレージの容量と使用しているサイズの2種類のメトリクスが追加されました。

サービス Task metadata endpoint Container Insights
割当サイズ EphemeralStorageMetrics.Utilized EphemeralStorageUtilization
使用サイズ EphemeralStorageMetrics.Reserved EphemeralStorageReservation
単位 MiB GiB
ドキュメント URL URL

ECSタスクメタデータエンドポイントから確認

Fargateコンテナ内からタスクメタデータエンドポイントv4の task にアクセスします。

$ curl $ECS_CONTAINER_METADATA_URI_V4/task | jq .
{
  "Cluster": "arn:aws:ecs:eu-central-1:123456789012:cluster/test",
  "TaskARN": "arn:aws:ecs:eu-central-1:123456789012:task/test/70aff84b5dc041d183bdc7791c117890",
  ...
  "EphemeralStorageMetrics": {
    "Utilized": 20692,
    "Reserved": 50711
  }
}

単位は MiB です。

Container Insightsから確認

前提として、Container Insightsの有効化が必要です。

ディメンションとして

  • TaskDefinitionFamily
  • ClusterName
  • ServiceName

を利用できます。

単位は GiB です。

ストレージサイズの指定

ECS Fargateのエフェメラル(ローカル)ストレージにはデフォルトの20GiBから最大で200GiBまで割当られます。

{
    "taskDefinitionArn": "arn:aws:ecs:...",
    "containerDefinitions": [
        ...
    ],
    "cpu": "256",
    "memory": "512",
    "ephemeralStorage": {
        "sizeInGiB": 50
    },
    ...
}

df との関連

コンテナ内でdfからストレージサイズを確認すると、総容量はタスクのephemeralStorageで指定したサイズよりも大きいです。

エフェメラル・ストレージが20GiBのタスクを起動した直後の状態で、df結果と今回追加されたストレージ系メトリクスを確認します。

$ df -H
Filesystem      Size  Used Avail Use% Mounted on
overlay          32G   11G   20G  35% /
tmpfs            68M     0   68M   0% /dev
shm             2.1G     0  2.1G   0% /dev/shm
tmpfs           2.1G     0  2.1G   0% /sys/fs/cgroup
/dev/nvme1n1     32G   11G   20G  35% /etc/hosts
/dev/nvme0n1p1  5.3G  1.6G  3.6G  31% /managed-agents/execute-command
tmpfs           2.1G     0  2.1G   0% /proc/acpi
tmpfs           2.1G     0  2.1G   0% /sys/firmware

$ curl $ECS_CONTAINER_METADATA_URI_V4/task
{
  ...
  "EphemeralStorageMetrics": {
    "Utilized": 212,
    "Reserved": 20481
  }
}

df 結果から、コンテナの総サイズは32GiBあるのに対して Available は EphemeralStorageMetrics で指定したのと同じ20GiBです。

次のドキュメントにあるように、df結果にはコンテナイメージも含んでいるからです。

The pulled, compressed, and the uncompressed container image for the task is stored on the ephemeral storage. To determine the total amount of ephemeral storage that your task has to use, you must subtract the amount of storage that your container image uses from the total amount of ephemeral storage your task is allocated.

https://docs.aws.amazon.com/AmazonECS/latest/developerguide/fargate-task-storage.html

今回追加されたメトリクスを利用することで、アプリケーションが利用可能なストレージ総容量(Reserved)と実際に利用している容量(Utilized)を直接的にモニタリングできます。

参考