web-dev-qa-db-ja.com

ECSコンテナ内からタスクIDを取得するにはどうすればよいですか?

こんにちは私はEC2ホストマシン内にある実行中のコンテナ内からTask IDを取得することに興味があります。

AWS ECSドキュメント このデータの場所を示す環境変数ECS_CONTAINER_METADATA_FILEがあると述べていますが、クラスター/ EC2インスタンスでECS_ENABLE_CONTAINER_METADATA変数がtrueに設定されている場合にのみ設定/使用可能になります作成。これをawsコンソールのどこで実行できるかわかりません。

また、ドキュメントには、ホストマシン内でこれをtrueに設定することでこれを実行できると記載されていますが、Dockerエージェントを再起動する必要があります。

これを設定してDockerエージェントを再起動するためにEC2の内部に入る必要なしにこれを行う他の方法はありますか?

5
codeshark

私が使用する手法は、コンテナー定義で環境変数を設定することです。

タスクを管理している場合 Cloudformation経由 、関連するyamlは次のようになります。

  Taskdef:
    Type: AWS::ECS::TaskDefinition
    Properties:
      ...
      ContainerDefinitions:
        - Name: some-name
          ...
          Environment:
            - Name: AWS_DEFAULT_REGION
              Value: !Ref AWS::Region
            - Name: ECS_ENABLE_CONTAINER_METADATA
              Value: 'true'

この手法は、すべてを単純で再現性のあるものに保つのに役立ちます。

プログラムでメタデータが必要で、メタデータファイルにアクセスできない場合は、クエリを実行できます エージェントのメタデータエンドポイント

curl http://localhost:51678/v1/metadata

この情報を実行中のタスクとして取得している場合、ループバックデバイスに接続できない可能性がありますが、EC2インスタンス自体のIPアドレスには接続できます。

2
Ben

以前の回答は正解です。これを行う別の方法は次のとおりです。

コンテナが実行されているec2インスタンスから、このコマンドを実行します

curl http://localhost:51678/v1/tasks | python -mjson.tool |less

enter image description here

enter image description here

2
grepit

マシンの起動時に実行される、いわゆるユーザーデータで設定します。設定する方法は複数あります。例: https://docs.aws.Amazon.com/AWSEC2/latest/UserGuide/user-data.html#user-data-console

次のようになります。

#!/bin/bash

cat <<'EOF' >> /etc/ecs/ecs.config
ECS_CLUSTER=ecs-staging
ECS_ENABLE_CONTAINER_METADATA=true
EOF

重要:上記のECS_CLUSTERをクラスター名と一致するように調整します。そうしないと、インスタンスはそのクラスターに接続しません。

2
iGEL

AWS ECS cliドキュメントから

コマンド:

aws ecs list-tasks --cluster default

出力:

{
    "taskArns": [
        "arn:aws:ecs:us-east-1:<aws_account_id>:task/0cc43cdb-3bee-4407-9c26-c0e6ea5bee84",
        "arn:aws:ecs:us-east-1:<aws_account_id>:task/6b809ef6-c67e-4467-921f-ee261c15a0a1"
    ]
}

特定のコンテナインスタンスのタスクを一覧表示するには

このコマンド例では、コンテナーインスタンスのUUIDをフィルターとして使用して、指定されたコンテナーインスタンスのタスクを一覧表示します。

コマンド:

aws ecs list-tasks --cluster default --container-instance f6bbb147-5370-4ace-8c73-c7181ded911f

出力:

{
    "taskArns": [
        "arn:aws:ecs:us-east-1:<aws_account_id>:task/0cc43cdb-3bee-4407-9c26-c0e6ea5bee84"
    ]
}
1
strongjz