快速入门:使用 Bicep 将 Blob 存储事件路由到 Web 终结点
在本文中,你将使用 Bicep 文件创建 Blob 存储帐户、订阅该 Blob 存储的事件,并触发事件来查看结果。 通常,你会将事件发送到处理事件数据并执行操作的终结点。 但是,为了简化本文,你将事件发送到收集并显示消息的 Web 应用。
备注
如果你是 Azure 事件网格的新用户,请参阅什么是 Azure 事件网格,以便在学习本教程之前大致了解该服务。
Bicep 是一种特定于域的语言 (DSL),使用声明性语法来部署 Azure 资源。 它提供简明的语法、可靠的类型安全性以及对代码重用的支持。 Bicep 会针对你的 Azure 基础结构即代码解决方案提供最佳创作体验。
如果没有 Azure 订阅,可在开始前创建一个试用帐户。
在订阅 Blob 存储的事件之前,让我们创建事件消息的终结点。 通常情况下,终结点基于事件数据执行操作。 为了简化此快速入门,将部署用于显示事件消息的预生成 Web 应用。 所部署的解决方案包括应用服务计划、应用服务 Web 应用和 GitHub 中的源代码。
选择“部署到 Azure”将解决方案部署到你的订阅。 在 Azure 门户中,为参数提供值。
部署可能需要几分钟才能完成。 部署成功后,请查看 Web 应用以确保它正在运行。 在 Web 浏览器中导航到
https://<your-site-name>.chinacloudsites.cn
你看到站点,但尚未有任何事件发布到站点。
本快速入门中使用的 Bicep 文件来自 Azure 快速入门模板。
@description('Provide a unique name for the Blob Storage account.')
param storageAccountName string = 'storage${uniqueString(resourceGroup().id)}'
@description('Provide a location for the Blob Storage account that supports Event Grid.')
param location string = resourceGroup().location
@description('Provide a name for the Event Grid subscription.')
param eventSubName string = 'subToStorage'
@description('Provide the URL for the WebHook to receive events. Create your own endpoint for events.')
param endpoint string
@description('Provide a name for the system topic.')
param systemTopicName string = 'mystoragesystemtopic'
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-01-01' = {
name: storageAccountName
location: location
sku: {
name: 'Standard_LRS'
}
kind: 'StorageV2'
properties: {
accessTier: 'Hot'
minimumTlsVersion: 'TLS1_2'
supportsHttpsTrafficOnly: true
allowBlobPublicAccess: false
}
}
resource systemTopic 'Microsoft.EventGrid/systemTopics@2023-12-15-preview' = {
name: systemTopicName
location: location
identity: {
type: 'SystemAssigned'
}
properties: {
source: storageAccount.id
topicType: 'Microsoft.Storage.StorageAccounts'
}
}
resource eventSubscription 'Microsoft.EventGrid/systemTopics/eventSubscriptions@2023-12-15-preview' = {
parent: systemTopic
name: eventSubName
properties: {
destination: {
properties: {
endpointUrl: endpoint
}
endpointType: 'WebHook'
}
filter: {
includedEventTypes: [
'Microsoft.Storage.BlobCreated'
'Microsoft.Storage.BlobDeleted'
]
}
}
}
output name string = eventSubscription.name
output resourceId string = eventSubscription.id
output resourceGroupName string = resourceGroup().name
output location string = location
该 Bicep 文件中定义了两个 Azure 资源:
- Microsoft.Storage/storageAccounts:创建 Azure 存储帐户。
- Microsoft.EventGrid/systemTopics:使用指定的存储帐户名称创建系统主题。
- Microsoft.EventGrid/systemTopics/eventSubscriptions:为系统主题创建 Azure 事件网格订阅。
将该 Bicep 文件另存为本地计算机上的 main.bicep。
使用 Azure CLI 或 Azure PowerShell 来部署该 Bicep 文件。
az group create --name exampleRG --location chinanorth2 az deployment group create --resource-group exampleRG --template-file main.bicep --parameters endpoint=<endpoint>
备注
将“<endpoint>”替换为 Web 应用的 URL,并将
api/updates
追加到 URL。部署完成后,应会看到一条指出部署成功的消息。
备注
可在此处找到更多 Azure 事件网格模板示例。
再次查看 Web 应用,并注意到系统已向该应用发送了订阅验证事件。 选择眼睛图标以展开事件数据。 事件网格发送验证事件,以便终结点可以验证它是否想要接收事件数据。 Web 应用包含用于验证订阅的代码。
现在,让我们触发一个事件,看事件网格如何将消息分发到终结点。
通过上传一个文件来为 Blob 存储触发一个事件。 该文件不需要有任何特定内容。 本文假定你有一个名为 testfile.txt 的文件,但是你可以使用任何文件。
将文件上传到 Azure Blob 存储时,事件网格会向你在订阅时配置的终结点发送一条消息。 消息采用 JSON 格式,它包含一个或多个事件的数组。 在以下示例中,JSON 消息包含一个事件的数组。 查看你的 Web 应用,将会看到已收到了一个 blob 已创建事件。
不再需要资源组时,可将其删除。
有关 Azure 资源管理器模板和 Bicep 的详细信息,请参阅以下文章: