AWSのサービスを利用してCI/CDを構築する

こんにちは!弥生でWebサービスの運用開発をしたり、AWSの管理運用していたり、DBAをしていたりという何でも屋のイトーです。 皆様CI/CDを利用されているでしょうか? コンテナでアプリを構築する上で合わせて利用したいのがCI/CDの仕組みですよね。 今回は、AWSのサービスを利用してAWS上でサーバーレスでのCI/CDの仕組みについて紹介したいと思います。

CI/CDを利用することのメリット

はじめにCI/CDを利用することのメリットについて考えてみます。 下記のような内容がイメージしやすいでしょうか。

  • ビルド、リリース、デプロイ工数の圧縮(コスト削減)→アプリ開発に時間が使える
  • リリース時のヒューマンエラー削減(自動化による作業ミス削減)
  • 一定の品質担保(ビルド毎に単体テストの自動実行)
  • 脆弱性の検知(ビルド時にライブラリの脆弱性スキャン実行)
  • ビルド実行時の通知(アナウンスしなくてもわかる)

全体像

全体はこんな感じにしてみました。 今回は(せっかくなので)AWSのサービス以外も利用するようにして、ちょっと豪華な構成にしています。(AWSだけじゃないんかい!というツッコミはなしでお願いします)

全体像

それぞれのサービスについてはこの後少しだけ解説してきます。

github

言わずとしれたソースリポジトリ。ここを起点に全ては始まります! 今回はgithub上で、pull requestがMergeされたことをトリガーにしてCI/CDが動作するようにしています。

CodePipeline

CodePipelineは、CI/CDの各サービスを束ねてつなぐ役割を持っています。 今回はビルドからデプロイまでを、1トリガー(github pull request merge)で完了させたいのでCodePipelineを使いCodeシリーズを繋ぎます。 Pipelineは画像のような形でフローを作ることができます。

CodeCommit

CodeCommitはそれ自体がgitとして動かすこともできますが、今回はgithubへの接続を行うために利用します。 githubへの接続情報を設定して、Pullしてくる形になります。

CodeBuild

CodeBuildはその名の通り実際にビルドを行うサービスとなります。 CodeCommitでPullしてきたリソースをビルドします。 ビルド時に環境面の設定を細かく行う事ができ、自身で作成したDockerイメージをビルド時に使うこともできます。(カスタムイメージ)

カスタムイメージの作成はちょっと面倒なので、AWS提供イメージを使うのがオススメですが古いライブラリを使っていたり頻繁にビルドが発生し都度外部のリポジトリからライブラリを取得する場合には通信コストが馬鹿にならないので利用を検討すると良いです。

その他CodeBuildではビルド時に単体テストを実行し、テスト結果をレポート出力できる機能があります。

このような形でレポート出力することができ、単体テストの実行結果を可視化することもできます。

Yamoryなど外部サービスとの連携

さらにビルド時にYamoryなどの外部サービスの連携が行なえます。 今回の例ではビルド時にYamoryに連携し、Yamoryで脆弱性スキャンを行うように構築しています。 脆弱性スキャンをビルド時に行うことで、アプリケーションの脆弱性を発見・検知し万が一脆弱性が発見、公開された場合には即座に脆弱性に対して対応を行えるようにしています。 Yamoryについての詳細は今回は割愛します。

Yamoryについてはこちら

CodeDeploy

CodeDeployは(ビルドして作成したイメージを)サービスに反映する仕組みです。 自動でのデプロイを可能としBlue/Greenデプロイなど、デプロイ方法を選んで実施することができます。 コンテナ(ECS)の場合は新しいコンテナを立ち上げて、起動完了後にトラフィックを新しいほうに流すようにできるのでイメージしやすいですね!

Slack連携

それぞれのフェーズでSlackとも連携することが可能です。 ビルドの完了時やデプロイ完了時にSlackに通知を流すことで、ビルド・デプロイの完了を知ることができるのでチームメンバー全員がビルド・デプロイ状態を把握しやすくなります。 もちろんエラー発生時にもエラーとして通知が可能となっています。

まとめ

本記事では各サービスの細かい設定などは割愛しましたが、イメージ湧いたでしょうか? CI/CDの仕組みを導入する以前のサービス、アプリではリリースの度に準備が必要だったりしてかなり手間でリリースが億劫になっていましたが、 導入後は1Clickでそれが可能となりとても便利に感じています! そのおかげで頻繁なリリースもしやすく小さな改修→すぐリリース→小さな改修・・・と今までよりもスピード感を出して開発を行うことができるようになりました。 ぜひチャレンジしてみてもらえたらと思います!

一緒に働く仲間を募集しています!

弥生では一緒に働く仲間を募集しています!
弥生で働くことに興味がありましたら、求人一覧をぜひご覧ください。 herp.careers