ECSでAPI(Go)の環境を構築する

Goで作ったAPIをECSで構築してみたので手順、設定など大まかに紹介します。

目指す構成はこのようなかんじです。

ポイントは

  • 起動タイプはFargateを使用
  • ECRにPushしたDockerイメージを使用して構築
  • ALBを使用してhttp://api/から始まるURLをルーティング
  • コンテナは8080ポートを使用

Dockerfileを作成

詳しくは書きませんが、マルチステージビルドで開発用と本番用のイメージを作成しています。
本番用のイメージは軽量化のため、Alpineに開発用イメージからビルドしたファイルをコピーします。
curlをインストールしているのはECSのヘルスチェックで使用するためです。

ECRにpush

Dockerfileから作ったイメージをECRにpushします。
手順は省略します。

タスク定義を作成

起動タイプにFargateを選択してタスクの定義を登録します。
続いてポイントとなる入力です。

イメージ:ECRのリポジトリ
ポート:コンテナのポート

ヘルスチェックで使用するコマンドを指定します。
コンテナ内で実施されるためホスト名はlocalhostで大丈夫です。
パスはステータスコード200が返るURLであれば問題ありません。今回はヘルスチェック専用の/checkを用意しました。

クラスターを作成

テンプレートはFargate対応のものを使用します。
ネットワーキングの設定のみで特に複雑なことはないです。

サービスを作成

作成したクラスターの下でサービスを作成します。

タスク定義(ファミリー):作成したタスク定義を指定
タスク定義(リビジョン):タスク定義のリビジョン番号
クラスター:作成したクラスター
タスクの数:タスクの実行数、あとでタスクを停止するには0を指定してサービスを更新する必要があります。

パス名からコンテナへロードバランシングするためALBを使用します。
ALBの設定は後述します。

ALBを作成

このようにワイルドカードを指定したパスと転送先をルールに設定するとパスによるルーティングができます。

ざっくりですが、このような流れで環境構築ができます。

最後に全体のネットワークの詳細を載せておきます。RDSも加えています。