ecs-deployでECSにアプリをCIからデプロイする〜その③〜

こんにちわ、まつしん(@matsushin11)です。

前回の記事ではECS環境を構築してアプリが動かすところまで行いました。

ecs-deployでECSにアプリをCIからデプロイする〜その②〜

2019年5月15日

この記事では前回の続きとしてCI実行時にecs-deployを用いてECSにデプロイする仕組みを作ります。

今回が自動デプロイ環境構築の最後の記事となります。

最終的に完成したリポジトリはこちらです。

本記事でやること

CircleCIecs-deployを利用して自動デプロイ環境を作ります。

これによって、GitHubのPRがマージされてCIでテストが通ったタイミングで自動デプロイするというフローができます。

Circle CIの設定

 まずはCircleCIとリポジトリを連携させましょう。

CircleCIにログインしてサイドメニューで「ADD PROJECTS」から今回作成したリポジトリから「Set Up Project」を押下。

Add Projects CircleCI

次の画面でLanguageで「Go」を選択して「Start Building」で連携完了です。

Add Projects CircleCI

次にCIからECRやECSを利用できるようにIAM Userを作成して利用できるようにしていきます。

AWSマネジメントコンソールにログインしてIAMのユーザ登録画面へ。

ユーザ名を入力してアクセスの種類はプログラムによるアクセスにチェックして次のステップへ。

IAM Management Console

アクセス許可の設定では既存のポリシーを直接アタッチを選択して「AmazonEC2ContainerRegistryFullAccess」と「AmazonEC2ContainerServiceFullAccess」の2つを許可する。

IAM Management Console

そのままユーザの作成を完了させる。

次に作成したIAMユーザ情報をCI側で環境変数として設定しておきましょう。

プロジェクトのSettings の「Environment Variables」を選択して「AWS_ACCOUNT_ID」「AWS_ACCESS_KEY_ID」「AWS_SECRET_ACCESS_KEY」をそれぞれ登録。

Project settings Matsushin go ecs deploy CircleCI

登録できたら次にCIが実行時の内容を決めます。今回は以下のようにしてファイルを作成しました。

.circle_ci/config.yml

ジョブをテストとデプロイの2つに分けて、テストが通ったらデプロイが実行されるという流れです。

デプロイの動きとしてはDockerイメージを作成してタグ付けしています。そして最後に deploy.sh を実行しているのですが、この内容については次に説明していきます。

デプロイの仕組みを構築

いよいよ最後にデプロイの仕組みを作ります。

ecs-deployファイルの設置

ECSにデプロイするためにecs-deployを利用します。

こちらのファイルの内容をコピーして scripts/ecs-deploy ファイルを作成して貼り付けます。

念の為CIから実行できるようにファイルの権限を 755 にしておきます。

deploy.shファイルの設置

最後にecs-deployを利用するためのシェル実行ファイルを作成します。

deploy.sh

オプションに以下を指定するようにしてecs-deployを実行します。

  • —cluster  … ECSで登録したクラスタ名
  • —service-name … ECSで登録したサービス名
  • —image … ECRのリポジトリのURI

以上で、完成です!動作確認していきましょう!!

動作確認

まずはコードを変更したことがわかるように「Deploy succeeded.」と表示されるように変更して master ブランチでコミット・プッシュします。

数分待ってWORKFLOWS画面がSUCCEEDEDとなればデプロイ完了です。

CircleCI CircleCI

デプロイが完了したことをコマンドを実行して確認します。

以下のように前回の記事で利用したエンドポイントで下記のような表示がされればOK!

これで自動デプロイが実行されたことが確認できました!!!

まとめ

ここまで長い道のりでした。

自動デプロイを実現するまでにAWSのECS、ECRさらにはDocker、CircleCIの設定方法とインフラに関して多くの知識が必要になります。

しかし、コードを書いて実装するだけでなくチームの開発効率を上げるための仕組み作りができるとプログラマとしての価値が上がるのではないかと思います。また自分で作れなくても構成がどうなっているとか知っているだけでも価値はあると考えています。

なので今回は自分にとってはかなり良い学びとなっています。

ecs-deployでECSにアプリをCIからデプロイする〜その②〜

2019年5月15日

ecs-deployでECSにアプリをCIからデプロイする〜その①〜

2019年5月10日

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です