Использование Terraform random_id для создания нескольких ресурсов, не работающих должным образом - PullRequest
0 голосов
/ 26 января 2019

Я пытаюсь объединить использование атрибута random_id с метаатрибутом count для создания нескольких учетных записей хранения Azure с уникальными именами.

Код конфигурации:

# Create storage accounts

resource "random_id" "storage_account_name_unique" {
  byte_length = 8
}

resource "azurerm_storage_account" "storage" {
  count                    = "${var.storage_account_count}"
  name                     = "tfsta${lower(random_id.storage_account_name_unique.hex)}"
  resource_group_name      = "${azurerm_resource_group.rg.name}"
  location                 = "${azurerm_resource_group.rg.location}"
  account_kind             = "StorageV2"
  account_tier             = "Standard"
  access_tier              = "Hot"
  account_replication_type = "${var.account_replication_type}"

  network_rules {
    ip_rules                   = ["127.0.0.1"]
    virtual_network_subnet_ids = ["${azurerm_subnet.subnet.id}"] 
  }

  tags = "${var.tags}"
  }

Проблемы с этим кодом:

  1. Terraform генерирует только один random_id и использует его для всех экземпляров учетной записи хранения, созданных во время операции применения terraform.
  2. Terraform «одурачен», полагая, что он создал несколько учетных записей хранения, однако создается только одна учетная запись хранения

Выбранный Terraform Применить вывод:

Этот вывод показывает, что Terraform думает, что создает три отдельные учетные записи хранения с одинаковым random_id. План успешно применен, но в Azure создана только одна учетная запись хранения.

random_id.storage_account_name_unique: Creating...
  b64:         "" => "<computed>"
  b64_std:     "" => "<computed>"
  b64_url:     "" => "<computed>"
  byte_length: "" => "8"
  dec:         "" => "<computed>"
  hex:         "" => "<computed>"
random_id.storage_account_name_unique: Creation complete after 0s (ID: kYl9WvpTSso)

azurerm_storage_account.storage[2]: Creating...
  access_tier:                                           "" => "Hot"
  account_encryption_source:                             "" => "Microsoft.Storage"
  account_kind:                                          "" => "StorageV2"
  account_replication_type:                              "" => "LRS"
  account_tier:                                          "" => "Standard"
  enable_blob_encryption:                                "" => "true"
  enable_file_encryption:                                "" => "true"
  identity.#:                                            "" => "<computed>"
  location:                                              "" => "westus2"
  name:                                                  "" => "tfsta91897d5afa534aca"
  network_rules.#:                                       "" => "1"
  network_rules.0.bypass.#:                              "" => "<computed>"
  network_rules.0.ip_rules.#:                            "" => "1"
  network_rules.0.ip_rules.3619153832:                   "" => "127.0.0.1"
  network_rules.0.virtual_network_subnet_ids.#:          "" => "1"
  network_rules.0.virtual_network_subnet_ids.3223410521: "" => "/subscriptions/f6d69ee2-34d5-4ca8-a143-7a2fc1aeca55/resourceGroups/hdi-dev-rg/providers/Microsoft.Network/virtualNetworks/hdi-dev-vnet/subnets/hdinsight"
  primary_access_key:                                    "<sensitive>" => "<sensitive>"
  primary_blob_connection_string:                        "<sensitive>" => "<sensitive>"
  primary_blob_endpoint:                                 "" => "<computed>"
  primary_connection_string:                             "<sensitive>" => "<sensitive>"
  primary_file_endpoint:                                 "" => "<computed>"
  primary_location:                                      "" => "<computed>"
  primary_queue_endpoint:                                "" => "<computed>"
  primary_table_endpoint:                                "" => "<computed>"
  resource_group_name:                                   "" => "hdi-dev-rg"
  secondary_access_key:                                  "<sensitive>" => "<sensitive>"
  secondary_blob_connection_string:                      "<sensitive>" => "<sensitive>"
  secondary_blob_endpoint:                               "" => "<computed>"
  secondary_connection_string:                           "<sensitive>" => "<sensitive>"
  secondary_location:                                    "" => "<computed>"
  secondary_queue_endpoint:                              "" => "<computed>"
  secondary_table_endpoint:                              "" => "<computed>"
  tags.%:                                                "" => "3"
  tags.costcenter:                                       "" => "Unknown"
  tags.environment:                                      "" => "Dev"
  tags.project:                                          "" => "Unknown"
azurerm_storage_account.storage[1]: Creating...
  access_tier:                                           "" => "Hot"
  account_encryption_source:                             "" => "Microsoft.Storage"
  account_kind:                                          "" => "StorageV2"
  account_replication_type:                              "" => "LRS"
  account_tier:                                          "" => "Standard"
  enable_blob_encryption:                                "" => "true"
  enable_file_encryption:                                "" => "true"
  identity.#:                                            "" => "<computed>"
  location:                                              "" => "westus2"
  name:                                                  "" => "tfsta91897d5afa534aca"
  network_rules.#:                                       "" => "1"
  network_rules.0.bypass.#:                              "" => "<computed>"
  network_rules.0.ip_rules.#:                            "" => "1"
  network_rules.0.ip_rules.3619153832:                   "" => "127.0.0.1"
  network_rules.0.virtual_network_subnet_ids.#:          "" => "1"
  network_rules.0.virtual_network_subnet_ids.3223410521: "" => "/subscriptions/f6d69ee2-34d5-4ca8-a143-7a2fc1aeca55/resourceGroups/hdi-dev-rg/providers/Microsoft.Network/virtualNetworks/hdi-dev-vnet/subnets/hdinsight"
  primary_access_key:                                    "<sensitive>" => "<sensitive>"
  primary_blob_connection_string:                        "<sensitive>" => "<sensitive>"
  primary_blob_endpoint:                                 "" => "<computed>"
  primary_connection_string:                             "<sensitive>" => "<sensitive>"
  primary_file_endpoint:                                 "" => "<computed>"
  primary_location:                                      "" => "<computed>"
  primary_queue_endpoint:                                "" => "<computed>"
  primary_table_endpoint:                                "" => "<computed>"
  resource_group_name:                                   "" => "hdi-dev-rg"
  secondary_access_key:                                  "<sensitive>" => "<sensitive>"
  secondary_blob_connection_string:                      "<sensitive>" => "<sensitive>"
  secondary_blob_endpoint:                               "" => "<computed>"
  secondary_connection_string:                           "<sensitive>" => "<sensitive>"
  secondary_location:                                    "" => "<computed>"
  secondary_queue_endpoint:                              "" => "<computed>"
  secondary_table_endpoint:                              "" => "<computed>"
  tags.%:                                                "" => "3"
  tags.costcenter:                                       "" => "Unknown"
  tags.environment:                                      "" => "Dev"
  tags.project:                                          "" => "Unknown"
azurerm_storage_account.storage[0]: Creating...
  access_tier:                                           "" => "Hot"
  account_encryption_source:                             "" => "Microsoft.Storage"
  account_kind:                                          "" => "StorageV2"
  account_replication_type:                              "" => "LRS"
  account_tier:                                          "" => "Standard"
  enable_blob_encryption:                                "" => "true"
  enable_file_encryption:                                "" => "true"
  identity.#:                                            "" => "<computed>"
  location:                                              "" => "westus2"
  name:                                                  "" => "tfsta91897d5afa534aca"
  network_rules.#:                                       "" => "1"
  network_rules.0.bypass.#:                              "" => "<computed>"
  network_rules.0.ip_rules.#:                            "" => "1"
  network_rules.0.ip_rules.3619153832:                   "" => "127.0.0.1"
  network_rules.0.virtual_network_subnet_ids.#:          "" => "1"
  network_rules.0.virtual_network_subnet_ids.3223410521: "" => "/subscriptions/f6d69ee2-34d5-4ca8-a143-7a2fc1aeca55/resourceGroups/hdi-dev-rg/providers/Microsoft.Network/virtualNetworks/hdi-dev-vnet/subnets/hdinsight"
  primary_access_key:                                    "<sensitive>" => "<sensitive>"
  primary_blob_connection_string:                        "<sensitive>" => "<sensitive>"
  primary_blob_endpoint:                                 "" => "<computed>"
  primary_connection_string:                             "<sensitive>" => "<sensitive>"
  primary_file_endpoint:                                 "" => "<computed>"
  primary_location:                                      "" => "<computed>"
  primary_queue_endpoint:                                "" => "<computed>"
  primary_table_endpoint:                                "" => "<computed>"
  resource_group_name:                                   "" => "hdi-dev-rg"
  secondary_access_key:                                  "<sensitive>" => "<sensitive>"
  secondary_blob_connection_string:                      "<sensitive>" => "<sensitive>"
  secondary_blob_endpoint:                               "" => "<computed>"
  secondary_connection_string:                           "<sensitive>" => "<sensitive>"
  secondary_location:                                    "" => "<computed>"
  secondary_queue_endpoint:                              "" => "<computed>"
  secondary_table_endpoint:                              "" => "<computed>"
  tags.%:                                                "" => "3"
  tags.costcenter:                                       "" => "Unknown"
  tags.environment:                                      "" => "Dev"
  tags.project:                                          "" => "Unknown"
azurerm_storage_account.storage[0]: Creation complete after 21s (ID: /subscriptions/f6d69ee2-34d5-4ca8-a143-.../storageAccounts/tfsta91897d5afa534aca)
azurerm_storage_account.storage[2]: Creation complete after 22s (ID: /subscriptions/f6d69ee2-34d5-4ca8-a143-.../storageAccounts/tfsta91897d5afa534aca)
azurerm_storage_account.storage[1]: Creation complete after 23s (ID: /subscriptions/f6d69ee2-34d5-4ca8-a143-.../storageAccounts/tfsta91897d5afa534aca)

Ответы [ 2 ]

0 голосов
/ 27 января 2019

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

resource "random_id" "storage_account_name_unique" {
  count = "${var.storage_account_count}"
  byte_length = 8
}

output "random"{
value=["${random_id.storage_account_name_unique.*.hex}"]
}

provider "random" {
  version="2.0"
}

resource "null_resource" "echo" {
  count = "${var.storage_account_count}"
  provisioner "local-exec" {     
    command = 
      "echo ${element(random_id.storage_account_name_unique.*.hex, count.index)}"
  }
}

Это дает вам:

null_resource.echo[0]: Creating...
null_resource.echo[1]: Creating...
null_resource.echo[0]: Provisioning with 'local-exec'...
null_resource.echo[1]: Provisioning with 'local-exec'...
null_resource.echo[1] (local-exec): Executing: ["cmd" "/C" "echo e5ddcf9fb82798f2"]
null_resource.echo[0] (local-exec): Executing: ["cmd" "/C" "echo ceb231a41c8cdb24"]
null_resource.echo[1] (local-exec): e5ddcf9fb82798f2
null_resource.echo[0] (local-exec): ceb231a41c8cdb24
null_resource.echo[1]: Creation complete after 0s (ID: 3289535031294242492)
null_resource.echo[0]: Creation complete after 0s (ID: 4611439113584915035)

Apply complete! Resources: 2 added, 0 changed, 0 destroyed.

Outputs:

random = [
    ceb231a41c8cdb24,
    e5ddcf9fb82798f2
]
0 голосов
/ 27 января 2019

Я думаю, что проблема одна и та же, независимо от того, используете ли Terraform или Azure REST API для создания учетной записи хранения.Это показано в Azure REST API - Создать :

Асинхронно создает новую учетную запись хранения с указанными параметрами.Если учетная запись уже создана и последующий запрос на создание выдан с другими свойствами, свойства учетной записи будут обновлены.Если учетная запись уже создана и последующий запрос на создание или обновление будет выдан с точно таким же набором свойств, запрос будет выполнен успешно.

Таким образом, когда создается первая учетная запись хранения, операция действует какобычный.Но последующее создание с тем же именем будет следовать правилу выше.Наконец, только одна учетная запись хранения сохраняется с одним именем.Если вы хотите создать более одной учетной записи хранения, вам следует использовать разные имена.

...