Closed6

EC2で動いてるdockerをそのままECS on EC2に載せ替える(また、その時詰まったエラー)

sun_yryrsun_yryr

前提

  • 全てのEC2は同一のVPC、サブネットに存在していて、それぞれにpublic ipも設定してある(コンソールで作成するデフォルトのまま)
  • alb -> target group(instance) -> EC2(API) -> EC2(DB) という流れ
  • dockerイメージはghcr.ioにある
sun_yryrsun_yryr

1. ECSクラスタの作成

  • コンソールからの操作
  • EC2 Linux + ネットワーキングで作成、VPCやサブネット、セキュリティグループは既存のEC2と同じものを選択する
  • 「パブリックIPの自動割り当て: 無効」
    ↑ これまずい
sun_yryrsun_yryr

パブリックIPの自動割り当てを無効にした結果、EC2が起動するがECSクラスタ側に認識されず、終了してもすぐ再起動するゾンビになった

パブリックIPの自動割り当てを有効にするか、nat gatewayを用意する必要があるみたい
後でソースを載せる

sun_yryrsun_yryr

2. タスク定義の作成

  • 空欄を埋めるだけ
  • ヘルスチェックにcurlコマンドを使って自分自身にアクセスするようにしてみた
  • ネットワークモードをawsvpcにしてみた
    ↑ どっちもダメ
sun_yryrsun_yryr

ヘルスチェック
書きたくなるけど、今回のイメージは縮小してあるのでバイナリ実行に必要なもの以外は存在していない。
つまりcurlはコマンドがなくてヘルスチェックに失敗する。
どこでヘルスチェックするんだよって思うかもしれないが、API系はtarget groupがやってくれるので空欄でOK

ネットワークモード
一応これ自体はawsvpcでもbridgeでも動く。
今回はtarget groupのタイプがinstanceなため、awsvpcだとサービスの更新ができない。

sun_yryrsun_yryr

3. サービスの起動

あとは2で作成したタスク定義を選んでデプロイするだけ
そのままtarget groupにも登録されて自動でアクセスできるようになるはず

このスクラップは2022/03/02にクローズされました