• 投稿者:
  • 投稿コメント:0件のコメント
  • 投稿カテゴリー:AWS
  • 投稿の最終変更日:2024年2月1日

やりたいこと

ECSクラスターのコンテナインスタンスにEC2インスタンスをアタッチする ECSonEC2やEC2onECSでも同様です。

EC2インスタンスの設定

ECSクラスターはすでに作ってあるという前提で話を進める。
クラスターにアタッチするために、インスタンスにはいくつか設定が必要だ。

この記事の概要
  1. 1. IAMロールは、ecsInstanceRoleにする。
  2. 2. ECSコンテナエージェントをインストールする。
  3. 3. コンフィグファイル等を設定する。
  4. 4. コンフィグの変更を適応する
  5. これで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インスタンスのところに、アタッチされたインスタンスが表示されるはずだ。

コメントを残す