ECS コンテナインスタンスで利用可能な CPU とメモリを確認する方法を教えてください

2024.06.14

困っていた内容

ECS on EC2 で、コンテナを実行しています。
リソース割り当てのため、利用中のコンテナインスタンスでコンテナに利用可能な CPU とメモリを確認したいです。確認方法を教えてください。

どう対応すればいいの?

コンテナインスタンスの「リソース」セクションを確認してください。

コンテナインスタンスで利用可能な CPU とメモリはインスタンスタイプに依存します。
また、メモリに関してはオーバーヘッドがあり、インスタンスタイプとして公開されているメモリより多少少ない値となります。

実際に利用可能な CPU とメモリは、コンテナインスタンスの「リソース」セクションから確認できます。

やってみた

Amazon ECS コンソールの「クラスター」からインスタンスが含まれるクラスターを選択します。

「インフラストラクチャ」タブを選択します。

「コンテナインスタンス」セクションから確認したいコンテナインスタンスをクリックします。

「リソース」セクションから確認できます。
なお「登録済み」はコンテナインスタンス登録時の値で、「利用可能」はコンテナに未割り当ての値です。

AWS CLIの場合

list-container-instancesコマンドでコンテナインスタンス ID を取得して、describe-container-instancesを実行します。

実行例

# ECS クラスター内のコンテナインスタンス ID を取得
$ aws ecs list-container-instances \
    --cluster 【ECS クラスター名】
{
    "containerInstanceArns": [
        "arn:aws:ecs:ap-northeast-1:123456789012:container-instance/hato-cluster-ec2/c939a9e8e8db4af6ba23e9e4c31bc5bd"
    ]
}

# 取得したコンテナインスタンス ID を指定してリソース情報を取得
$ aws ecs describe-container-instances \
    --cluster 【ECS クラスター名】 \
    --container-instances 【インスタンス ID】 \
    --query "containerInstances[].registeredResources[]" 
[
    {
        "name": "CPU",
        "type": "INTEGER",
        "doubleValue": 0.0,
        "longValue": 0,
        "integerValue": 4096
    },
    {
        "name": "MEMORY",
        "type": "INTEGER",
        "doubleValue": 0.0,
        "longValue": 0,
        "integerValue": 15779
    },
    {
        "name": "PORTS",
        "type": "STRINGSET",
        "doubleValue": 0.0,
        "longValue": 0,
        "integerValue": 0,
        "stringSetValue": [
            "22",
            "2376",
            "2375",
            "51678",
            "51679"
        ]
    },
    {
        "name": "PORTS_UDP",
        "type": "STRINGSET",
        "doubleValue": 0.0,
        "longValue": 0,
        "integerValue": 0,
        "stringSetValue": []
    }
]

参考資料

ベースラインとして、ECS は EC2 コンテナインスタンスが利用できる各 vCPU を 1024 ユニットと見なします。つまり、8 個の vCPU を持つ EC2 ホストは、8 × 1024 = 8192 CPU ユニットが利用可能です。

プラットフォームのメモリオーバーヘッドとシステムカーネルが占めるメモリのため、この数値は、Amazon EC2 インスタンスとして公開されているインストール済みメモリ量とは異なります。例えば、m4.large インスタンスには 8 GiB のメモリがインストールされています。しかし、これはコンテナインスタンスが登録されたときに、タスクに使用できるメモリが正確に 8192 MiB に変換されるとは限りません。