1. ホーム
  2. azure

[解決済み] カンマ区切りの文字列を分割する

2022-03-01 16:41:56

質問

複数の値を持つカンマ区切りの文字列が出力されます。

input.tf

resource "azurerm_app_service" "testap" {
  name                = "MySuperCoolAppServer001"
  location            = "eastus"
  resource_group_name = "notshown"
  app_service_plan_id = "notshown"
}

出力.tf

output "output_tf_testap_outbound_ip_addresses" {
  value = "${azurerm_app_service.testap.outbound_ip_addresses}"
}

そして、コンソールにこのように表示されます。

出力_tf_testap_outbound_ip_addresses =。 1.2.3.4,1.2.3.5,1.2.3.6,1.2.3.7,1.2.3.8,1.2.3.9

リストの最初の項目を取得するにはどうすればよいですか? この場合、値を切り分けたいのですが。

1.2.3.4

実行前にアイテムの総数がわからない場合に、すべてのアイテムの "コレクション" を取得する方法はありますか?(上のリストには6つの項目があります)。

以下のコードではうまくいかないようです。

output "first_ip" {
  value = ["${azurerm_app_service.testap.outbound_ip_addresses[0]}"]
}

=========================================================================== 付加情報

first_ip_no_indexは動作するが、first_ipは動作しない。

output "first_ip_no_index" {
  value = ["${split(",", azurerm_app_service.tf_middle_tier_azurerm_app_service.outbound_ip_addresses)}"]
}

output "first_ip" {
  value = "${split(",", azurerm_app_service.tf_middle_tier_azurerm_app_service.outbound_ip_addresses)[0]}"
}

first_ipがこのエラーを発生させました。

Error reading config for output first_ip: parse error at 1:91: expected "}" but found "["

解決方法は?

を使用することができます。 split() 機能 を使って、文字列をリストに分割することができます。

output "output_tf_testap_outbound_ip_addresses" {
  value = ["${split(",", azurerm_app_service.testap.outbound_ip_addresses)}"]
}

その後で、インデックスを作成するために element(list, index) 構文 :

output "first_ip" {
  value = "${element(split(",", azurerm_app_service.testap.outbound_ip_addresses), 0}"
}

また、通常は list\[index\] 構文 このように

output "first_ip" {
  value = "${split(",", azurerm_app_service.testap.outbound_ip_addresses)[0]}"
}

しかし、Terraform 0.11にはバグがあるようで、このバグによって split 関数を使用すると、次のようなエラーが発生します。

エラーです。Error loading /tmp/tf-split-test/main.tf: 設定読み込みエラー for output foo: parse error at 1:25: expected "}" but found "["

を使用することができます。 local を使用してリストを分割し、それをスライスすることで、この問題を回避できます。 element 関数を使用します。

locals {
  outbound_ip_addresses_list = "${split(",", azurerm_app_service.testap.outbound_ip_addresses)}"
}

output "first_ip" {
  value = "${local.outbound_ip_addresses_list[0]}"
}