Posted at

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適用する」みたいな感じで…まぁ、確かにそれで動くでしょうけど。。。


今後

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

進展があったらまたご報告したいです!