課題
ECS on Fargateで起動するタスクにおいて名前解決先を複数設定したい要件があり、どのように設定すればよいか調査した。
結論
- FargateにおいてもDHCPオプションセットでresolv.confを変更することができる。
- Fargateを起動するVPCにリゾルバを指定したDHCPオプションセットを作成することで、タスクに反映することが出来る。
- 起動中のタスクには反映されず、タスクに再起動が必要(かも)
検証
準備と確認
まずは起動中のタスクにログインし、resolv.confの中身を確認してみる。
なおタスクにログインするためには事前に設定が必要なので注意
- https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/userguide/ecs-exec.html
- https://dev.classmethod.jp/articles/ecs-exec-for-fish-shell/
タスクにログインするためにはAWS CLIコマンドで下記を実行する。
aws ecs execute-command --region ap-northeast-1 --cluster <クラスタ名> --interactive --comand "/bin/sh" --task <タスクID>
タスクIDはECSのコンソール画面から起動しているタスクを確認し取得した。
まず初期状態を確認すると、VPCのresolver IPを指していた(10.0.0.2)
DHCPオプションセット
DHCPオプションセットとは、VPC内のEC2インスタンスのDNS/NTPサーバの設定ができる。
DHCPオプションセットの詳細についてはこちらを参照のこと。
下記のDHCPオプションセットを作成し、該当のVPCへ関連付けを実施した。
想定ではresolv.confが下記のようになっていればOK
nameserver 10.0.0.2
nameserver 8.8.8.8
nameserver 1.1.1.1
反映確認
タスクの再作成を実行し、再度確認する。
想定通りDHCPオプションセットの内容が反映されていることが分かる。
なおsearchがなくなってしまっているが、これはDHCPオプションセットのドメインに設定すれば記載される。
まとめ
- AWS公式ドキュメントに詳細な記載は見つけられなかったが、EC2インスタンスに限らずFargateもDHCPオプションセットの影響を受ける模様。
- 一時的には手動でresolv.confを変更すればよいが、タスクの入れ替わりが前提のECSにおいては永続的な方法であるDHCPオプションセットが良いと思う。