AR ホームベーカリー

オイラのアウトプット用ホームベーカリー!

ECS(fargate) のタスク ID を取得する

タスク ID が欲しい

ECS_AGENT_URI ECS_CONTAINER_METADATA_URI_V4 ECS_CONTAINER_METADATA_URI と起動時に自動付与される環境変数 (ECS_) から取れそうなんだけど、メタデータのエンドポイント URL (http://169.254.170.2) も含まれた絶対パス形式だったなあ。 AWS_CONTAINER_CREDENTIALS_RELATIVE_URI みたいにパスとか、あわよくば直接取れたりしない? ダメ? アッハイ……、という感じだった。

ので awk を使って地味に取得する。

env | grep ECS_CONTAINER_METADATA_URI= | awk -F'[/]' '{print $5}'
# => examplewjnowsp9n4ygu4p4a7scnhfca-123456789

生成される長さが 42 になるはずなので、不安ならその辺は確認してもろて。

これを環境変数に自動でセットしたい、とかなら初期処理に以下でも突っ込んでおけばよい。

export CONTAINER_TASK_ID=$(env | grep ECS_CONTAINER_METADATA_URI= | awk -F'[/]' '{print $5}')

なぜこんなことを?

NewRelic の agent とかだと単純に、自動付与される HOSTNAME を識別子として送ってるっぽんだけど、まあ自前で色々やろうと思ったら、

  • どの環境 (prod/stg/intg/dev) か
  • 動いているリソース (EC2/ECS/fargate) 種別は?
  • アタッチする為に必要な情報は

となり、タスク ID が確認できたらいいなあ、という風情でした。 とりあえずこれで。

参考

gist.github.com