0

アプリ サービスの azurerm_monitor_metric_alert をセットアップしようとしています。terraform が構築しているすべてのアプリ サービスをカバーする 1 つのアラートを定義したいと考えています。

ビルドするアプリ サービスには 2 つのディメンションがあります。1 つはリージョンに基づいており (最大 2 つ)、もう 1 つは各アプリ サービス プランにデプロイされているアプリ サービスの数に基づいています (不明な数、以下の例では 2 つ)。

私は次のようなことができると思っていました:

resource "azurerm_monitor_metric_alert" "disk1" {
  name                = "AppService-diskSpace-Sev1"
  resource_group_name = azurerm_resource_group.location1[0].name
  scopes              = ["${azurerm_app_service.location1.*.id}","${azurerm_app_service.location2.*.id}"]
  description         = "Disk space over 90 percent"
  window_size         = "PT6H"
  frequency           = "PT1H"

  criteria {
    metric_namespace = "Microsoft.Web/sites"
    metric_name      = "FileSystemUsage"
    aggregation      = "Average"
    operator         = "GreaterThan"
    threshold        = 241591910400 # 90% of 250Gb in bytes
  }
  severity         = 1
}

しかし、次のようなエラーが表示されます。

Error: Incorrect attribute value type

  on ..\..\..\infra\terraform\global\web\main.tf line 343, in resource "azurerm_monitor_metric_alert" "disk1":
 343:   scopes              = ["${azurerm_app_service.location1.*.id}","${azurerm_app_service.location2.*.id}"]
    |----------------
    | azurerm_app_service.location is tuple with 2 elements
    | azurerm_app_service.location2 is tuple with 2 elements

Inappropriate value for attribute "scopes": element 0: string required.

さまざまなオプションをいくつか試しましたが、すべてエラーが発生します、とドキュメントは言います

「メトリック基準を適用するリソース ID の文字列のセット」

しかし、このコンテキストで「文字列のセット」が何を意味するのかわかりません。

--編集以下のコメントの後、提案されていることを望んでいたことを試しましたが、まだエラーが発生しています:

concat(azurerm_app_service.location.*.id)

戻り値

Error: scopes: attribute supports 1 item maximum, config has 2 declared. 
["${azurerm_app_service.location.*.id}"]

戻り値

Inappropriate value for attribute "scopes": element 0: string required.
"${azurerm_app_service.web.*.id}"

戻り値

Error: scopes: attribute supports 1 item maximum, config has 2 declare
4

1 に答える 1

1

この質問はかなり古いですが、まだ答えがありません。同様の問題があったため、調査結果を示します。

まず、splat 式の構文が terraform 0.12 で変更されたため、resource.*.attribute は resource[*].attribute になりました。これはリストを返すため、「不適切な値」エラーが発生します。

scopes = concat(azurerm_app_service.location1[*].id, azurerm_app_service.location2[*].id)

正しいでしょう。

スコープに複数の値を使用する場合、「スコープ: 属性は最大 1 項目をサポートし、構成には 2 つの宣言があります」という他のエラーが発生するのは、他の必須属性が原因です。属性 target_resource_type および target_resource_location で、このリソースのプロバイダー ドキュメントを参照してください。複数のスコープを使用する場合は、次の 2 つが必要です

使用していないため、Azure でこれをテストできませんでしたが、役立つことを願っています。

于 2021-02-11T09:18:10.313 に答える