stelligent/mu でフルスタックなECSのCICDフローを立ち上げる

  • ECSベースでサービスを立ち上げる
  • 単にサービスを起動させるだけでなく、GitHubへのコミット〜ビルド・デプロイまで自動化したい
  • かつ、開発環境と本番環境を別で作りたい
  • 開発環境は自動でデプロイされてよいが、本番環境は手動で承認されたらデプロイされるようにしたい
  • これらの環境構築含めて自動化したい

上記のような要件ってすごく汎用的に存在すると思う。 AWSでこういったことを実現するにはCode PipelineやCloud Formationなどを組み合わせていけばよくて、そうしたサンプルや事例もたくさん存在する。 ただこれらを作ろうとすると、AWSの各マネージドサービスに関する知識がそれなりに必要で、学習曲線が急だ。

自分はDevOpsを専門領域の1つとしてやっていきたいから各サービスについても詳しく勉強していこうと思っているのだけど、それにしても数日ではできないし、けど開発はさっさと始めたいため、さくっと開発環境(およびCICD、ウェブアプリのアルファ版の公開)を立ち上げたいと思っていろいろ調べた。

stelligent muというOSSが最強ぽい。

getmu.io

なお mu はここでも使われている。このチュートリアルAWS Dev Advocateの @brentContainedの作ぽい。

Amazon ECS Workshop :: Amazon ECS Workshop

クラスメソッド社のブログ記事のまんまだけど、一通り試してみた。

stelligent mu で作成するECS Fargate用のCI/CD環境(検証環境と手動承認も付いてるよ) | DevelopersIO

この記事内のサンプルは https://github.com/stelligent/mu/tree/develop/examples/ecs-fargate ここにあるコードとほぼ同じで、GitHubのレポジトリ上には他にもたくさんのサンプルがある。

事前に必要なものは

  • GitHubレポジトリ(アプリおよび設定のコードを置く場所)
  • このGitHubレポジトリにアクセスできるGitHub Token
  • IAMアカウントの設定

となる。

コードをGitHubにPushしたらあとは、

mu pipeline up

だけでCloudFormationに各種リソースが作成され、CodePipelineが構築され、acceptance環境までアプリがデプロイされ、production環境は承認待ちのステータスになる、まで全部自動で行われたので驚いた。

  • Code Pipeline

    f:id:road288:20190207160119p:plain
    aws-codepipeline

  • Cloud Formation

    f:id:road288:20190207160450p:plain
    aws-cloud-formation

  • ECS Cluster f:id:road288:20190207160619p:plain

ここまでできれば、プロトタイプ的なアプリを作っていく上では十分なので、これでさっさと開発に入れる。コード書いてPushするだけに専念できる。

レポジトリのIssuesを見ていると、かゆいところに手が届かない(まだ機能が足りてない)部分がありそうなので、本番で使えるかはかなり慎重に調べる必要がある。ただOSSでもあるし、かなりのカスタマイズもできそうなので、ある一定のフェーズまでは大いに使えるケースがありそう。