GithubActionsを初めて使ってみた!
というわけで記事に残します。
Dockerfileの作成
まずはアプリの元となるDockerfileを作成する。
詳細は割愛。よかったら、この記事を参考にしてみてね。
AWS側でやること
ECRリポジトリの作成
細かい設定は置いといて、とりあえずリポジトリ名だけ設定すればOK。
ECSクラスタの作成
ECSタスク定義の作成
高スペックである必要はないので。タスクサイズは最低限とした。
ECSサービスの定義
クラスター名をクリックすると、サービス定義の画面に遷移する。
ここで作成をクリック。
ファミリーに先ほど作成したタスク定義を指定する。
その他の設定はデフォルトのまま作成。
デプロイ用のIAMユーザーの作成
強力な権限を持ったユーザーでデプロイを行うのはよろしくないので、最低限の権限を与えたユーザーを作成する。
- ECSサービスへのアクセス権限
- タスク定義の登録と更新の権限
- ECRリポジトリへのプッシュとプルの権限
とりあえず、以下の権限をつけた。
ちょっと冗長かもしれないけど、FullAccessって書いてあるからECRとECSに関することは何でもできるでしょ。
権限周りは要勉強。
AmazonEC2ContainerRegistryFullAccess
AmazonECS_FullAccess
最後にアクセスキーを作成する。
IAM>ユーザー>ユーザー名にアクセスキー作成リンクがあるので、そこから作成。
アクセスキーは忘れても再発行出来ないので、CSVファイルをダウンロードして保存しておく。
Github側でやること
AWS認証情報の設定
AWS側で作成したアクセスキーをgithubに登録する。
これで、GithubActionsがAWSのリソースにアクセスできるようになる。
settingsタブ>ACtions>New repository secretをクリック。
Nameに環境変数の名前、Secretにアクセスキーの内容を入力して完了。
AWS_SECRET_ACCESS_KEYでも同様の作業を行う。
ワークフローファイルの作成
Githubのリポジトリにワークフローファイル(デプロイの設定ファイル)を作成。
.github/workflowsディレクトリにファイルがないとダメっぽい。
githubのActionタブから、ワークフローファイルの雛形が作成可能。
ワークフローファイルの修正
環境変数
-
AWS_REGION
ECRリポジトリを作ったリージョンを記載。私の場合は東京リージョンに作ったのでap-northeast-1 -
ECS_SERVICE、ECS_CLUSTER
先ほど作成した、ECSサービス、クラスタの名前を設定する。 -
ECS_TASK_DEFINITION
タスク定義はJSONファイルのパスで指定する必要がある。
JSONはタスク定義のJSONタブから取得可能。
JSONファイルはルートディレクトリに保存しておいた。GithubActionsでは、デフォルトでルートディレクトリを参照するらしい。
-
CONTAINER_NAME
タスク定義の中で設定したコンテナ名を指定する。
その他
必要に応じて、build時のDockerfileのパスを修正する。
GithubActionsはリポジトリのルートをカレントディレクトリとするようなので、ルートディレクトリにDockerfileがあれば以下の設定でOK。
docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .
いざデプロイ!
デフォルトの設定では、mainブランチにコミットをマージすればデプロイが始まるようになっている。
ということで早速コミット&マージ。
デプロイの進捗状況はActionsタブから確認できる。
私の簡易的なアプリでもデプロイに5分ぐらいかかるので、商用で使うんだったら課金しないと厳しそう。