Amazon Web Services ブログ
AWS App Runner がモノレポをサポート
この記事は、AWS App Runner adds support for monorepos を翻訳したものです。
はじめに
AWS App Runner は、インフラストラクチャやコンテナに関する経験がなくても、コンテナ化されたウェブアプリケーションや API サービスを構築、デプロイ、実行できる、フルマネージド型のコンテナアプリケーションサービスです。本日より、AWS App Runner はモノレポ構造を取っているソースコードリポジトリからのサービスのデプロイをサポートします。これにより、複数のサービスのソースコードをホストするモノレポにおいて、デプロイするソースディレクトリを AWS App Runner に伝えることができます。
モノレポは、複数の異なるプロジェクトのコードを、明確に定義された関係を持つ単一のリポジトリに保存するソフトウェア開発戦略です。クラウドコンピューティングを利用するお客様は、コラボレーションを強化し、コードの重複を避け、可視性を向上させるために、モノレポ開発戦略を採用している場合があります。これは、マイクロサービスベースのアーキテクチャに従った最新のアプリケーションを開発する場合に特に有益です。
お客様は、AWS App Runner の「ソースからのビルド」機能を使用してソースコードから直接サービスをデプロイすることで、ビルドとデプロイのワークフロー管理を AWS App Runner に任せることができます。以前は、AWS App Runner は、ビルドコマンドと起動コマンドを実行する際にリポジトリのルートディレクトリのみをサポートしていました。本日より、アプリケーションのビルドパイプラインとデプロイパイプラインを個別に管理する必要がなくなります。アプリケーションのビルドとデプロイに使用する AWS App Runner サービス設定でソースディレクトリを定義できます。
サービスの自動デプロイを有効にすることもできます。自動デプロイを有効にすると、AWS App Runner はソースディレクトリまたはサービスの依存関係に更新があったときにサービスを再ビルドしてデプロイします。ソースディレクトリ以外の他のアプリケーションやフォルダが更新されても、AWS App Runner はサービスを不必要に再構築してデプロイしません。
つまり、お客様は AWS App Runner のソースからのビルド機能を利用して、モノレポ構造に従うソースコードリポジトリから直接サービスをデプロイできます。お客様は、ソースコードベースのサービスの標準ビルド料金を支払います。お客様は、モノレポアプリケーションの柔軟性と、AWS App Runner でのシンプルな実行のメリットを享受できます。
ソリューション概要
AWS App Runner でモノレポをサポートする機能を紹介するために、ウォークスルーを行います。1 つのソースコードリポジトリから 2 つのサービス (1 つはフロントエンド、もう 1 つはバックエンド) を含むサンプルアプリケーションをデプロイします。
サンプルアプリケーションは、架空のホテルのウェブサイトを運営する 2 つのマイクロサービスのモノレポによって支えられています。フロントエンドとバックエンドはどちらも、Express ウェブフレームワークが提供する Node.js アプリケーションです。AWS App Runner を使用して、アプリケーションをホストする 2 つのサービスを作成します。
アプリケーションをサポートするインフラストラクチャの一部として、Amazon Relational Database Service (Amazon RDS) データベースと、2 つのサービスとデータベース間の通信に必要な Amazon Virtual Private Cloud (Amazon VPC) ネットワークコンポーネントを作成します。パブリックのインターネットトラフィックがフロントエンドサービスに到達し、ホテルの部屋の管理をリクエストできるようになります。
これらのリクエストは、VPC Connector と VPCIngressConnection を経由して、Amazon RDS データベースにクエリを実行してリクエストを処理するバックエンドサービスに安全に送信されます。最後に、リクエストが処理され、リクエスタがレスポンスを受け取ります。AWS App Runner によるプライベートネットワーキングの詳細については、VPC ネットワーキングとプライベートサービスに関する詳細な投稿を参照してください。
AWS App Runner サービスを作成する際には、各ソースディレクトリに対して行われたコミットがそれぞれのサービスにのみデプロイされるように、自動デプロイを有効にしてそれぞれのソースディレクトリを設定します。
図 1: AWS クラウド内で接続された 2 つの モノレポ AWS App Runner サービスを示すアーキテクチャ図
前提条件
ウォークスルーを完了するには、次のツールのセットアップが必要です。
- AWS Command Line Interface (AWS CLI) version 2
- Git
- jq
- GitHub アカウント
ウォークスルー
AWS App Runner の Connection
コードベースのサービスの場合、AWS App Runner はリポジトリからコードをデプロイするための Connection を必要とします。このチュートリアルでは、フォークできるホテルアプリケーションのモノレポを GitHub 上に作成しました。
まず、この GitHub リポジトリにアクセスし、個人の GitHub アカウントにモノレポブランチをフォークします。フォークする際には、Copy the main branch only のチェックを外し、main 以外のブランチもコピーするようにしてください。フォークしたのち、リポジトリの URL を環境変数として保存します。
それでは以下のコマンドを実行し、AWS CloudFormation のテンプレートである infrastructure/base-infra.yaml を利用して、VPC、VPC エンドポイント、VPC Connector、Amazon RDS インスタンス、データベースの認証情報のための AWS Secrets Manager の Secret をデプロイしましょう。
上記の AWS CloudFormation スタックの実行が完了するまで待ちます。この際、スタック作成に時間がかかる場合はコマンドから抜けてプロンプトに戻る場合があります。必要に応じてスタックの実行状況を確認し、スタックの実行が継続していれば問題ありません。スタックの実行が完了したら、以下のコマンドを実行してスタックから出力値を取得します。
モノレポサービスの作成
これで、バックエンドとフロントエンドの AWS App Runner サービスをサポートするために必要なすべてのインフラストラクチャが揃いました。
バックエンドサービスの作成
それでは、バックエンドサービスを作成しましょう。まず、以下のコマンドを実行して、サービスの構成を表すローカルファイル create_backend_service.json を作成します。SourceDirectory は Git リポジトリ内の backend ディレクトリ が指定されていることに注意してください。
バックエンドサービスを作成します。
バックエンドサービスの ServiceArn を保存します。
VpcIngressConnectionArn と、バックエンドサービスURL の出力値を保存します。
フロントエンドサービスの作成
いよいよフロントエンドサービスをデプロイします。以下のコマンドを実行して、サービスの構成を表すローカルファイル create_frontend_service.json を作成します。SourceDirectory は Git リポジトリ内の frontend ディレクトリ が指定されていることに注意してください。
フロントエンドサービスを作成します。
フロントエンドサービスの ServiceArn と、ServiceUrl の出力値を保存します。
作成が完了するまでの間、適宜ステータスを確認します。
サービスが利用可能になったら、FRONTEND_URL を介してアプリケーションにアクセスします。
図2: モノレポのフロントエンドとバックエンドサービスで構築された実行中のホテルアプリケーション
このアプリケーションは、Create ボタンを押下してデータベーススキーマを作成し、ホテルの部屋を追加して表示することができます。自動デプロイを有効にしている場合、GitHub リポジトリの frontend ディレクトリに変更がコミットされると、フロントエンドサービスへのデプロイが開始されますが、バックエンドサービスへのデプロイは行われません。本記事では、自動デプロイを有効にしてサービスを作成しています。ぜひ試してみてください!
後片付け
このウォークスルー中に作成された AWS リソースにはコストがかかります。ウォークスルーが終了したら、作成したインフラストラクチャを必ず削除してください。
まず、AWS App Runner VpcIngressConnection を削除します。
次に、フロントエンド、バックエンドサービスを削除します。
最後に、AWS CloudFormation スタックを削除します。
まとめ
本記事では、AWS App Runner を使用してモノレポ構成のリポジトリからサービスをデプロイする方法を紹介しました。App Runner のモノレポをサポートする機能を使用して、単一のソースコードリポジトリにフロントエンド層とバックエンド層の両方を持つサンプルアプリケーションをデプロイしました。AWS App Runner を使用して、本番環境のウェブアプリケーションでこの新機能を試すことをお勧めします。AWS App Runner の詳細については、ドキュメントと開発者ガイドをご覧ください。
翻訳はパートナーソリューションアーキテクトの髙橋達矢が担当しました。原文はこちらです。