Azure Static Web Apps を使用したデータベースへの接続 (プレビュー)
Azure Static Web Apps データベース接続機能を使用すると、カスタム サーバー側コードを記述することなく、Static Web Apps からデータベースにアクセスできます。
Web アプリケーションとデータベース間の接続を作成したら、CRUD 操作、組み込み承認、およびリレーションシップを完全にサポートしてデータを操作できます。
データ API ビルダーに基づいて、Azure Static Web Apps は REST 要求と GraphQL 要求を受け取り、データベース クエリに変換します。
データベース接続でサポートされる機能は次のとおりです。
機能 | 説明 |
---|---|
セキュリティの統合 | Azure Static Web Apps 認証および承認セキュリティ モデルとの組み込み統合。 API エンドポイントでは、ルートのセキュリティ保護に使用されるのと同じロール ベース セキュリティを使用できます。 |
完全な CRUD ベースの操作 | アプリケーション内のデータを操作する方法の例については、Azure Cosmos DB、Azure SQL、MySQL、またはPostgreSQL に関するチュートリアルを参照してください。 |
SQL と NoSQL がサポートされます | リレーショナル データベースとドキュメント データベースをアプリケーションのデータベースとして使用できます。 |
サーバーレス アーキテクチャ | 接続は 0 から 1 ワーカーにスケーリングされます (プレビュー中)。 |
データベースのリレーションシップ | GraphQL エンドポイントでのみサポートされます。 |
CLI サポート | Static Web Apps CLI を使用したローカル開発。 --data-api-location オプションを使用して、開発中のデータ API への要求をクラウドで処理するのと同じように処理する。 |
サポートされるデータベース
次の表は、さまざまなリレーショナル データベースと NoSQL データベースのサポートを示しています。
名前 | 種類 | 説明 | REST | GraphQL |
---|---|---|---|---|
Azure Cosmos DB | Standard | NoSQL とあらゆるスケールのリレーショナル データベースの両方に対応するグローバルに分散されたデータベース プラットフォームです。 標準構成に加えて、GraphQL エンドポイントには gql スキーマ ファイルが必要です。 |
✔ | |
Azure SQL | Standard | Azure クラウドで SQL Server データベース エンジンを使用する、管理され、セキュリティで保護されたインテリジェントな製品のファミリ。 | ✔ | ✔ |
Azure Database for MySQL | Flex | MySQL Community Edition に基づく Microsoft クラウドのリレーショナル データベース サービス | ✔ | ✔ |
Azure Database for PostgreSQL | Flex | 予測可能なパフォーマンスと動的なスケーラビリティを実現しながら、ミッション クリティカルなワークロードを処理するフル マネージドのサービスとしての PostgreSQL データベース。 | ✔ | ✔ |
Azure Database for PostgreSQL - (単一) | 単一 | フル マネージド PostgreSQL データベース。 | ✔ | ✔ |
データベース アクセスには、次の接続の種類を使用できます。
- 接続文字列
- ユーザー割り当てマネージド ID
- システム割り当てマネージド ID
エンドポイントの場所
データ エンドポイントへのアクセスは、/data-api
パスから利用できます。
次の表は、要求が Static Web Apps のさまざまな部分にどのようにルーティングされるかを示しています。
パス | 説明 |
---|---|
example.com/api/* |
API 関数 |
example.com/data-api/* |
REST 要求と GraphQL 要求をサポートするデータベース接続エンドポイント。 |
example.com/* |
静的コンテンツ |
Web サイトでデータベース接続を構成するときに、/data-api/*
ルートの REST または GraphQL サフィックスを構成できます。 /data-api
プレフィックスは Static Web Apps の規則であり、変更することはできません。
構成
Static Web Apps でデータベース接続を構成するには、2 つの手順があります。 Azure portal で Static Web Apps にデータベースを接続し、データベース接続構成ファイルを更新する必要があります。
詳細については、「Azure Static Web Apps でのデータベース接続の構成」を参照してください。
ローカル開発
Azure Static Web Apps CLI (SWA CLI) には、ローカル開発中にデータベース接続を操作するためのサポートが含まれています。
CLI はローカル /data-api
エンドポイントをアクティブ化し、ポート 4280
からデータベース アクセス用の適切なポートに要求をプロキシします。
データベース接続で SWA CLI を起動するコマンドの例を次に示します。
swa start ./src --data-api-location swa-db-connections
このコマンドは、src ディレクトリで SWA CLI を起動します。 --data-api-location
オプションは、swa-db-connections というフォルダーが staticwebapp.database.config.json ファイルを保持していることを CLI に伝えます。
Note
開発中に接続文字列を使用して認証する場合は、env()
関数を使用して環境変数から接続文字列を読み取ります。 env
関数に渡される文字列は、引用符で囲む必要があります。
ロールベースのセキュリティ
staticwebapp.database.config.json ファイルでエンティティを定義する場合は、エンティティ エンドポイントへのアクセスに必要なロールの一覧を指定できます。
次の構成フラグメントでは、注文エンティティのすべてのアクション (create
、read
、update
、delete
) にアクセスするには、管理者ロールが必要です。
{
...
"entities": {
"Orders": {
"source": "dbo.Orders",
"permissions": [
{
"actions": ["*"],
"role": "admin"
}
]
}
}
...
}
ロールを必要とするエンドポイントを呼び出す場合は、次の条件が必要です。
現在のユーザーは認証されている必要があります。
現在のユーザーは、必要なロールのメンバーである必要があります。
REST または GraphQL 要求には、
X-MS-API-ROLE
のキーを持つヘッダーと、エンティティ構成規則に記載されているものと一致するロール名の値を含める必要があります。たとえば、次のスニペットは、要求ヘッダーで管理者ロールを渡す方法を示しています。
{ method: "POST", headers: { "Content-Type": "application/json", "X-MS-API-ROLE": "admin" }, body: JSON.stringify(requestPayload) }
制約
- データベースは、Azure のインフラストラクチャからアクセスできる必要があります。
- パブリック プレビュー中、データベース接続は 0 から 1 のデータベース ワーカーにスケーリングされます。