Amazon Web Services ブログ

Amazon CodeCatalyst で Environment を利用したマルチアカウントのデプロイ

はじめに

AWS 上にシステム環境を展開する際に、アカウント単位でワークロードを分割するマルチアカウントという戦略があります。マルチアカウント戦略のベストプラクティスとして、ソフトウェア開発ライフサイクルごとにワークロードを分割することについて説明されています。その中で、開発環境、ステージング環境、本番環境がそれぞれ独自のアカウントを持つ戦略が推奨されています。
各環境に、アプリケーションをデプロイする際には、継続的インテグレーション/継続的デプロイ (CI/CD) パイプラインを活用してデプロイしたり、本番環境へのデプロイ前のテストや確認を行ったりします。
Amazon CodeCatalyst は、ソフトウェア開発チームが AWS でアプリケーションの計画、コーディング、ビルド、テスト、デプロイを始めるために必要なすべてをまとめた統合ソフトウェア開発サービスです。CodeCatalyst を利用することで、複数の AWS アカウントへの CI/CD パイプラインをセキュアで簡単に実現することができます。
本ブログでは、CodeCatalyst で Environment を利用した マルチアカウントデプロイの紹介をします。

前提条件

チュートリアル

概要

下記手順と図のように CodeCatalyst の CI/CD ワークフローから複数の AWS アカウントへデプロイするチュートリアルを行います。

  • CodeCatalyst のスペースに AWS アカウントを追加
  • デプロイ先となる AWS アカウントを Environment で設定
  • CodeCatalyst ワークフローの作成
  • 複数の AWS アカウントへのデプロイの確認

CodeCatalyst の各用語について CodeCatalyst のコンセプトをご参照ください。

CodeCatalyst からマルチアカウントへデプロイをする全体図

図1. CodeCatalyst から 開発環境と本番環境にデプロイ

アプリケーションと AWS 環境は、Modern three-tier web application ブループリントを使用します。
CodeCatalyst ブループリントは、新しいプロジェクトのテンプレートを提供します。以下に沿って進める場合、「Amazon CodeCatalyst でのスペースの作成」で説明されているとおり、ブループリントを起動することができます。 これにより、以下に示すアーキテクチャがデプロイされます。本プログラムで使うブループリントの詳細はこちらをご確認ください。

Modern three-tier web application ブループリントでデプロイされるアーキテクチャ

図2. Modern three-tier web application ブループリントでデプロイされるアーキテクチャ

CodeCatalyst のスペースに AWS アカウントを追加

ここでは、システムのデプロイ先となる AWS アカウントを CodeCatalyst のスペースに追加していきます。
AWS アカウントをスペースに追加することで、デプロイ先 AWS アカウントを増やしたり、CodeCatalyst の請求アカウントを管理したりすることができます。
下記手順に従って、CodeCatalyst のスペースに AWS アカウントを追加します。

  1. CodeCatalyst スペースの画面に移動
  2. Settings > AWS accounts に移動
  3. 追加する AWS account ID、CodeCatalyst で表示する display name、description を入力
  4. Associate AWS account から追加
CodeCatalyst スペースに AWS アカウントを追加する画面

図3. CodeCatalyst スペースに AWS アカウントを追加する画面

Environment の概要と各環境の設定

Environment では、アプリケーションがデプロイされる AWS アカウントの管理をすることができます。Environment には、develop、test、staging、production など、任意の名前を付けることができます。CodeCatalyst から Environment へのデプロイは、次項の手順にある CodeCatalyst ワークフロー内で定義する各アクションに紐づけることで実現することができます。CodeCatalyst から Environment へのデプロイは、すべて Environment ページに表示されます。Environment を設定するには、 production などの名前を付け、それをスペースに追加した AWS アカウントに関連付けます。Environment では、デプロイメントのターゲット AWS アカウント、アクティビティ、デプロイメントターゲットの Amazon CloudFormation Stack 一覧をまとめて管理することができます。
Dev Environment と混同しないようにしてください。Dev Environment は、CodeCatalyst で利用できるクラウドベースの開発環境で、プロジェクトのソースリポジトリに保存されているコードに対してすばやく作業することができます。

下記手順に従って、Environment の作成をします。

  1. ブループリントから立ち上げたプロジェクトの画面に移動
  2. CI/CD > Environments に移動
  3. ブループリントから作成された Environment に development があることを確認
ブループリントから作成された Environment の画面

図4. ブループリントから作成された Environment の画面

  1. Create environment から新しく Production 用の Environment を作成
  2. Environment name を「production」、Environment type を「Production」に設定
  3. スペースに追加した AWS アカウントを AWS account connection に設定
  4. Create environment から作成
Environment の作成画面

図5. Environment の作成画面

CodeCatalyst ワークフローの設定

CodeCatalyst ワークフローでは、アプリケーションのビルド、テスト、デプロイを容易に行うことができます。ブループリントから立ち上げたプロジェクトの画面で、CI/CD > Workflows に移動します。既に、対象の ブループリントで定義されている CI/CD ワークフローである ApplicationDeploymentPipeline が確認できるかと思います。既にある ApplicationDeploymentPipeline に加えて、Production 環境にデプロイする CI/CD ワークフローを作成していきます。
最終的には、下記の図のように、Development 環境の Environment が関連づけられた CI/CD ワークフロー(左)、Production 環境の Environment が関連づけられた CI/CD ワークフロー(右) の2つのワークフローが存在する形になります。

Development 環境と Production 環境のワークフロー

図6. Development 環境と Production 環境のワークフロー

下記手順に従って、ワークフローの修正と作成をします。

  1. 既にある ApplicationDeploymentPipeline のワークフローのトリガーとなるブランチを main から development に変更
  2. ApplicationDeploymentPipeline のワークフローをコピー & ペーストして新しい ApplicationDeploymentPipelineProduction という名前のファイルを同じディレクトリ内に作成
  3. トリガーとなるブランチを development から main に変更
  4. 下記の変更のように、各 Environment に記載されている Name と Connections の Name を production に変更
ApplicationDeploymentPipelineProduction ワークフローの変更内容

図7. ApplicationDeploymentPipelineProduction ワークフローの変更内容

マルチアカウントデプロイ

ここまでで、development ブランチにマージされた時に、Environment で定義した development 用の AWS アカウント に、main ブランチにマージされた時には、 Environment で定義した production 用の AWS アカウントへデプロイされます。
ここからは、実際に動作を確認してみます。Modern three-tier web application ブループリントの Readme にある Sample Change に従って変更し、デプロイをします。

  1. development ブランチを作成
  2. development ブランチから feature ブランチを作成
  3. feature ブランチで 、Modern three-tier web application ブループリントの Readme にある Sample Change に従って変更
  4. development ブランチへのマージ
  5. development 環境の Web サイトの確認
  6. main ブランチに development ブランチをマージ
  7. production 環境の Web サイトの確認

各 Environment ごとのアクティビティを、Environment のページから確認することができます。

Environment (development) のデプロイアクティビティの画面

図8. Environment (development) のデプロイアクティビティの画面

Environment (production) のデプロイアクティビティの画面

図9. Environment (production) のデプロイアクティビティの画面

クリーンアップ

このチュートリアルに従っていた場合、引き続き料金が発生しないように、デプロイしたリソースを削除する必要があります。まず、ブループリントを起動したときに関連付けた AWS アカウントで、CDK が AWS CloudFormation コンソールを使用してデプロイした 2 つのスタックを削除します。これらのスタックは、mysfitsXXXXXWebStack や mysfitsXXXXXAppStack のような名前を持っています。次に、Project settings に移動して Delete project ボタンをクリックし、CodeCatalyst からプロジェクトを削除します。
CodeCatalyst で発生する料金の詳細は価格ページを参照してください

まとめ

本ブログでは、CodeCatalyst でマルチアカウントデプロイを実装しました。CodeCatalyst で、アプリケーションのデプロイ先 AWS アカウントの管理と CI/CD ワークフローに、AWS アカウントと関連づけた Environment を設定することで、簡単にマルチアカウントデプロイが可能となります。Environment を活用し、利用しているブランチ戦略に従ってマルチアカウントデプロイを実現してみましょう。

この記事の著者について

柳久保 友貴

ソリューションアーキテクトとして、ISV/SaaS 領域のお客様の技術支援を行っています。好きなサービスは Code シリーズです。好きな食べ物は、ラーメンです。