Help us understand the problem. What is going on with this article?

AWS CodePipeline で始めるデプロイオートメーションの話

この記事はウィルゲート Advent Calender 2019 6 日目の記事です!
前回は @MayaGalaxy の「キーキャップの本を技術書典に出した話」でした。

はじめに

最近業務のことよりスノーボードのことが頭から離れない @int_sorarinu です。

WEB アプリケーションを各サーバ群にデプロイする手法というものは数え切れないほど沢山ありますが、今回は AWS の CodePipeline というツールを使ってデプロイを行ってみました。

AWS CodePipeline とは

AWS が提供している完全マネージド型の継続的デリバリーサービスで、定義したリリースモデルに基づき、コードチェンジがあった場合のフェーズの構築、テスト、デプロイを自動化してくれる優れたツールです。

詳しくは AWS 公式をご覧ください。
https://aws.amazon.com/jp/codepipeline/

パイプラインを構築する

今回は、 GitHub や Bitbucket などに組み込まれた CI ツールから S3 へ成果物を zip にしたものをアップロードした際にデプロイを行うといったことを想定してパイプラインを作っていきます。

ソースステージの構築

まずはじめに、「Source」ステージを作成し、その中でアクションを追加します。
アクションプロバイダーは S3 を選択し、CI がアップロードする先のバケットを選択して、成果物のファイル名を指定します。

検出オプションは Amazon CloudWatch Events を選択することで、 S3 にファイルがアップロードされたことを検知してパイプラインが自動で実行されるようになります。

スクリーンショット 2019-12-02 15.46.18.png

ビルドステージの構築

ビルドを実行するものがない、 CI でビルドしたものを S3 にアップロードしているなどの場合はこのステージは必要ありませんが、CodePipeline でビルドを実行する場合においてビルドステージを構築する必要があります。

こちらも、「Build」ステージを作成して、その中でアクションを追加していきます。
今回はアクションプロバイダーを CodeBuild にしていますが、 Jenkins を指定することもできます。

CodeBuild にビルドプロジェクトを作成していない場合は、「プロジェクトを作成する」リンクから先にビルドプロジェクトを作成しましょう。

スクリーンショット 2019-12-02 15.48.09.png

デプロイステージの構築

ここでは「Deploy」ステージを作成してデプロイ用のアクションを追加します。
アクションプロバイダーも豊富で、 CodeDeploy だけではなく、 S3 だったり CloudFormation だったりを指定することができます。
S3 ホスティングを利用して静的ファイルを配信している場合などはアクションプロバイダーを S3 にしてあげて、「デプロイする前にファイルを抽出する」オプションを有効にすることで該当の S3 バケットへ展開されます。

CodeDeploy で各サーバへデプロイを行うのであれば、先に CodeDeploy のアプリケーションを用意してから設定してあげましょう。

スクリーンショット 2019-12-02 15.45.30.png

Slack 通知の設定

せっかくパイプラインを構築しても実際に実行されているか不安ですよね。
でもわざわざ AWS のコンパネから確認する訳にもいかないので Slack へ状況を通知したいと思います。

AWS Chatbot のベータ版が最近リリースされたのでそれを利用して通知するようにしてみましょう。

CodePipeline 側の設定

構築したパイプラインの上部から、「通知」→「通知ルールの作成」を選択します。

スクリーンショット 2019-12-02 15.57.15.png

通知ルールを設定する画面に切り替わるので、通知名に適当な名前を入力します。
通知をトリガーするイベントは適宜必要なものを選択しておきましょう。

パイプラインが動作したかどうかだけ分かれば良いのであれば、「Pipeline execution」の項目をチェック。
スクリーンショット 2019-12-02 16.06.10.png

トリガーの設定ができたら SNS トピックを作成して「Amazon SNS トピック ARN」にセットすれば CodePipeline 側の設定は完了です。
スクリーンショット 2019-12-02 16.08.56.png

AWS Chatbot 側の設定

AWS Chatbot の「Configure a chat client」から Slack を選択し、「Configure client」をクリックすると、 Slack へアクセス許可を行う画面に遷移するので許可してあげましょう。

スクリーンショット 2019-12-02 16.10.49.png

スクリーンショット 2019-12-02 16.13.22.png

あとはどのチャンネルに通知するか、AWS Chatbot のパーミッション、どの SNS トピックをトリガーにするかなどの簡単な設定をしてあげれば完了です。

image.png

これで CodePipeline のパイプラインが実行、成功、失敗などのアクションを起こすたびに Slack へ通知されるようになります。

スクリーンショット 2019-12-02 16.17.16.png

デプロイされるか確認する

手動や CI で zip ファイルを S3 にアップロードした際に CodePipeline のパイプラインが動き始めるか確認しましょう。
問題なく設定されていれば新鮮なアプリケーションが各サーバへデプロイされているはずです。

終わりに

今回は CodePipeline を利用してアプリケーションをデプロイする方法を紹介しました。

弊社ではこれまで Capistrano などを利用したデプロイが主流だったのですが、最近では各サービスのデプロイで CodePipeline を利用することが増えてきました。

Capistrano 時代はデプロイ用のサーバへ SSH 接続してコマンドを実行していたのに対し、CodePipeline でデプロイを自動化することで心理的な障壁が取り除けたりとみんなハッピーになれたように感じます。

まだ一部 Capistrano で手動デプロイしているところもあるので、今後どんどん自動化していきたいなという気持ちでいっぱいです。

明日は @ryota_hnk の「Rancher on Oracle Cloud」です!
お楽しみに!!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away