Azure Web PubSub は、WebSocket を使ってリアルタイム メッセージング Web アプリケーションを作成するのに役立ちます。 Azure Static Web Apps を使うと、コード リポジトリから Azure にフル スタックの Web アプリを自動的にビルドしてデプロイできます。 このチュートリアルでは、Web PubSub と Static Web Apps を使って、リアルタイム チャット ルーム アプリケーションを構築する方法について説明します。
具体的には、次の方法を学習します。
- サーバーレス チャット アプリを構築する
- Web PubSub 関数の入力および出力のバインドを使用する
- Static Web Apps を使用する
重要
この記事に示す生の接続文字列は、デモンストレーションのみを目的としています。
接続文字列には、アプリケーションが Azure Web PubSub サービスにアクセスするために必要な認可情報が含まれています。 接続文字列内のアクセス キーは、サービスのルート パスワードに似ています。 運用環境では、常にアクセス キーを保護してください。 Azure Key Vault を使ってキーの管理とローテーションを安全に行い、WebPubSubServiceClient
を使って接続をセキュリティ保護します。
アクセス キーを他のユーザーに配布したり、ハードコーディングしたり、他のユーザーがアクセスできるプレーンテキストで保存したりしないでください。 キーが侵害された可能性があると思われる場合は、キーをローテーションしてください。
概要
GitHub または Azure Repos は、Static Web Apps のソース管理を提供します。 Azure では、選択したリポジトリ ブランチが監視され、ソース リポジトリへのコード変更がなされるたびに、Web アプリの新しいビルドが自動的に実行され、Azure にデプロイされます。 継続的デリバリーは、GitHub Actions と Azure Pipelines によって提供されます。 静的 Web アプリは新しいビルドを検出し、エンドポイント ユーザーに提示します。
このチュートリアルで提供されるサンプル チャット ルーム アプリケーションには、次のワークフローがあります。
- ユーザーがアプリにサインインすると、Azure Functions
login
API がトリガーされ、Web PubSub サービス クライアント接続 URL が生成されます。 - クライアントが Web PubSub への接続要求を初期化すると、サービスは Functions
connect
API をトリガーしてユーザーを認証するシステムconnect
イベントを送信します。 - クライアントが Azure Web PubSub サービスにメッセージを送信すると、このサービスがユーザー
message
イベントで応答し、Functionsmessage
API がトリガーされて、接続しているすべてのクライアントにメッセージがブロードキャストされます。 - Azure Web PubSub のイベントが、定義済みのパラメーター
{event}
、すなわち https://$STATIC_WEB_APP/api/{event} で構成されている場合、Functionsvalidate
API は CloudEvents の乱用からの保護 に対して定期的にトリガーされます。
注意
Azure Web PubSub サービスがこれらの 2 つのイベントに構成されていれば、Functions API connect
と message
がトリガーされます。
前提条件
- GitHub のアカウント。
- Azure アカウント。 Azure サブスクリプションをお持ちでない場合は、開始する前に Azure 無料アカウントを作成してください。
- Azure リソース を管理するための Azure CLI (バージョン 2.29.0 以降) または Azure Cloud Shell。
Web PubSub リソースを作成する
次のコマンドを使用して、Azure CLI にサインインします。
az login
リソース グループを作成します。
az group create \ --name my-awps-swa-group \ --location "eastus2"
Web PubSub リソースを作成します。
az webpubsub create \ --name my-awps-swa \ --resource-group my-awps-swa-group \ --location "eastus2" \ --sku Free_F1
あとで使うためにアクセス キーを取得して保持します。
この記事では、デモ目的でのみ生の接続文字列が表示されます。 運用環境では、常にアクセス キーを保護してください。 Azure Key Vault を使ってキーの管理とローテーションを安全に行い、
WebPubSubServiceClient
を使って接続をセキュリティ保護します。az webpubsub key show \ --name my-awps-swa \ --resource-group my-awps-swa-group
AWPS_ACCESS_KEY=<YOUR_AWPS_ACCESS_KEY>
プレースホルダー
<YOUR_AWPS_ACCESS_KEY>
をその前の手順のprimaryConnectionString
の値に置き換えます。
リポジトリを作成する
この記事では、簡単に作業を開始できるように、GitHub テンプレート リポジトリを使用します。 このテンプレートには、Azure Static Web Apps にデプロイするスターター アプリが含まれます。
- このチュートリアルのための新しいリポジトリを作成するために https://github.com/Azure/awps-swa-sample/generate に移動します。
- ご自身を [所有者]として選択し、リポジトリに my-awps-swa-app という名前を付けます。
- 好みに応じて パブリック または プライベート リポジトリを作成できます。 いずれもチュートリアルで機能します。
- [Create repository from template](テンプレートからリポジトリを作成する) を選択します。
静的 Web アプリを作成する
リポジトリが作成されたので、Azure CLI から静的 Web アプリを作成できます。
GitHub ユーザー名を保持する変数を作成します。
GITHUB_USER_NAME=<YOUR_GITHUB_USER_NAME>
プレースホルダー
<YOUR_GITHUB_USER_NAME>
を実際の GitHub ユーザー名に置き換えます。リポジトリから新しい静的 Web アプリを作成します。 このコマンドを実行すると、CLI が GitHub 対話型サインインを開始します。 メッセージに従って認可を完了します。
az staticwebapp create \ --name my-awps-swa-app \ --resource-group my-awps-swa-group \ --source https://github.com/$GITHUB_USER_NAME/my-awps-swa-app \ --location "eastus2" \ --branch main \ --app-location "src" \ --api-location "api" \ --login-with-github
重要
--source
パラメーターに渡す URL には、.git
サフィックスを含めることはできません。https://github.com/login/device にアクセスします。
コンソールのメッセージに表示されているユーザー コードを入力します。
[続行] を選択します。
[AzureAppServiceCLI を認証する] を選択します。
静的 Web アプリの設定を構成します。
az staticwebapp appsettings set \ -n my-awps-swa-app \ --setting-names WebPubSubConnectionString=$AWPS_ACCESS_KEY WebPubSubHub=sample_swa
Web サイトを表示する
静的アプリのデプロイには、次の 2 つの側面があります: 1 つ目は、アプリを構成する、基本となる Azure リソースを作成します。 2 つ目は、アプリケーションをビルドして発行する GitHub Actions ワークフローです。
新しい静的サイトに移動する前にまず、デプロイ ビルドの実行が完了している必要があります。
コンソール ウィンドウに戻り、次のコマンドを実行して、アプリに関連する URL を一覧表示します。
az staticwebapp show \ --name my-awps-swa-app \ --query "repositoryUrl"
このコマンドの出力で、GitHub リポジトリの URL が返されます。
リポジトリの URL をコピーし、ブラウザーに貼り付けます。
[Actions](アクション) タブを選択します。
この時点で、静的な Web アプリをサポートするリソースが Azure によって作成されています。 実行中のワークフローの横のアイコンが、緑の背景のチェックマーク ✅ に変わるまで待ちます。 この操作は、完了するまで数分かかる場合があります。
成功アイコンが表示されたら、ワークフローは完了しており、コンソール ウィンドウに戻ることができます。
次のコマンドを実行して、Web サイトの URL のクエリを実行します。
az staticwebapp show \ --name my-awps-swa-app \ --query "defaultHostname"
Web PubSub イベント ハンドラーで設定する URL を保持します。
STATIC_WEB_APP=<YOUR_STATIC_WEB_APP>
Web PubSub イベント ハンドラーを構成する
完了まであと少しです。 最終ステップは、クライアント要求が関数 API に転送されるように Web PubSub を構成することです。
次のコマンドを実行して、Web PubSub サービス イベントを構成します。 リポジトリ内の
api
フォルダーにある関数を Web PubSub イベント ハンドラーにマップします。az webpubsub hub create \ -n "my-awps-swa" \ -g "my-awps-swa-group" \ --hub-name "sample_swa" \ --event-handler url-template=https://$STATIC_WEB_APP/api/{event} user-event-pattern="*" system-event="connect"
これで、Web サイト <YOUR_STATIC_WEB_APP>を使う準備ができました。 それをブラウザーにコピーし、[続行] を選択して友人とのチャットを開始します。
リソースをクリーンアップする
このアプリケーションを使い続けない場合は、次のコマンドを実行して、リソース グループと静的 Web アプリを削除できます。
az group delete --name my-awps-swa-group
次のステップ
このクイックスタートでは、サーバーレス チャット アプリケーションを開発およびデプロイする方法について説明しました。 これで、独自のアプリケーションの構築を始めることができます。