loader image

【AWS】EC2タイプのECSが起動しなかった時の解決方法

はじめに

最近、AWS ECS (Elastic Container Service) でEC2タイプのコンテナがなかなか起動しない事象発生。最終的に原因はEC2インスタンスのリソース不足だったのですが、そこに至るまで様々な確認を行ったので、今後のためにも、同じような問題に遭遇した方の助けになればと思い、解決までの道のりをまとめました。

発生した問題

ECSクラスタにコンテナインスタンスを登録しようとしたところ、いつまで経っても登録されず、タスクをデプロイできませんでした。

調査の開始 – まずはログから

EC2インスタンスにSSH接続し、ECSエージェントのログ (/var/log/ecs/ecs-agent.log) を確認しました。

level=error time=... msg="Error getting ECS instance credentials from default chain: NoCredentialProviders: no valid providers in chain. Deprecated."

このエラーから、当初はIAMロールの設定に問題があると考えました。

確認したこと

1. IAMロールの設定

  • IAMロールのアタッチ: EC2インスタンスに正しいIAMロール (AmazonEC2ContainerServiceforEC2Role など) がアタッチされているか確認。
  • 信頼関係の設定: IAMロールの信頼関係で、EC2インスタンスがロールを引き受けることが許可されているか確認。
  • 必要なポリシーのアタッチ: IAMロールに AmazonEC2ContainerServiceforEC2RoleAmazonSSMManagedInstanceCore (SSMエージェント利用時) などの必要なポリシーがアタッチされているか確認。

2. ネットワーク設定

  • セキュリティグループ: EC2インスタンスのセキュリティグループのアウトバウンドルールで、HTTPS (443) が許可されているか確認。特に、以下のエンドポイントへのアクセスを許可しているか確認。
    • ECS エンドポイント
    • STS エンドポイント
    • ECR エンドポイント (コンテナイメージをプルする場合)
    • S3 エンドポイント (SSMエージェントなどをダウンロードする場合)
  • NAT Gateway: プライベートサブネットにEC2インスタンスを配置している場合、NAT Gateway が正しく設定され、ルートテーブルも適切に設定されているか確認。
  • VPCエンドポイント: ECS関連のVPCエンドポイント (存在する場合) の設定とセキュリティグループを確認。

3. ECSエージェントの状態

sudo systemctl status ecs

でECSエージェントの状態を確認。inactive (dead) になっている場合は、以下のコマンドで再起動を試みる。

sudo systemctl restart ecs

ログ (/var/log/ecs/ecs-agent.log) を確認し、エラーがないか確認。

4. ECS設定ファイル

/etc/ecs/ecs.config を確認し、ECS_CLUSTER の設定が正しいか確認。

5. cloud-initのログ

/var/log/cloud-init-output.log を確認し、EC2インスタンス起動時の初期化処理でエラーが発生していないか確認。user_data スクリプトの実行結果などをチェック。

意外な落とし穴 – EC2インスタンスのリソース不足

上記の設定を何度も見直しましたが、問題は見つかりませんでした。ふと、EC2インスタンスのCPU使用率やメモリ使用率を確認したところ、ほぼ100%で張り付いている状態でした。

今回利用していたインスタンスタイプは t2.small でしたが、ECSエージェントやその他必要なプロセスを起動するにはリソースが不足していたようです。

解決策

EC2インスタンスのインスタンスタイプを、よりリソースの大きいもの (t3.large など) に変更したところ、ECSエージェントは正常に起動し、コンテナインスタンスとしてクラスタに登録されました。

まとめと教訓

ECSコンテナインスタンスが起動しない場合、IAMロールやネットワーク設定に目が行きがちですが、EC2インスタンス自体のリソースも重要な要素であることを痛感しました。

今回の経験から、以下の点を意識することが重要だと学びました。

  • ログは詳細に確認する: エラーメッセージだけでなく、その前後のログも確認することで、問題の切り分けにつながることがある。
  • 基本的な設定の確認は怠らない: IAMロール、ネットワーク設定、ECSエージェントの状態など、基本的な設定に誤りがないか丁寧に確認する。
  • リソース状況も考慮する: 特に初期構築時や、インスタンスタイプを変更した際には、EC2インスタンスのリソース状況も確認する。

今回の問題解決には時間がかかってしまいましたが、得られた知識は今後の運用に必ず役立つはずです。同じような問題で困っている方の参考になれば幸いです。

コメント

タイトルとURLをコピーしました