[アップデート]AWS App Runnerは、ソースディレクトリを指定してコマンド実行できるようになり、モノレポのデプロイに対応しました

2023.09.30

はじめに

App Runnerは、モノレポ構成のリポジトリのデプロイに対応しました。

モノレポとは、アプリケーションやマイクロサービスなどのコードを同一リポジトリで管理する手法のことです。

これまでは、ビルドおよび起動コマンドの実行は、リポジトリのルートディレクトリのみをサポートしていました。

今回のアップデートにより、App Runnerでは任意のソースディレクトリ(コマンドを実行するパス)を指定できるようになりました。

これにより、開発者は指定したソースディレクトリからビルドし、起動コマンドを実行できるため、モノレポ構成のリポジトリのデプロイが容易になりました。

AWSマネジメントコンソールで確認すると、「ソースディレクトリ」を指定できるようになっていました。

これだけだと物足りないので、今回、AWSが公式ブログで紹介しているサンプルアプリケーションをデプロイしながら、この新機能を試してみます。

構成としては、以下の通りです。一つのリポジトリからフロントエンドとバックエンドに分かれてApp Runnerをデプロイします。

引用元

フロントエンドからバックエンド、RDSへの通信にはVPCエンドポイントとVPCコネクタが利用されます。

AWS App Runnerの概要は、下記を参考下さい。

試してみた

まずは、自身のGitHubアカウントに、下記のサンプルアプリケーションのmonorepoブランチをフォークします。

フォークしたリポジトリ内のinfrastructure/base-infra.yamlファイルをダウンロードし、それを使ってCloudFormationのスタックを作成します。

今回は、バージニアリージョンでデプロイしました。

VPC、VPCエンドポイント、VPCコネクタ、RDS インスタンス、およびデータベース認証情報を保存したSecrets Managerなどが作成されます。

App Runnerサービス作成

まず、バックエンドサービスを作成します。ソースコードリポジトリを選択し、プロバイダーであるGitHubと接続します。

フォークしたリポジトリを選択し、ブランチは、monorepoを選択します。

今回のアップデートで導入されたソースディレクトリでは、backendを指定します

backendディレクトリで、実行するビルドと起動コマンドを設定します

  • ランタイム:Nodejs 16
  • 構築コマンド:npm install
  • 開始コマンド:npm start
  • ポート:8080

サービス設定は、下記の通りに設定します

  • サービス名:hotel-backend
  • SSM パラメータストア:HOTEL_NAME:SSM パラメータストアのARN
  • Secrets Manager:MYSQL_SECRET:Secrets ManagerのARN
  • インスタンスロール:AppRunnerHotelAppRole-us-east-1
    • インスタンスロール名は、スタックを作成したリージョンによって変わります。

各ARNは、CloudFormationのスタック出力から確認できます。

続いてネットワークにおいて、受信トラフィックは、パブリックにアクセスにアクセスはせずに、フロントエンドからVPCエンドポイント経由のアクセスをのみを受け付けるため、プライベートエンドポイントを選択します。

VPCエンドポイントは、CloudFormationで作成済みです。

送信ネットワークトラフィックでは、AppRunnerHotelApp-FE-Connectorを選択します

バックエンドのデプロイが完了です。

フロントエンド

次にフロントエンドのサービスを作成します。ソースディレクトリは、frontendを指定し、他の設定はバックエンドサービスと同じです

サービス設定は、下記の通りです

  • SSM パラメータストア:HotelName:SSM パラメータストアのARN
  • プレーンテキスト:BACKEND_URL:バックエンドのURL
  • インスタンスロール:AppRunnerHotelAppRole-us-east-1
    • インスタンスロール名は、スタックを作成したリージョンによって変わります。

BACKEND_URLは、バックエンドをデプロイしたときに自動で払い出させるURLのことです。

ネットワーク設定において、受信トラフィックは、インターネットからのアクセスを受け付けるため、パブリックエンドポイントを選択します。

  • 受信ネットワークトラフィック:パブリックエンドポイント
  • 送信ネットワークトラフィック:カスタム VPC
    • VPC コネクタ:AppRunnerHotelApp-BE-Connector

送信ネットワークトラフィックでは、AppRunnerHotelApp-BE-Connectorを選択します

フロントエンドのデプロイが完了しましたので、自動生成されたフロントエンドのデフォルトドメインのURLにアクセスしてみます。

結果として表示された "AWS App Runner Hotel" を見ると、正常にデプロイされ成功したことが確認できます。

最後に

AWS App Runnerが新たにモノレポのデプロイに対応したことにより、一つのリポジトリから複数のサービス(例:フロントエンドとバックエンド)を分けてデプロイすることが可能になりました。

App Runnerはより柔軟になり、開発の作業効率の向上に繋がります。