ECS Fargate におけるメタデータの取り扱い

ECS Fargate でコンテナ内部をいじくってたら、いくつかやりたいことがあって、まとまりができたので更新です。

メタデータの扱いがわかれば大体イケるみたいな感じですが、たどり着くまでわりと時間かかったので、サクッとまとめ。



Fargate に渡される環境変数

最終的にはコンテナに sshd とか用意しないのがベターではあるのですが、やっぱりSSHは大正義。シェルで作業しないと、こーゆーのは捗りません。

Fargate で基本的な値が入った環境変数はこのように取得できるので確認します。これがあれば、あとはトントン拍子に進みますね。


IAM Role を有効にする

EC2 は profile を割り当てたり、他のリソースでも Role を指定すればそのままその権限が有効になる、みたいなイメージですが、ECS では一工夫する必要があります。

例えば、開発用として SSH で入れるようにしても、そのまま aws コマンドは打てません。IAM の情報をメタデータから取得する必要があり、さきほどの AWS_CONTAINER_CREDENTIALS_RELATIVE_URI のパスにリクエストを送ります。なぜホストを抜いてるか不明ですが、もう1つの URI にあるように、169.254.170.2 固定なので見てみると、

鍵情報がとれるので、これをいつもの環境変数名に放り込むと、aws-cli が動くようになります。それを、例えばログイン時に自動的に有効にしたければ、こんなスクリプトを profile.d にでも置いておくことになります。


ECS の情報を取得する

もう1つの URI が提供されているので、こちらも見ておきます。

中身を確認……すると、なんか条件が違うのかドキュメントと食い違いがあるようです。例えば Family がトップになかったり。なので、各々の環境で確認してみるとよさげです。

さきほどと同じように、なにかしらのメタデータをコンテナ内で使いたい場合、こんな感じのスクリプトにすればよいでしょう。

おとなしく Family が入ってれば、こんなふうにドット入りキーを扱わなくていいのに。とか、一応 FARGATE_SPOT なんだけど、その情報はここにはないのね。という程度の愚痴はこぼしておきます。


必要なコマンド

見たとおりなのでアレですが、この処理に必要なコマンドは、
 sudo, curl, jq
程度なので扱いやすいです。

自動起動するミドルウェアなどでは、sudo はいらないかも、くらいですね。

あ、忘れてたので最後になりますが、コンテナOS は alpine:latest でした。



今、また ECS で遊んでるんですが、多少面倒だったり気に食わないところがあるものの、わりと扱いやすくて好きですサッポロ。自宅でやるにはほどよいゲームなのです:-)