Развертывание группы ресурсов Terraform в нескольких подписках

#terraform #terraform-provider-azure

Вопрос:

Я пытаюсь использовать Terraform и Terragrunt для создания множества различных ресурсов в Azure. Среди прочего, я развертываю подписки и группы ресурсов.

У меня есть один файл с центральной переменной, который содержит некоторые метаданные и на основе этого развертывает ресурсы. Я могу развернуть все нужные подписки, но у меня есть проблема, потому что я хочу развернуть группы ресурсов в этих подписках, и я не уверен, как это сделать наилучшим образом, поскольку ресурс группы ресурсов не имеет параметра подписки.

Файл переменной выглядит примерно так:

 inputs = {

    departments = [
    {
        name = "test",
        region = "West Europe"
        email = "something@something.com"

    },
    {
        name = "test2"
        region = "West Europe"
        email = "someone@something.com"
    }
]
 

}

Поэтому в моем модуле группы ресурсов я определил его следующим образом:

 resource "azurerm_resource_group" "example" {
for_each = {for dep in var.departments: dep.name => dep}

  name     = "rg-${each.value.name}"
  location = "${each.value.region}"
}
 

И это нормально, но мне нужно переключить контекст на правильные подписки, чтобы группы ресурсов размещались в соответствующих подразделах.
Есть какие-нибудь идеи?

Комментарии:

1. Есть какие-нибудь новости по этому вопросу? Решает ли это вашу проблему? Пожалуйста, дайте мне знать, если у вас есть какие-либо ответы.

Ответ №1:

Для развертывания ресурсов в нескольких подписках можно использовать несколько поставщиков, здесь вы можете получить более подробную информацию и пример кода ниже:

 provider "azurerm" {
    subscription_id = "xxxxxx"
    tenant_id = "xxxxxx"
    client_id = "xxxxxx"
    client_secret = "xxxxxx"
}

provider "azurerm" {
    alias = sub2
    subscription_id = "xxxxxx"
    tenant_id = "xxxxxx"
    client_id = "xxxxxx"
    client_secret = "xxxxxx"
}

resource "azurerm_resource_group" "example1" {
    provider = azurerm
    ...
}

resource "azurerm_resource_group" "example1" {
    provider = azurerm.sub2
    ...
}
 

И если вы используете for_each в terraform, вы можете добавить опцию псевдонима во входные данные:

 inputs = {

    departments = [
      {
        name = "test",
        provider = "azurerm"
        region = "West Europe"
        email = "something@something.com"

      },
      {
        name = "test2"
        provider = "azurerm.sub2"
        region = "West Europe"
        email = "someone@something.com"
      }
    ]
}
 

Это всего лишь пример, но это обходной путь. Вы можете изменить код по мере необходимости.

Комментарии:

1. К сожалению, это не сработает, так как подписки также создаются на основе входного файла. Таким образом, он создаст, например, субподряд под названием «{name}-sub». Поэтому у меня действительно нет возможности определить поставщиков так, как вы описали.

2. @jonashoye Похоже, что вы можете использовать local-exec только для выполнения команды Azure CLI для создания ресурсов в новой подписке. Сначала используйте команду az account set --subscription subscription_id , чтобы установить текущую подписку, а затем создайте ресурсы.