Closed6
EC2で動いてるdockerをそのままECS on EC2に載せ替える(また、その時詰まったエラー)
前提
- 全てのEC2は同一のVPC、サブネットに存在していて、それぞれにpublic ipも設定してある(コンソールで作成するデフォルトのまま)
- alb -> target group(instance) -> EC2(API) -> EC2(DB) という流れ
- dockerイメージはghcr.ioにある
1. ECSクラスタの作成
- コンソールからの操作
- EC2 Linux + ネットワーキングで作成、VPCやサブネット、セキュリティグループは既存のEC2と同じものを選択する
- 「パブリックIPの自動割り当て: 無効」
↑ これまずい
パブリックIPの自動割り当てを無効にした結果、EC2が起動するがECSクラスタ側に認識されず、終了してもすぐ再起動するゾンビになった
パブリックIPの自動割り当てを有効にするか、nat gatewayを用意する必要があるみたい
後でソースを載せる
2. タスク定義の作成
- 空欄を埋めるだけ
- ヘルスチェックにcurlコマンドを使って自分自身にアクセスするようにしてみた
- ネットワークモードをawsvpcにしてみた
↑ どっちもダメ
ヘルスチェック
書きたくなるけど、今回のイメージは縮小してあるのでバイナリ実行に必要なもの以外は存在していない。
つまりcurlはコマンドがなくてヘルスチェックに失敗する。
どこでヘルスチェックするんだよって思うかもしれないが、API系はtarget groupがやってくれるので空欄でOK
ネットワークモード
一応これ自体はawsvpcでもbridgeでも動く。
今回はtarget groupのタイプがinstanceなため、awsvpcだとサービスの更新ができない。
3. サービスの起動
あとは2で作成したタスク定義を選んでデプロイするだけ
そのままtarget groupにも登録されて自動でアクセスできるようになるはず
このスクラップは2022/03/02にクローズされました