Steps
- NLBの構築
- ECSのサービスの構築
- API Gatewayの構築
- API Gateway → NLBのつなぎこみ
- 動作確認
0. 下ごしらえ
プライベートサブネットとセキュリティグループはあらかじめ準備しておきます。
(私自身がVPCに疎いので、ここで 1. NATをIGWがルーティングされていないSubnetに配置 2. ECSのセキュリティグループのInboundのソースをセキュリテイグループに指定 というミスをしました)
1. NLBの構築
ポイント: 気が抜けてるとデフォルトのVPCでLB作成してしまいがち。VPC間違えるとECSとつなぎこむ時に作り直しで時間ロスします。
発見。ターゲットグループを構築するときは、IPアドレスをとBeRegisteredにしておける。
2. ECSのサービスの構築
こういうちょっとしたテストの時に便利なnginx。
注意点として、デプロイ先のSubnetがOutboundの通信を許可している(Dockerイメージを引っ張れる)必要がある。
(私はここでNat Gatewayをprivate subnetに置いていることに気がつくこともしばしば...)
ポイント:
ポイント: TaskがいつまでたってもPENDINGに見えるときは、Stoppedのタスクを開いて原因調査すべし。
- よく目にするエラー:
CannotPullContainerError: API error (500): Get https://111122223333.dkr.ecr.us-east-1.amazonaws.com/v2/: net/http: request canceled while waiting for connection"
ポイント: この時点でTargetGroupのヘルスチェック結果を確認すること。
よく目にするエラー: None of these Availability Zones contains a healthy target. Requests are being routed to all targets.
対応:
- まずリクエストが到達しているか?(ECSのサービス起動時に指定したセキュリティグループを確認)
- ECS側はサービスが起動しているか?(CloudWatchのログを確認する)
- TargetGroupのヘルスチェックで指定されているポートはコンテナにマッピングされているか?サービスの利用しているポートはあっているか?
3. API Gatewayの構築
ポイント: VPCリンクを作成する。ログインしているユーザーに複数の権限が必要(VPCエンドポイントの作成更新削除・アクセス許可の変更)
体感で5分以上かかります。
ポイント:APIメソッドには統合タイプと接続タイプの2種類の概念がある。
しかし、コンソールだと本当に分かりづらい....
デプロイをすれば完成です!