やりたいこと
ECSクラスターのコンテナインスタンスにEC2インスタンスをアタッチする ECSonEC2やEC2onECSでも同様です。
EC2インスタンスの設定
ECSクラスターはすでに作ってあるという前提で話を進める。
クラスターにアタッチするために、インスタンスにはいくつか設定が必要だ。
- 1. IAMロールは、
ecsInstanceRole
にする。 - 2. ECSコンテナエージェントをインストールする。
- 3. コンフィグファイル等を設定する。
- 4. コンフィグの変更を適応する
- これでOK
1. IAMロールは、ecsInstanceRole
にする。
起動時にロールの設定項目がある.ecsInstanceRole
が存在しない場合は、公式を参考に自分で作成する。
- AmazonEC2ContainerServiceforEC2Role
- AmazonSSMFullAccess
上記などが必要
2. ECSコンテナエージェントをインストールする。
Amazon ECS コンテナエージェントをインストールする
Amazon ECS コンテナエージェントをインストールする
インスタンス起動後にsshして、GitHubから入手できる。
手順2を省略する方法
インスタンスのAMIをAmazon ECS-Optimized Amazon Linux 2 AMIに設定すれば、手順2は不要。
3. コンフィグファイル等を設定する。
手順1、2を踏んだ上でインスタンスを作成すると、インスタンスは、aws側が自動で生成するdefault
という名前のクラスターに自動的にアタッチされる。自分で作成したクラスターにアタッチするには、インスタンスのコンフィグを書き換えなければならない。
インスタンスにsshして、/etc/ecs/ecs.config
を編集する。
/etc/ecs/ecs.config
ECS_CLUSTER=YOUR_CLUSTER_NAME
YOUR_CLUSTER_NAME
は、アタッチしたいクラスターの名前にする。
4. コンフィグの変更を適応する
インスタンスのログは、/var/log/ecs/ecs-agent.log
にあるのだが、そこを見ると
[ERROR] Unable to register as a container instance with ECS: ClientException: Cluster not found.
や
[CRITICAL] Data mismatch; saved cluster 'default' does not match configured cluster 'YOUR_CLUSTER_NAME'. Perhaps you want to delete the configured checkpoint file?
と出力される。セーブされてるクラスターとコンフィグのクラスターが一致してないよー
と書いてある。
要するに、先程コンフィグに書いたクラスター名は、まだインスタンス上ではセーブされていないということ。
ということで、rm /var/lib/ecs/data/*
でチェックポイントファイルの削除を行う。
チェックポイントファイルは、インスタンスの起動時に自動で生成されるので、削除して問題ない。
削除をした後は、忘れずにインスタンスの再起動か
systemctl restart ecs
などサービスrestartを行うこと。
これでOK
以上の設定をすれば、クラスターはECSインスタンスと自動でつながる。
クラスターのコンソールのECSインスタンスのところに、アタッチされたインスタンスが表示されるはずだ。