GitHub ActionsからサクッとFargateにデプロイしてみた
REALFORCEのMacテンキーレス版、US配列(!)が2019/12/12より発売するとのことで、首を長くして待っているもこ@札幌オフィスです。
つい先月GitHub ActionsがGAし、GitHub単体でお手軽にCI/CDができるようになっています。
あまり触れられていない気がしますが、AWS公式からもGitHub Actionsをいい感じに使えるテンプレートが公開されていますので、今回はこのテンプレートを使ってFargate環境にデプロイして行こうと思います!
Amazon Elastic Container Service で複数の GitHub Actions が公開
テンプレートから作成していく
早速やっていきましょう。
リポジトリ > Actions からDeploy to Amazon ECSを選択します。
こんな感じでテンプレートが作られるので、右上からMasterブランチにコミットしていきましょう。
リポジトリをcloneしてきましたら、生成されたaws.ymlを開きます。
今回は東京リージョンのECSクラスターにデプロイしたいため、デフォルトではus-east-2となっているリージョン設を、東京リージョン(ap-northeast-1)に変更します。
お次はSecretsの設定です。
GitHub上にAWSのIAM Userの認証情報を設定します。
デプロイに使うIAM UserにはECRとECS周りの権限が必要なので、GitHub Actions用に払い出しましょう。
設定が終わったらActionsから「Re-run checks」で再実行してあげましょう。
とりあえず「Login to Amazon ECR」まで進んでればOKです。
テスト用のDockerfile / taskDefinitionを用意する
何はともあれDockerfileが無いと始まりません。
ひとまずリポジトリディレクトリ直下にNginxコンテナのDockerfileを作りました。
FROM nginx:mainline-alpine
ローカルで実行して正常に動作することを確認します。
docker build -t test-nginx. && docker run -p 8080:80 test-nginx
ECRの作成
ECRのリポジトリを作っていきます。
今回は githubactions-nginx
としました。
taskDefinitionの作成
次はtaskDefinitionです。
環境によって違うとは思いますので都度更新が必要ですが、こんな感じのを作ります。
image
は置き換わるため、適当で大丈夫です。
{ "family": "nginx", "networkMode": "awsvpc", "containerDefinitions": [ { "name": "nginx", "image": "nginx", "portMappings": [ { "containerPort": 80, "hostPort": 80, "protocol": "tcp" } ], "essential": true } ], "requiresCompatibilities": [ "FARGATE" ], "executionRoleArn": "ecsTaskExecutionRole", "cpu": "256", "memory": "512" }
task-definition.json
として保存します。
※このテンプレートはネットワークモードが「awsvpc」しか対応していない点にご注意ください!
ネットワークモードの詳細については下記にて詳しくご紹介されているので、合わせてご確認ください。
GitHub Actions Workflowの更新
最後にGitHub ActionsのWorkflowを修正していきます。
ECR_REPOSITORY
を先ほど作成したECRのリポジトリ名に変更、 container-name
, service
, cluster
を実際の環境と合わせて設定します。
最終的な差分はこんな感じになりました。
動作確認
デプロイが終わるとこんな感じでオールグリーンになります。
ECSの画面からTaskが正常にRUNNINGになっていることを確認できます!
ALBのエンドポイントを叩いてみて、正常にWelcome to nginx!が帰ってくることを確認します!
まとめ
AWS公式で公開されてるGitHub Actionsのテンプレートを利用することで簡単にコンテナをデプロイすることができました!
GitHub ActionsではもちろんAWS CLI / ECS CLIをインストールしてコンテナをビルド、ECS CLIでデプロイをするようなスクリプトを流すこともできますが、AWSが提供してくれているテンプレートを利用すると圧倒的楽に作ることができました!
検証したリポジトリはこちらで公開しているので、ぜひご参照ください!
https://github.com/mokonist/ecs-deploy-githubaction
以上、もこでしたー。