0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Github Actions+ECR+ECSでアプリケーションをデプロイ

Last updated at Posted at 2023-12-03

GithubActionsを初めて使ってみた!
というわけで記事に残します。

Dockerfileの作成

まずはアプリの元となるDockerfileを作成する。
詳細は割愛。よかったら、この記事を参考にしてみてね。

AWS側でやること

ECRリポジトリの作成

AWSのコンソールからリポジトリを作成する。
スクリーンショット 0005-12-02 19.57.36.png

細かい設定は置いといて、とりあえずリポジトリ名だけ設定すればOK。
スクリーンショット 0005-12-02 15.09.54.png

ECSクラスタの作成

ECSクラスタを作成。今回はFargateを選択。
スクリーンショット 0005-12-02 20.13.03.png

ECSタスク定義の作成

ECS>タスク定義>タスク定義作成ボタンをクリック・
スクリーンショット 0005-12-02 20.49.17.png

タスク定義ファミリー名を任意の値に変更。
スクリーンショット 0005-12-02 20.56.36.png

高スペックである必要はないので。タスクサイズは最低限とした。
スクリーンショット 0005-12-02 20.56.45.png

ECSサービスの定義

クラスター名をクリックすると、サービス定義の画面に遷移する。
ここで作成をクリック。
スクリーンショット 0005-12-02 20.21.03.png

ファミリーに先ほど作成したタスク定義を指定する。
その他の設定はデフォルトのまま作成。
スクリーンショット 0005-12-02 21.03.47.png

デプロイ用のIAMユーザーの作成

強力な権限を持ったユーザーでデプロイを行うのはよろしくないので、最低限の権限を与えたユーザーを作成する。

  • ECSサービスへのアクセス権限
  • タスク定義の登録と更新の権限
  • ECRリポジトリへのプッシュとプルの権限

とりあえず、以下の権限をつけた。
ちょっと冗長かもしれないけど、FullAccessって書いてあるからECRとECSに関することは何でもできるでしょ。
権限周りは要勉強。
AmazonEC2ContainerRegistryFullAccess
AmazonECS_FullAccess
スクリーンショット 0005-12-02 22.30.05.png

最後にアクセスキーを作成する。
IAM>ユーザー>ユーザー名にアクセスキー作成リンクがあるので、そこから作成。
スクリーンショット 0005-12-02 22.33.35.png

アクセスキーは忘れても再発行出来ないので、CSVファイルをダウンロードして保存しておく。
スクリーンショット 0005-12-02 23.13.39.png

Github側でやること

AWS認証情報の設定

AWS側で作成したアクセスキーをgithubに登録する。
これで、GithubActionsがAWSのリソースにアクセスできるようになる。
settingsタブ>ACtions>New repository secretをクリック。
スクリーンショット 0005-12-02 23.22.40.png

Nameに環境変数の名前、Secretにアクセスキーの内容を入力して完了。
AWS_SECRET_ACCESS_KEYでも同様の作業を行う。
スクリーンショット 0005-12-02 23.26.44.png

ワークフローファイルの作成

Githubのリポジトリにワークフローファイル(デプロイの設定ファイル)を作成。
.github/workflowsディレクトリにファイルがないとダメっぽい。
githubのActionタブから、ワークフローファイルの雛形が作成可能。
スクリーンショット 0005-12-02 19.09.51.png
スクリーンショット 0005-12-02 19.14.10.png

ワークフローファイルの修正

環境変数

  1. AWS_REGION
    ECRリポジトリを作ったリージョンを記載。私の場合は東京リージョンに作ったのでap-northeast-1

  2. ECR_REPOSITORY
    GithubActionでイメージをプッシュするECRリポジトリを設定。
    スクリーンショット 0005-12-02 19.54.40.png

  3. ECS_SERVICE、ECS_CLUSTER
    先ほど作成した、ECSサービス、クラスタの名前を設定する。

  4. ECS_TASK_DEFINITION
    タスク定義はJSONファイルのパスで指定する必要がある。
    JSONはタスク定義のJSONタブから取得可能。
    JSONファイルはルートディレクトリに保存しておいた。GithubActionsでは、デフォルトでルートディレクトリを参照するらしい。
    スクリーンショット 0005-12-02 22.01.32.png

  5. CONTAINER_NAME
    タスク定義の中で設定したコンテナ名を指定する。

その他

必要に応じて、build時のDockerfileのパスを修正する。
GithubActionsはリポジトリのルートをカレントディレクトリとするようなので、ルートディレクトリにDockerfileがあれば以下の設定でOK。

docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .

いざデプロイ!

デフォルトの設定では、mainブランチにコミットをマージすればデプロイが始まるようになっている。
ということで早速コミット&マージ。
デプロイの進捗状況はActionsタブから確認できる。
私の簡易的なアプリでもデプロイに5分ぐらいかかるので、商用で使うんだったら課金しないと厳しそう。
スクリーンショット 0005-12-03 20.04.33.png

ブラウザで稼働確認も無事終了。(東京の気温と天気を表示しているだけ)
スクリーンショット 0005-12-03 20.35.08.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?