- ECSベースでサービスを立ち上げる
- 単にサービスを起動させるだけでなく、GitHubへのコミット〜ビルド・デプロイまで自動化したい
- かつ、開発環境と本番環境を別で作りたい
- 開発環境は自動でデプロイされてよいが、本番環境は手動で承認されたらデプロイされるようにしたい
- これらの環境構築含めて自動化したい
上記のような要件ってすごく汎用的に存在すると思う。 AWSでこういったことを実現するにはCode PipelineやCloud Formationなどを組み合わせていけばよくて、そうしたサンプルや事例もたくさん存在する。 ただこれらを作ろうとすると、AWSの各マネージドサービスに関する知識がそれなりに必要で、学習曲線が急だ。
自分はDevOpsを専門領域の1つとしてやっていきたいから各サービスについても詳しく勉強していこうと思っているのだけど、それにしても数日ではできないし、けど開発はさっさと始めたいため、さくっと開発環境(およびCICD、ウェブアプリのアルファ版の公開)を立ち上げたいと思っていろいろ調べた。
stelligent muというOSSが最強ぽい。
なお 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にPushしたらあとは、
mu pipeline up
だけでCloudFormationに各種リソースが作成され、CodePipelineが構築され、acceptance環境までアプリがデプロイされ、production環境は承認待ちのステータスになる、まで全部自動で行われたので驚いた。
Code Pipeline
Cloud Formation
ECS Cluster
ここまでできれば、プロトタイプ的なアプリを作っていく上では十分なので、これでさっさと開発に入れる。コード書いてPushするだけに専念できる。
レポジトリのIssuesを見ていると、かゆいところに手が届かない(まだ機能が足りてない)部分がありそうなので、本番で使えるかはかなり慎重に調べる必要がある。ただOSSでもあるし、かなりのカスタマイズもできそうなので、ある一定のフェーズまでは大いに使えるケースがありそう。