Terraform с Azure - Как создать учетную запись хранения?
После одного дня борьбы с Terraform я здесь плачу о помощи.
Terraform v0.11.11
+ provider.azurerm v1.20.0
Я пытаюсь создать новую группу ресурсов и учетную запись хранения с нуля. Похоже, что можно создать группу ресурсов без учетной записи хранения:
resource "azurerm_resource_group" "rg1" {
name = "myResourceGroup"
location = "West Europe"
}
группа ресурсов создается, и на данный момент учетной записи хранения не существует. Так что на данный момент я счастлив. Я выполняю команду " уничтожить" и снова начинаю с нуля.
Теперь, в коде, после создания группы ресурсов, я хотел бы создать учетную запись хранения, так как другие ресурсы позже будут ссылаться на нее. Единственная ссылка, в которой нуждается azurerm_storage_account, - это ссылка на группу ресурсов.
информация о azurerm_storage_account https://www.terraform.io/docs/providers/azurerm/d/storage_account.html
Код выглядит следующим образом:
resource "azurerm_resource_group" "rg1" {
name = "myResourceGroup"
location = "West Europe"
}
data "azurerm_storage_account" "stacc1" {
name = "mystorageaccount"
resource_group_name = "${azurerm_resource_group.rg1.name}"
}
Я запускаю команду плана и получаю следующий вывод:
$ terraform plan
Refreshing Terraform state in-memory prior to plan...
The refreshed state will be used to calculate this plan, but will not be
persisted to local or remote state storage.
------------------------------------------------------------------------
An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
+ create
<= read (data resources)
Terraform will perform the following actions:
<= data.azurerm_storage_account.stacc1
id: <computed>
access_tier: <computed>
account_encryption_source: <computed>
account_kind: <computed>
account_replication_type: <computed>
account_tier: <computed>
custom_domain.#: <computed>
enable_blob_encryption: <computed>
enable_file_encryption: <computed>
enable_https_traffic_only: <computed>
location: <computed>
name: "mystorageaccount"
primary_access_key: <computed>
primary_blob_connection_string: <computed>
primary_blob_endpoint: <computed>
primary_connection_string: <computed>
primary_file_endpoint: <computed>
primary_location: <computed>
primary_queue_endpoint: <computed>
primary_table_endpoint: <computed>
resource_group_name: "myResourceGroup"
secondary_access_key: <computed>
secondary_blob_connection_string: <computed>
secondary_blob_endpoint: <computed>
secondary_connection_string: <computed>
secondary_location: <computed>
secondary_queue_endpoint: <computed>
secondary_table_endpoint: <computed>
tags.%: <computed>
+ azurerm_resource_group.rg1
id: <computed>
location: "westeurope"
name: "myResourceGroup"
tags.%: <computed>
Plan: 1 to add, 0 to change, 0 to destroy.
он говорит, что будет искать (а не создавать) ресурс data.azurerm_storage_account.stacc1, и, очевидно, выполнение команды apply завершится с сообщением:
Ошибка: ошибка при применении плана:
1 ошибка (ы) произошла:
- data.azurerm_storage_account.stacc1: data.azurerm_storage_account.stacc1: Ошибка: не найдена учетная запись хранения "mystorageaccount" (группа ресурсов "myResourceGroup")
потому что он не нашел упомянутую учетную запись хранения.
Все это приводит к моему вопросу: "Как я могу создать учетную запись хранения с Terraform в Azure?"
1 ответ
Вам нужно использовать ресурс, а не объект данных. Это верно для всех ресурсов. Сущность данных должна получать данные о ресурсах, а не создавать их.
resource "azurerm_resource_group" "testrg" {
name = "resourceGroupName"
location = "westus"
}
resource "azurerm_storage_account" "testsa" {
name = "storageaccountname"
resource_group_name = "${azurerm_resource_group.testrg.name}"
location = "westus"
account_tier = "Standard"
account_replication_type = "GRS"
tags {
environment = "staging"
}
}
https://www.terraform.io/docs/providers/azurerm/r/storage_account.html