如何解决Azure / Terraform-具有存储队列的azurerm_monitor_autoscale_setting
我想创建一个规则来在队列中的消息数大于某个值时扩展应用程序服务计划。
队列定义看起来像这样:
resource "azurerm_storage_queue" "myqueue" {
name = "myqueue"
storage_account_name = "storageaccountname"
}
缩放规则如下所示:
rule {
metric_trigger {
metric_name = "ApproximateMessageCount"
metric_resource_id = azurerm_storage_queue.myqueue.id
time_grain = "PT1M"
statistic = "Average"
time_window = "PT1M"
time_aggregation = "Average"
operator = "GreaterThanOrEqual"
threshold = 100
}
scale_action {
direction = "Increase"
type = "ChangeCount"
value = "1"
cooldown = "PT10M"
}
}
问题出在metric_resource_id
中-我不确定确切要使用哪个属性或ID。错误消息为The number of path segments is not divisible by 2
。我相信这是因为队列的ID只是它的名称,而它的resource_id应该类似于/subscriptions/xxxxxxx/resourceGroups/xxxxxx/providers/Microsoft.Storage/storageAccounts/storageaccountname/services/queue/queues/myqueue"
,但我不确定如何从terraform中获取它。
解决方法
azurerm_storage_queue.myqueue.id
的输出是网址格式https://storageaccountname.queue.core.windows.net/mysamplequeue
。
metric_resource_id
要求发出度量标准的资源的资源ID。据我所知,我们无法直接从Terraform资源属性中获取资源格式,但可以将资源ID自行构建为
metric_resource_id = join("/",["${azurerm_storage_account.example.id}","services/queue/queues","mysamplequeue"])
例如,
rule {
metric_trigger {
metric_name = "ApproximateMessageCount"
metric_resource_id = join("/","myqueue"])
time_grain = "PT1M"
statistic = "Average"
time_window = "PT5M"
time_aggregation = "Average"
operator = "GreaterThanOrEqual"
threshold = 100
}