Azure Static Web Apps 数据库连接适用于各种 Azure 数据库。
将数据库连接到静态 Web 应用时,需要配置数据库的防火墙,通过允许来自 Azure 资源的网络访问以接受来自 Static Web Apps 辅助角色的网络访问。 不支持允许特定的 Static Web Apps IP 地址。
如果使用托管标识身份验证类型,则你需要配置静态 Web 应用的托管标识配置文件以访问数据库。
使用此表,详细了解数据库的防火墙和托管标识配置。
名称 | 类型 | 防火墙 | 托管标识 |
---|---|---|---|
Azure Cosmos DB | 标准 | 配置防火墙 | 配置托管标识 |
Azure SQL | 标准 | 配置防火墙 | 配置托管标识 |
Azure Database for MySQL | Flex | 配置防火墙 | 不支持 |
Azure Database for PostgreSQL | Flex | 配置防火墙 | 不支持 |
Azure Database for PostgreSQL(单一) | 单身 | 配置防火墙 | 配置托管标识 |
配置
在 staticwebapp.database.config.json
文件中定义数据库连接的运行时行为。 将数据库链接到静态 Web 应用之前,需要在存储库中创建此文件。 按照约定,此文件存在于存储库根的 swa-db-connections 文件夹中,但如果你愿意,可将其重新定位。
配置文件的目的是:
- 将
/data-api
终结点的路径映射到数据库表或实体 - 公开 REST 或 GraphQL 终结点(或两者)
- 定义实体安全规则
- 控制开发配置设置
如果将 Azure Cosmos DB 与 GraphQL 配合使用,则你还需要提供一个 gql
架构文件。
注意
Static Web Apps 数据库连接需要一个包含配置文件的文件夹。 此文件夹必须包含所有数据库类型的 staticwebapp.database.config.json 配置文件。 对于 Cosmos DB for NoSQL 数据库,还需要一个 staticwebapp.database.schema.gql 架构文件。
按照约定,此文件夹命名为 swa-db-connections,并放置在存储库的根处。 可使用 custom-configuration-folder 替代此约定。
示例配置文件
以下示例配置文件演示如何连接到 Azure SQL 数据库并公开 REST 和 GraphQL 终结点。 有关配置文件及其支持的功能的完整详细信息,请参阅数据 API 生成器文档。
{
"$schema": "https://github.com/Azure/data-api-builder/releases/latest/download/dab.draft.schema.json",
"data-source": {
"database-type": "mssql",
"options": {
"set-session-context": false
},
"connection-string": "@env('DATABASE_CONNECTION_STRING')"
},
"runtime": {
"rest": {
"enabled": true,
"path": "/rest"
},
"graphql": {
"allow-introspection": true,
"enabled": true,
"path": "/graphql"
},
"host": {
"mode": "production",
"cors": {
"origins": ["http://localhost:4280"],
"allow-credentials": false
},
"authentication": {
"provider": "StaticWebApps"
}
}
},
"entities": {
"Person": {
"source": "dbo.MyTestPersonTable",
"permissions": [
{
"actions": ["create", "read", "update", "delete"],
"role": "anonymous"
}
]
}
}
}
properties | 说明 |
---|---|
$schema |
Azure Static Web Apps 用于解释配置文件的数据库 API 生成器的版本。 |
data-source |
特定于目标数据库的配置设置。 database-type 属性接受 mssql 、postgresql 、cosmosdb_nosql 或 mysql 。当数据库连接到 Static Web Apps 资源时,在部署时会覆盖连接字符串。 在本地开发期间,配置文件中定义的连接字符串用于连接到数据库。 |
runtime |
定义公开终结点的部分。 rest 和 graphql 属性控制用于访问相应 API 协议的 URL 片段。 host 配置部分定义特定于开发环境的设置。 请确保 origins 数组包含 localhost 地址和端口。 当数据库连接到 Static Web Apps 资源时,host.mode 被覆盖为 production 。 |
entities |
将 URL 路径映射到数据库实体和表的部分。 用于保护路径的 基于角色的身份验证规则 也保护数据库实体,并可用于定义每个实体的权限。 实体对象还指定实体之间的关系。 |
生成配置文件
使用 Static Web Apps CLI,可生成配置文件存根。
重要
为了提高通过 Static Web Apps CLI 进行部署的安全性,我们引入了一项中断性变更,要求在 2025 年 1 月 15 日前升级到 Static Web Apps CLI 的最新版本 (2.0.2)。
使用 swa db init --database-type <YOUR_DATABASE_TYPE>
生成配置文件。 默认情况下,CLI 在名为 swa-db-connections 的文件夹中创建一个新的 staticwebapp.database.config.json。
支持的数据库类型包括:
mssql
postgresql
cosmosdb_nosql
mysql
自定义配置文件夹
staticwebapp.database.config.json 文件的默认文件夹名称为 swa-db-connections。 若要使用不同的文件夹,需要更新工作流文件,以告知 Static Web Apps 运行时在何处查找配置文件。 使用 data_api_location
属性,可定义配置文件夹的位置。
注意
保存 staticwebapp.database.config.json 文件的文件夹必须位于 Static Web Apps 存储库的根处。
以下代码显示如何对数据库配置文件使用名为 db-config 的文件夹。
app_location: "/src"
api_location: "api"
output_location: "/dist"
data_api_location: "db-config" # Folder holding the staticwebapp.database.config.json file
配置数据库连接
Azure Static Web Apps 必须对数据库具有网络访问权限,数据库连接才能正常工作。 此外,若要使用 Azure 数据库进行本地开发,需要配置数据库,以允许来自你自己的 IP 地址的请求。 以下是适用于所有数据库的通用步骤。 有关数据库类型的特定步骤,请参阅上述链接。
- 在 Azure 门户中转到你的数据库。
- 转到“网络”选项卡。
- 在“防火墙规则”部分下,选择“添加客户端 IPv4 地址”。 此步骤可确保可以将此数据库用于本地开发。
- 选中“允许 Azure 服务和资源访问此服务器”复选框。 此步骤可确保部署的 Static Web Apps 资源可以访问数据库。
- 选择“保存”。
连接数据库
在发布到 Azure 时,将数据库链接到静态 Web 应用会在网站和数据库之间建立生产连接。
在 Azure 门户中打开静态 Web 应用。
在“设置”部分中,选择“数据库连接”。
在“生产”部分下,选择“链接现有数据库”链接。
在“链接现有数据库”窗口中,输入以下值:
properties 值 数据库类型 从下拉列表中选择你的数据库类型。 订阅 从下拉列表中选择你的 Azure 订阅。 资源名称 选择具有所需数据库的数据库服务器名称。 数据库名称 选择要链接到静态 Web 应用的数据库的名称。 身份验证类型 选择连接到数据库所需的连接类型。
相关内容
使用以下数据库之一,将数据库添加到静态 Web 应用:
此外,你还可了解如何将数据 API 生成器与 Azure Static Web Apps 配合使用。