Azure Static Web Appに認証機能付きのReactアプリケーションを10分でデプロイする

Azure OpenAI Serviceを使うためにMicrosoft Azure環境を用意することがこれから増えてくると思います。その際、ウェブのフロントエンドをMicrosoft Azureで用意できると便利ですね。 Azure Static Web Appというサービスを使うと、GitHubのリポジトリと連携してフロントエンドの環境を用意でき、さらにパスワードを使った閲覧制限をかけることも可能です。

無料で使い始めることができ、パスワードを使った閲覧制限をかける場合も、1時間あたり$0.01で使い始めることができ、本番環境はもちろん、検証環境としても便利に使えると思ったので、この記事で Viteで作成したReactアプリケーションをAzure Static Web Appにデプロイし、パスワード制限をかける流れを紹介します。

Azure Static Web Appを作成する

AzureポータルからStatic Web Appに移動し、新しいアプリケーションを作成します。

Azureポータル

Static Web Appを検索

Static Web Appのトップ画面

Static Web App新規作成画面

リソースグループや、アプリケーション名、リージョンなどを入力します。ホスティングプランは、freeとstandardの2種類があります。今回はパスワード認証を試すため、standardプランで進めます。

デプロイ方法はGitHubがデフォルトで選択されており、GitHubログインすることで、GitHubのリポジトリを選択できるようになり、そのレポジトリのコミットやPull Requestの作成を契機にStatic Web Appのデプロイを実行できます。

レポジトリを選択したら、ビルドの設定を行います。 ビルドのプリセットにViteはないので、Customを選択して以下のように設定します。

項目
App location /(初期値のまま)
Api location ---(未入力)
Output location /dist

ビルドの設定

「Preview workflow file」ボタンを押すと、GitHub Actionsのワークフローの設定が表示されます。Static Web Appを作成すると、このワークフローファイルがレポジトリにコミットされ、GitHub Actionsでデプロイが実行されます。つまり、デプロイ前にテストを実行したり、デプロイ後に通知を送ったりGitHub Actionsのノウハウが使えます。GitHubのレポジトリを指定することでデプロイを自動化するサービスは色々使ってきましたが、この体験は初めてでかつ、とても良いと思いました。

「Review and create」ボタンを押して、内容を確認し「Create」ボタンを押すと、Static Web Appが作成されます。

連携したレポジトリのActionsを確認すると、デプロイのワークフローが作成され、実行されていることが確認できます。

GitHub Actionsが実行されている

Static Web Appに戻ると、URLが表示されているので、アクセスしてみます。

Deployしたアプリケーション

パスワードによるアクセス制限をかける

デプロイしたアプリケーションにパスワード認証を設定してみます。

まず、Static Web Appの管理画面の左メニューから、Configurationを選択し、General settingsタブを表示します。

General settingsタブ

次に「Password protection」から「Protect staging environments only」か「Protect both staging and production environments」を選択します。stagingというのは、Pull requestや、ブランチ単位で作成される動作確認用の環境です。 すると、パスワード入力フォームが表示されるので、入力して保存します。

パスワード入力フォーム

これで、パスワードによるアクセス制限がかかりました。 アクセスしてみると、パスワード入力フォームが表示されます。

パスワードによるアクセス制限

GitHub Actionsのワークフロー自動生成&コミットによるデプロイ自動化が嬉しい

途中でも触れましたが、Static Web Appのユニークなところ(他のサービスでも採用されているかもしれませんが、私は初めてでした)は、コミットやPull requestを契機にしたデプロイフローを実現するためにGitHub Actionsのワークフローを自動生成しコミットするという点だと思います。

Staticなウェブサイトのデプロイというユースケースに対応したプロダクトとしては、Cloudflare PagesやVercelなどがありますが、多くの場合それらはGitHub Appsによってデプロイの自動化を実現しています。これは、迅速に環境構築が完了する一方で、デプロイのプロセスに独自処理を挟むことはできず、必要になった時は開発者がGitHub Actionsのワークフローを作る必要がありました。

APIも実行できる?データベースも接続できる?

今回はStaticなウェブサイトのデプロイだけを試しましたが、Static Web AppはAPIの実行やデータベースの接続もできるようなので、引き続き試していきたいと思います。