こんにちは私はEC2ホストマシン内にある実行中のコンテナ内からTask ID
を取得することに興味があります。
AWS ECSドキュメント このデータの場所を示す環境変数ECS_CONTAINER_METADATA_FILE
があると述べていますが、クラスター/ EC2インスタンスでECS_ENABLE_CONTAINER_METADATA
変数がtrueに設定されている場合にのみ設定/使用可能になります作成。これをawsコンソールのどこで実行できるかわかりません。
また、ドキュメントには、ホストマシン内でこれをtrueに設定することでこれを実行できると記載されていますが、Dockerエージェントを再起動する必要があります。
これを設定してDockerエージェントを再起動するためにEC2の内部に入る必要なしにこれを行う他の方法はありますか?
私が使用する手法は、コンテナー定義で環境変数を設定することです。
タスクを管理している場合 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アドレスには接続できます。
マシンの起動時に実行される、いわゆるユーザーデータで設定します。設定する方法は複数あります。例: 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
をクラスター名と一致するように調整します。そうしないと、インスタンスはそのクラスターに接続しません。
コマンド:
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"
]
}