Создание подписки на событие для учетной записи хранения Azure в Terraform - PullRequest
0 голосов
/ 12 января 2020

Я пытаюсь создать следующие ресурсы в Azure, используя Terraform и Поставщик Terraform для Azure.

  • Создать учетную запись хранения для хранения больших двоичных объектов.
  • Создание подписки на события, которая будет вызывать события, связанные с деятельностью больших двоичных объектов.

При запуске сценариев terraform я получаю следующую ошибку

Ошибка: Ошибка при создании / обновлении подписки на событие EventGrid «evtFileReceived» (Область »/ subscription / c17cf5ee-d3d7-4f64-b863-f2a4d6948594 / resourceGroups / dominos-doodle"): eventgrid.EventSubscriptionClient # CreateOrUpdate: Запрос статуса Status: 400: - Исходная ошибка: Code = "InvalidRequest" Message = "Указанное свойство topi c не соответствует ожидаемому topi c из области подписки на событие."

Как это исправить? , Поиск в Google не дал результатов.

Сценарий, сгенерировавший ошибку, выглядит следующим образом. Шаг, который вызвал ошибку: terraform apply

Очевидно, один из способов - использовать шаблоны ARM для достижения этой цели, но я пытаюсь выяснить, можно ли ее создать с помощью собственных скриптов Terraform. Я сослался на Terraform Docs и создал следующее.

variable "inp_resource_group_name" { }
variable "inp_geo_location" { }
variable "inp_account_name" { }
variable "inp_az_subscription_id" { }
variable "inp_resource_group_id" { }

resource "azurerm_storage_account" "cave" {
  name                     = var.inp_account_name
  resource_group_name      = var.inp_resource_group_name
  location                 = var.inp_geo_location
  account_tier             = "Standard"
  account_replication_type = "LRS"
  account_kind             = "StorageV2"
}

resource "azurerm_storage_container" "validName" {
  name                  = validName"
  resource_group_name   = var.inp_resource_group_name
  storage_account_name  = var.inp_account_name
  container_access_type = "blob"
}

resource "azurerm_eventgrid_event_subscription" "evtFileReceived" {
  name  = "evtFileReceived"
  scope = var.inp_resource_group_id
  topic_name="/subscriptions/${var.inp_az_subscription_id}/resourceGroups/${var.inp_resource_group_name}/providers/Microsoft.Storage/storageAccounts/{var.inp_account_name}"
  webhook_endpoint {
    url = "https://myendpoint.that.works.well.across.all.osi.layers"
  }
}

Ответы [ 2 ]

0 голосов
/ 24 января 2020

У меня была похожая проблема, и я решил ее, указав в качестве идентификатора учетной записи хранения область и имя темы. Так что в вашем примере, я думаю, что это должно работать;

resource "azurerm_eventgrid_event_subscription" "evtFileReceived" {
  name  = "evtFileReceived"
  scope = azurerm_storage_account.cave.id
  topic_name = azurerm_storage_account.cave.id
  webhook_endpoint {
    url = "https://myendpoint.that.works.well.across.all.osi.layers"
  }
}
0 голосов
/ 13 января 2020

Согласно сообщению об ошибке, это означает, что свойство topic_name в ресурсе azurerm_eventgrid_event_subscription не соответствует ожидаемому topi c из подписки на событие scope .

В этом случае область должна быть создана на уровне учетной записи хранения, так как topi c связан с ресурсом учетной записи хранения. Это будет выглядеть так:

resource "azurerm_eventgrid_event_subscription" "evtFileReceived" {
  name  = "evtFileReceived"
  scope = ${azurerm_storage_account.cave.id}
  topic_name="/subscriptions/${var.inp_az_subscription_id}/resourceGroups/${var.inp_resource_group_name}/providers/Microsoft.Storage/storageAccounts/{azurerm_storage_account.cave.name}"
  webhook_endpoint {
    url = "https://myendpoint.that.works.well.across.all.osi.layers"
  }
}

Или, обратитесь к этой проблеме GitHub , вы можете использовать scope с идентификатором сетки событий topi c.

Понял, что группа ресурсов в этом случае является искусством типа темы для подписки, а не ссылкой, где создать ресурс подписки. Похоже, что "topic_name" и "resource_group_name" являются устаревшими параметрами. Вместо этого используйте «scope» с идентификатором сетки событий topi c.

Это будет выглядеть так:

resource "azurerm_eventgrid_topic" "example" {
  name                = "my-eventgrid-topic"
  location            = "${azurerm_resource_group.default.location}"
  resource_group_name = "${azurerm_resource_group.default.name}"

}

resource "azurerm_eventgrid_event_subscription" "evtFileReceived" {
  name  = "evtFileReceived"
  scope = "${azurerm_eventgrid_topic.example.id}"

 webhook_endpoint {
        url = "https://myendpoint.that.works.well.across.all.osi.layers"
      }

}

Пожалуйста, дайте мне знать, если это работает или нужна дополнительная помощь .

...