#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
, чтобы установить текущую подписку, а затем создайте ресурсы.