AWS
EC2
インスタンス
ECS

ECSクラスターにEC2インスタンスをアタッチする


やりたいこと

ECSクラスターを作った後、追加でEC2インスタンスをアタッチしたい。


EC2インスタンスの設定

ECSクラスターはすでに作ってあるという前提で話を進める。

クラスターにアタッチするために、インスタンスにはいくつか設定が必要だ。


1. IAMロールは、ecsInstanceRoleにする。

起動時にロールの設定項目がある.

ecsInstanceRoleが存在しない場合は、公式を参考に自分で作成する。


2. 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.timestampにあるのだが、そこを見ると

[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/* でチェックポイントファイルの削除を行う。

チェックポイントファイルは、インスタンスの起動時に自動で生成されるので、削除して問題ない。

削除をした後は、忘れずにインスタンスの再起動を行うこと。


これでOK

以上の設定をすれば、クラスターはECSインスタンスと自動でつながる。

クラスターのコンソールのECSインスタンスのところに、アタッチされたインスタンスが表示されるはずだ。