Share via


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 DBAzure SQLMySQL、または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 ファイルでエンティティを定義する場合は、エンティティ エンドポイントへのアクセスに必要なロールの一覧を指定できます。

次の構成フラグメントでは、注文エンティティのすべてのアクション (createreadupdatedelete) にアクセスするには、管理者ロールが必要です。

{
...
"entities": { 
  "Orders": { 
    "source": "dbo.Orders", 
    "permissions": [ 
      { 
        "actions": ["*"], 
        "role": "admin" 
      }
    ]
 }
}
...
}

ロールを必要とするエンドポイントを呼び出す場合は、次の条件が必要です。

  1. 現在のユーザーは認証されている必要があります。

  2. 現在のユーザーは、必要なロールのメンバーである必要があります。

  3. 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 のデータベース ワーカーにスケーリングされます。

次のステップ