Terraform с Azure - как создать учетную запись хранения?

После однодневной борьбы с Terraform я здесь и плачу о помощи.

Terraform v0.11.11
+ provider.azurerm v1.20.0

Я пытаюсь создать новую группу ресурсов и учетную запись хранения с нуля. Похоже, что можно создать группу ресурсов без учетной записи хранения:

resource "azurerm_resource_group" "rg1" {
  name     = "myResourceGroup"
  location = "West Europe"
}

группа ресурсов создается, и в настоящий момент нет учетной записи хранения. Так что на данный момент я счастлив. Я выполняю destroy и снова начинаю с нуля.

Теперь, в коде, после создания группы ресурсов, я хотел бы создать учетную запись хранения, так как позже другим ресурсам потребуется ссылаться на нее. Единственная ссылка, которая требуется 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}"
}

Я запускаю команду plan и получаю следующий результат:

$ 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?»


person tridy    schedule 08.01.2019    source источник


Ответы (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

person 4c74356b41    schedule 08.01.2019
comment
Спасибо! конечно, вы правы! Думаю, в какой-то момент я скопировал его из определения хранилища ключей и не заметил, что это данные, а не ресурсы. - person tridy; 09.01.2019