見出し画像

【図解】CodePipelineにおけるFargateへのBlue/Greenデプロイ① 〜Blue環境構築〜

【ライターの紹介】
横浜事業部のSOYAです
クラウド環境を主にインフラエンジニアをしております。

AWSの代表的なCode系サービス群 CodeCommit、CodeBuild、CodeDeploy、CodePipelineの構築や動作の流れを図で理解するための資料を作成しました。

本記事ではECS(Fargate)へのBlue/GreenデプロイをCode系サービスを用いて実施し、その流れを説明していきます。

使用する各サービスの設定値を記載したCloudFormatinoテンプレートを載せておりますので、ぜひハンズオン資料としてもご活用ください。


1.AWS Code サービス群の利用目的

AWS Code サービス群はCI/CD(継続的インテグレーション/継続的デリバリー) 環境を構築するためのサービスです。簡単に説明すると、プロダクトの開発・運用における「コード管理」、「ビルド」、「テスト」、「デプロイ」といった一連の工程を自動的に実行する環境を整えるために利用します。

頻繁に機能や設定のアップデートが必要なプロダクトの場合、これらの工程を自動化しておくことで人的コストを削減することが可能になります。

AWSではマネージドサービスとしてAWS Code サービス群が提供されています。
AWSにおけるCI/CDについてはAWS公式CI/CD について理解するにて詳しく説明がされています。

次章から、AWS Code サービス群を利用してECS(Fargate)のBule/Greenデプロイを実施するためのCI/CD環境を構築していきます。

2.Blue/Greenデプロイの全体像

まずは上図で示しているデプロイまでの流れ(①〜⑩)を簡単に説明します。

3.Blue環境構築

Blue/Green デプロイは、新/旧2つの環境間でトラフィックを切り替えることによりデプロイを制御します。
新環境:Green
旧環境:Blue
<Blue/Green デプロイの流れ>

そのため、CI/CD環境を構築する前に、まずはデプロイを実行するためのBlue環境を用意します。下記赤枠部分が構築対象になります。

ではさっそくBlue環境を構築します。
<Blue環境の構成図>

構築するサービスは下記になります。

  1. VPC

  2. VPCエンドポイント(ECR、ECR api、S3の3つ)

  3. ALB

  4. ターゲットグループ(BlueTG、GreenTGの2つ)

  5. ECRリポジトリ

  6. ECS(クラスター、タスク定義、サービス)

下記に各サービスのCloudFormationテンプレートを記載します。

1.CloudFormation-Template-for-VPC

2.CloudFormation-Template-for-VPCEndpoint

本件ではプライベートな接続でECRからコンテナイメージをプルするため、VPCエンドポイントを用意します。

AWS公式Amazon ECR インターフェイス VPC エンドポイント (AWS PrivateLink)を参照すると、プラットフォームバージョン 1.4.0 以降を使用する Fargate でホストされる Amazon ECS タスクの場合、Amazon ECR VPC エンドポイントと Amazon S3 ゲートウェイエンドポイントの両方が必要となります。
それぞれのエンドポイントの用途をAWS公式サイトから引用し下記に記載します。

・com.amazonaws.region.ecr.dkr
このエンドポイントは、Docker Registry API に使用されます。push や pull などの Docker クライアントコマンドでは、このエンドポイントが使用されます。

・com.amazonaws.region.ecr.api
このエンドポイントは、Amazon ECR API への呼び出しに使用されます。DescribeImages や CreateRepository などの API アクションは、このエンドポイントに移動します。

・com.amazonaws.region.s3
Amazon ECS タスクで Amazon ECR からプライベートイメージをプルするには、Amazon S3 のゲートウェイエンドポイントを作成する必要があります。Amazon ECR は Amazon S3 を使用してイメージレイヤーを保存するため、ゲートウェイエンドポイントが必要です。

3.CloudFormation-Template-for-ALB

4.CloudFormation-Template-for-TargetGroup

スタック作成後にALBのコンソールで、TEST/PRD両方のリスナーにBlue環境用TG(cf1-stg-tg-fargate-01)が組み込まれていることを確認します。

5.CloudFormation-Template-for-ECR

レポジトリ作成後、ローカルPCで下記のdockerfile及びソースファイルからdockerイメージを作成し、ECRへpushします。
ECRへのコンテナイメージのpushは[初心者向けシリーズ] Dockerイメージを作成しAmazon ECRにプッシュする方法を確認してみたを参考に実施してみてください。

<dockerfileを含むソースファイルのディレクトリの構造>

<dockerfileの記載内容>

<test.htmlの記載内容>

<test.phpの記載内容>

<001-site1.confの記載内容>

<ECRへのpush実行結果>

pushが完了するとコンソールでイメージの登録を確認できます。

6.CloudFormation-Template-for-ECS

<タスク定義>

<クラスター>

<サービス起動>


ECSサービス(Fargate)の起動が正常に終わったことを、コンソールから確認します。

Fargateが正常に起動すると、構築したコンテナへポート81,82でWeb接続が可能になります。

Blue環境の構築は以上になります。

4.まとめ

本記事ではBlue環境の構築まで実施しました。

CloudFormationのテンプレートファイル(.yml)に可能な限り詳しく設定内容の説明を記載しておりますが、不明な点は次の記事へ進む前に調べておいていただけると幸いです。

次の記事「【図解】CodePipelineにおけるFargateへのBlue/Greenデプロイ② 〜パイプラインのステージ用意〜」ではいよいよCodeサービス群を1つずつ構築していきますので、ぜひお読みください。

ALHについて知る



↓ ↓ ↓ 採用サイトはこちら ↓ ↓ ↓


↓ ↓ ↓ コーポレートサイトはこちら ↓ ↓ ↓


↓ ↓ ↓ もっとALHについて知りたい? ↓ ↓ ↓