🛠️

AWS ECS(Fargate)でgolang APIを動かす

2022/08/20に公開

目的

ECS(Fargate)の動作環境理解のためgolangのシンプルなAPIを動かすことで確認する。

ざっくりこんなイメージ

前提

  • 2022年8月現在の情報です。
  • AdministratorAccessを付与したIAMユーザーで作業しています。
  • 各種実行ロールは事前に作っている。(後ほど記事に追加する予定)

手順

Amazon ECRリポジトリの作成

リポジトリ名だけ指定して作成する。


ここで作成したリポジトリのURIは後ほどタスク定義作成時にコンテナを指定するために使用します。

「プッシュコマンドを表示」して順に実行していく

1.ログイン

aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com

2.ビルド

docker build -t go-gin-sample .

M1 mac の場合
docker build -t go-gin-sample --platform amd64 .

※M1 mac build詳細
https://docs.docker.com/desktop/mac/apple-silicon/

3.タグづけ

docker tag go-gin-sample:latest xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/go-gin-sample:latest

4.リポジトリにpush

docker push xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/go-gin-sample:latest

pushが終わるとイメージが作成されます。

ECSクラスターの作成

テンプレートはネットワーキングのみを選択する。

クラスター名のみを指定して作成を行う。

ECSタスク定義の作成

軌道タイプはFARGATEを指定する。

タスク定義名を指定する。
タスクロールとタスク実行ロールは事前に作成したものを指定しています。(後ほど記事にする予定)

今回タスクサイズはそれぞれ一番小さいものを指定しています。

ここでコンテナを追加します。

  • コンテナ名は任意で指定します。
  • イメージは先ほど作成したECR作成時に確認したURIを使用します。
    • タグを指定しない場合はlatestが付与されます。

      今回作成したgolang(gin)のAPIはデフォルトで 8080 ポートを使用するためポートマッピングではそちらを指定する。

サービスの作成

軌道タイプはFARGATE
その他これまで作成してきたリソースを割り当てる形でサービスを作成します。

本来、ALBなど経由でAPIにアクセスする場合が多いかと思います。
今回は確認ということでカスタムTCPとして8080ポートをインバウンドルールとして設定しました。

これで必要なリソースの準備はできています。

動作確認

$ curl http://54.199.186.45:8080/test
{"message":"test"}

サービス作成時に自動でIPが割り振られるため個別で確認し動作確認を行なってください。

まとめ

今回はECSの動作確認の備忘録として各リソースの作成から動作確認を行いました。
今後はこれをServerless frameworkやCodeBuildに乗せて実運用に近い形で整理したいと思います。

https://www.serverless.com/

https://aws.amazon.com/jp/codebuild/

Discussion