0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Posted at

はじめに

最近、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インスタンスのリソース状況も確認する。

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?