eviry tech & service blog

「株式会社エビリー」の社員ブログです。弊社では、クラウド型動画配信サービス「millvi」、ソーシャル動画データ及び分析サービス「kamui tracker」、YouTube総合メディア「かむなび」を開発・提供しています。https://eviry.com/

AWS CodePipelineでデプロイ自動化

これは旧eviry tech blogから移行した記事です。

全人類の皆さま、お世話になっております、エンジニアのharutaです。

この記事ではCodePipelineなどを使ったデプロイ自動化について記述します。

目的

ブログの記事投稿から公開までを自動化したい!! 余計なサーバ置きたくない!! WordPressは勘弁!!

前提

本ブログはhugoにより記事のマークダウンファイル群と設定ファイル群からブログの静的htmlを生成しています。

開設当初の運用方法だとgitにファイル群を置いて、投稿者がgitからファイルを持ってきて新しい投稿を作成し、S3にアップロードするというものでした。しかしこの方法だと以下のような問題があります。

  • そもそも投稿者の負担が大きい
  • 全体の整合性のためにgit pushが必要
  • 投稿とgit pushが一連の流れにいない(操作が独立)

ということでこれの解決にCodePipelineやらを使いましょうというお話。

実装

どうやったのかのお話。

静的ファイルを生成してS3でホスティングしているのでデプロイのために余計な管理する必要があるサーバは増やしたくないというのがあったため、AWSのCodePipelineを使用することにしました。

CodePipeline - AWS ドキュメント

CodePipelineでパイプライン作っただけでは何も始まりません。当然ですね。

パイプラインが実行されるためのトリガーと実際のビルド処理(コマンドスクリプト)を設定する必要があります。今回は以下のようにしました。

  • トリガー:CodeCommitのプッシュ
  • ビルド:CodeBuild

(本当はS3へのputをトリガーにしたかったけど丸々zipにしたものしか受け付けてくれないらしいので断念)

最終的には上記の画像のように設定しました。

  • Source:CodeCommitへのプッシュ
  • Build:ステージング環境へのデプロイ
  • Check:メールでパイプライン処理を継続するかの承認・拒否を管理者に要請
  • Build_pro:本番環境へのデプロイ

これで当初問題になっていた”独立したgit push”が投稿操作として一連の流れに組み込まれた。ここからさらにgit push、マークダウンのリアルタイム変換、画像アップロード機能を有した投稿システムなんかをWEBで作るといい感じにCMSっぽくなる(実際既に作ってあるのでそれは別記事に)

ちなみにCheckをはさんでいるのはステージングで諸々確認するため。デザイン崩れとかタイポとか極めて差別的な発言がないかとか政治的に極端に右か左に寄った発言がないかとか...