12
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Amazon ECSで、タスクの停止理由などをAWS CLIから確認する

Last updated at Posted at 2020-09-26

What's?

AWS Fargateを使っていて、タスクの起動に失敗した時にどうやって確認したらいいか覚えられなかったのでメモしようかなと。

AWSマネージメントコンソールで以下の方法で見てもいいのですが、毎回見るのも面倒なので、AWS CLIで見たいのです。

停止したタスクのエラーの確認

環境

利用するAWS CLIのバージョンは、こちら。

$ aws --version
aws-cli/2.0.52 Python/3.7.3 Linux/4.15.0-112-generic exe/x86_64.ubuntu.20

AWSのクレデンシャルは、環境変数で設定しているものとします。

$ export AWS_ACCESS_KEY_ID=...
$ export AWS_SECRET_ACCESS_KEY=...
$ export AWS_DEFAULT_REGION=ap-northeast-1

確認

まずは、確認対象のクラスターを確認します。

list-clusters

$ aws ecs list-clusters

AWS CLIのドキュメント例ですが、こんな結果が得られるので、ECSクラスター名を確認しましょう。

{
    "clusterArns": [
        "arn:aws:ecs:us-west-2:123456789012:cluster/MyECSCluster1",
        "arn:aws:ecs:us-west-2:123456789012:cluster/AnotherECSCluster"
    ]
}

ここでは、MyECSCluster1AnotherECSClusterなどがクラスター名ですね。

次に、タスクを確認します。

list-tasks

$ aws ecs list-tasks --cluster [クラスター名]

# たとえば
$ aws ecs list-tasks --cluster MyECSCluster1

結果の例。

{
    "taskArns": [
        "arn:aws:ecs:us-west-2:123456789012:task/a1b2c3d4-5678-90ab-cdef-11111EXAMPLE",
        "arn:aws:ecs:us-west-2:123456789012:task/a1b2c3d4-5678-90ab-cdef-22222EXAMPLE"
    ]
}

この時、--desired-statusというオプションを指定しない場合、RUNNINGのタスクしか表示されません。

RUNNINGPENDINGSTOPPEDのいずれかを指定することができるので、適切に指定しましょう。

それぞれの意味は、タスクのライフサイクルを参照。

トラブルシュートの場合は、PENDINGSTOPPEDを指定することになります。

$ aws ecs list-tasks --cluster [クラスター名] --desired-status STOPPED

# たとえば
$ aws ecs list-tasks --cluster MyECSCluster1 --desired-status STOPPED

サービスのdesiredCountとの関係で、タスクが多数表示されて困るよという場合は、--max-itemsを指定して表示件数を絞りましょう。

$ aws ecs list-tasks --cluster [クラスター名] --desired-status STOPPED --max-items 3

これでタスクのARNが得られるので、このARNを使用してタスクの状態を確認します。

describe-tasks

$ aws ecs describe-tasks --cluster [クラスター名] --tasks [タスクのARN]

# たとえば
$ aws ecs describe-tasks \
    --cluster MyCluster \
    --tasks arn:aws:ecs:us-west-2:123456789012:task/MyCluster/1234567890123456789

ドキュメントのアウトプット例です。

    "tasks": [
        {
            "taskArn": "arn:aws:ecs:us-west-2:123456789012:task/MyCluster/1234567890123456789",
            "clusterArn": "arn:aws:ecs:us-west-2:123456789012:cluster/MyCluster",
            "taskDefinitionArn": "arn:aws:ecs:us-west-2:123456789012:task-definition/sample-fargate:2",
            "overrides": {
                "containerOverrides": [
                    {
                        "name": "fargate-app"
                    }
                ]
            },
            "lastStatus": "RUNNING",
            "desiredStatus": "RUNNING",
            "cpu": "256",
            "memory": "512",
            "containers": [
                {
                    "containerArn": "arn:aws:ecs:us-west-2:123456789012:container/a1b2c3d4-5678-90ab-cdef-11111EXAMPLE",
                    "taskArn": "arn:aws:ecs:us-west-2:123456789012:task/MyCluster/1234567890123456789",
                    "name": "fargate-app",
                    "lastStatus": "RUNNING",
                    "networkBindings": [],
                    "networkInterfaces": [
                        {
                            "attachmentId": "a1b2c3d4-5678-90ab-cdef-22222EXAMPLE",
                            "privateIpv4Address": "10.0.0.4"
                        }
                    ],
                    "healthStatus": "UNKNOWN",
                    "cpu": "0"
                }
            ],
            "startedBy": "ecs-svc/1234567890123456789",
            "version": 3,
            "connectivity": "CONNECTED",
            "connectivityAt": 1557134016.971,
            "pullStartedAt": 1557134025.379,
            "pullStoppedAt": 1557134033.379,
            "createdAt": 1557134011.644,
            "startedAt": 1557134035.379,
            "group": "service:fargate-service",
            "launchType": "FARGATE",
            "platformVersion": "1.3.0",
            "attachments": [
                {
                    "id": "a1b2c3d4-5678-90ab-cdef-33333EXAMPLE",
                    "type": "ElasticNetworkInterface",
                    "status": "ATTACHED",
                    "details": [
                        {
                            "name": "subnetId",
                            "value": "subnet-12344321"
                        },
                        {
                            "name": "networkInterfaceId",
                            "value": "eni-12344321"
                        },
                        {
                            "name": "macAddress",
                            "value": "0a:90:09:84:f9:14"
                        },
                        {
                            "name": "privateIPv4Address",
                            "value": "10.0.0.4"
                        }
                    ]
                }
            ],
            "healthStatus": "UNKNOWN",
            "tags": []
        }
    ],
    "failures": []
}

停止したタスクには、stoppedReasonなどが追加され、停止した理由を確認することができます。

たとえば、DockerHubからイメージをPullできなかった場合は、こんな感じですね。

            "stopCode": "TaskFailedToStart",
            "stoppedReason": "CannotPullContainerError: failed to resolve ref \"docker.io/library/nginx:1.19.2\": failed to do request: Head https://registry-1.docker.io/v2/library/nginx/manifests/1.19.2: dial tcp 3.218.162.19:443: i/o timeout",
            "stoppingAt": "2020-09-26T17:34:13.490000+09:00",

これで、

停止したタスクのエラーの確認

を見ているのと同じことになります。

12
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?