AWS
CloudFormation
CodePipeline
CodeBuild

CodePipelineで作る変更管理パイプライン

More than 1 year has passed since last update.

この記事は「Opt Technologies Advent Calendar 2017」2日目となります。

はじめに

こんにちは、mshibuyaです。
今回は以前よりあたためていた「変更管理パイプライン」の導入に向け、AWS CodePipeline/CodeBuildを触る機会がありましたので内容をご紹介したいと思います。

変更管理パイプラインとは

オライリー社より出ている「Infrastructure as Code」12章に出てくる概念で、雑にいうとインフラコードのデプロイパイプラインです。

ソースとなるコードリポジトリへコミットされたインフラコードの変更に対し、流れるように

  • 自動化されたテスト
  • 自動化されたデプロイ
  • 変更内容のチェックおよび承認

などを組み合わせ、動作環境への反映までを行うフローをつくることで、本番環境への変更の反映をスムーズに行える仕組みとなります。

これを活用することで、

  • 変更のデリバリーの省力化
  • 手作業によるインフラ変更の防止(自動化されたパイプラインに乗せる方が楽になれば、皆そうするようになる)
  • デプロイ作業の均質化(手作業によるミスの防止)
  • トレーサビリティの向上

など、様々なメリットを享受できるようになります。いいですねー

試した内容

ここでは実現可能性の検証ということで、次のようなパイプラインを作成しました。

  • GitHubリポジトリの変更を検知
  • CodeBuildによりCloudFormation Template JSONを生成
  • 得られたTemplate JSONによりCloudFormation Stack更新

codepipeline.png

はまりどころ

CodePipelineからCloudFormationスタック更新をしようとして、次のようなエラーに遭遇しました

Template exceeds maximum length of 51200 bytes

CloudFormationでは通常テンプレートの上限サイズが51,200bytesとなっており、S3にテンプレートを一度アップロードして渡すことによりその制約を回避し460,800bytesまでのサイズが扱えるのですが、CodePipelineからはS3にアップロードしての渡し方が行えないとのこと。
https://forums.aws.amazon.com/thread.jspa?messageID=785905&tstart=0

これ普通に困りますね…なんとかして欲しいです。上記スレッドで提案されている回避策は「CodeBuildからS3にアップロードしてCloudFormation適用する」みたいな感じで…まぁ、確かにそれで動くでしょうけど。。。

今後

わりとイメージしていた通りのことが出来る見通しは立ったので、次は実際にステージング環境での運用をはじめたいなーと思っております。
進展があったらまたご報告したいです!