使用Terraform通过Microsoft.Storage.BlobCreated事件创建Azure事件订阅筛选

时间:2020-07-20 08:28:40

标签: azure terraform azure-storage azure-storage-blobs terraform-provider-azure

使用Terraform Azure提供程序2.19.0的此Azure Cli示例(from Azure doc)等效于什么

az eventgrid resource event-subscription create -g myResourceGroup \
--provider-namespace Microsoft.Storage --resource-type storageAccounts \
--resource-name myblobstorage12345 --name myFuncSub  \
--included-event-types Microsoft.Storage.BlobCreated \
--subject-begins-with /blobServices/default/containers/images/blobs/ \
--endpoint https://mystoragetriggeredfunction.azurewebsites.net/runtime/webhooks/eventgrid?functionName=imageresizefunc&code=<key>

注意: 在此Terraform Github Issue之后,resource_group_nametopic_name被弃用。

2 个答案:

答案 0 :(得分:1)

看起来Terraform正在使用scope参数来推断部分参数。

所以这在Terraform中是等效的:

resource "azurerm_eventgrid_event_subscription" "my_func_sub" {
  name  = "myFuncSub"
  scope = azurerm_storage_account.images.id

  included_event_types = [
    "Microsoft.Storage.BlobCreated"
  ]

  subject_filter {
    subject_begins_with = "/blobServices/default/containers/${azurerm_storage_container.images.name}/blobs/"
  }

  webhook_endpoint {
    url = "https://mystoragetriggeredfunction.azurewebsites.net/runtime/webhooks/eventgrid?functionName=imageresizefunc&code=<key>"
  }

}

当然,您需要将azurerm_storage_container.images和webhook url替换为实际值。

请务必注意scope。它应该是将发布事件的资源的ID。在我们的例子中,它是一个存储容器。

答案 1 :(得分:0)

恐怕您使用了错误的Azure CLI命令,事件网格只有CLI命令,如az eventgrid event-subscription create,并且它没有资源组的参数。因此,您也不需要在Terraform代码中关心它。

更新:

更多注意参数scope

指定EventGrid事件订阅应在的范围 被创建。

您还可以通过Azure CLI命令--source-resource-id来了解它:

-source-resource-id

事件所针对的Azure资源的完全限定标识符 订阅需要创建。

Terraform不能清楚地描述它。因此,我们需要从CLI或Azure REST API理解它,这是在Azure中创建资源时最终使用的实际东西。

并且Terraform也不支持Azure支持的所有功能。有时我也对Terraform感到困惑。这次,建议您直接使用CLI命令或在Terraform代码中运行CLI命令。