ECS+Fargateでコンテナを起動する際、ECRにアクセスできない現象の解決方法


現象

ECSをlanchType、Fargateにて構築した際に躓いた点がありましたので共有します。
Serviceを構築してECRからイメージを取得してTaskを立ち上げようとしたら
ステータスがpendingから進まない現象が発生した。
最終的にステータスがstopになりイベントの詳細をみるとECRのアクセスがtimeout
で失敗していた。

原因

ECRのアクセスに失敗しているようだったのでIAMRoleに対してPolicyのアタッチが
漏れているかと思ったがそうではなかった。
ECRからTaskを起動させる際HTTP経由で外から通信してImageを取得するとのことで、
Serviceのネットワーク構成で指定したサブネットから外に通信ができないのが原因だった。

解決方法

解決策1

起動Taskをパブリックサブネットに配置して直接InternetGateWay経由で外に
アクセスしてECRからイメージを取得する方法。
注意点としてはSerivceを構築する際に「パブリックIPの自動割り当て」を
「Enable」にして起動TaskにパブリックIPを割り振る必要がある。
後Taskを再度デプロイした場合はパブリックIPは変更されてしまう。

解決策2

起動Taskをプライベートサブネットに配置して、NatGateWay経由でInternetGateWayから
外にアクセスしてECRからイメージを取得する方法。
この方法なら外にでるIPはNatGateWayで固定される。

まとめ

私の場合は最初から解決策2で構築していたのですがNatGateWayの構築に不備があり、
外に出れることができず発生しておりました。。
設定を直して無事策2で解決することができました。
因みにLunchTypeをEC2にした場合「パブリックIPの自動割り当て」Enableに
できないらしいので解決策2を必然的にとる必要がありそうです。