こんにちは!最近ECS 系統のブログを多めになってきています!
今日はCode pipeline を使ってECS に自動デプロイ機構を作成していきます!
今回の環境

ソースコードについて
ここのレポジトリにbuildspec.yml などを管理しています。今回はNext を使っています。
画面は何か作っているわけではなく、Next Js のデフォルトの画面のものを使用しています。
もうちょっと改良して、Firebase とかとつなげれたらいいなと思っていますので、それはまた後日の予定です。
手順
構築の流れ
今回はECS の環境から作成して、Code pipeline の構築をしていきます!
ECS Cluster の作成
Fargate のみを選択していきます。最近マネージドのインスタンスも増えたようですね。

Cluster 内部の設定は後々実施していきます。
ECR プライベートレポジトリ作成
プライベートレポジトリを作成していきます。今回は検証なので、タグはMutable にしておきます。本番環境の運用ではImmutable が推奨みたいなので、こちらも検討してみてもいいかもしれません。
切り戻しの点では、Immutable は優秀です!

タスクでも使用できるようにタスク定義を作成していきます!
タスク定義作成
検証なので、最低限のスペックで実施していきます。
インフラスペック

コンテナ設定
コンテナ名称を設定して、ECRイメージを入力してあげます。今回はnext なので、3000 port を設定します。

サービス作成
先ほど作成した、タスク定義を使用します。

デプロイ設定
現時点でイメージはないので、デプロイは失敗します。なので、あえて、必要タスクを0にします。Pipeline を作成して、Codebuild でイメージがデプロイされたのちに1に変更します。ネットワークは各自で設定してください!

ここまできたら、次はCode Pipeline を作成するためにCode シリーズの設定をしていきます。
CodeBuild プロジェクト作成
Codebuild でnext をbuild するためになります。
ソース設定
コードなどはGitHub で管理しているので、GitHub で対象のレポジトリを選択します。

Buildspec とArtifact 設定
スペックなどはデフォルトで変更してないので、スキップしました。今回はGitHub で管理しているbuildspec.yml を活用するので、ファイルを使用するを選択してください。
そして、Artifact を選択してください。Artifact を設定しないとbuild したものをCode deploy 側で使用できなくなるので、エラーが発生します!

環境変数
今回、buildspec で下記の変数が必要になるので、CodeBuild で設定してください。

Code pipeline の作成
カスタムパイプライン選択

パイプラインの設定
もう既にRole を作成している方は既存のサービスロールを選択してください。新しく作成が必要な場合は、新しいサービスロールの作成を選択してください。

ソースの選択
GitHub はここではアプリ経由での選択とします。

Build ステージの設定
ここでは先ほど作成した、CodeBuild を選択してください。

テストステージ
今回はテストは設定していないので、テストステージはスキップします。

デプロイステージ
今回はECS に対してデプロイしていくので、ECS を選択します。ECS Blue Green デプロイというのも存在するので、そちらを選択するとCode deploy を初めに作成しておく必要があります。

ここまで設定できたら、Pipeline を実行していきます。
pipeline の成功
下記のような形になれば、pipeline は成功しています!ECS 側でもデプロイされていることをログなどを調査して確認してみてください!

まとめ
途中でArtifact が設定されていなくて、Code pipeline が動かないことが発生したりしましたが、なんとか構築することができました。次はBlue Green にも挑戦してみようと思います。GitHub Actions でデプロイした方が楽なのではと思ったり。。。
参考サイト

コメント