Метааргумент provider ресурса
Метааргумент provider указывает, какой экземпляр провайдера отвечает за управление каждым экземпляром ресурса, переопределяя поведение OpenTofu по умолчанию — автоматический выбор конфигурации провайдера по умолчанию.
Как описано в разделе Конфигурация провайдера, при необходимости можно объявить несколько конфигураций для одного провайдера или несколько динамических экземпляров одной конфигурации провайдера, например, при управлении ресурсами в разных регионах с помощью провайдера, который допускает только один регион на экземпляр провайдера.
По умолчанию OpenTofu интерпретирует первое слово в имени типа ресурса (слова разделены символами подчёркивания) как локальное имя провайдера и использует конфигурацию провайдера по умолчанию. Например, тип ресурса google_compute_instance автоматически связывается с конфигурацией по умолчанию провайдера, локальное имя которого в текущем модуле — google.
С помощью метааргумента provider можно выбрать для ресурса альтернативную конфигурацию провайдера:
# default configuration
provider "google" {
region = "us-central1"
}
# alternate configuration, whose alias is "europe"
provider "google" {
alias = "europe"
region = "europe-west1"
}
resource "google_compute_instance" "example" {
# This "provider" meta-argument selects the google provider
# configuration whose alias is "europe", rather than the
# default configuration.
provider = google.europe
# ...
}Если вы выбрали конфигурацию провайдера, в которой используется for_each, необходимо также динамически выбирать отдельный экземпляр конфигурации провайдера для каждого экземпляра ресурса, добавив выражение ключа экземпляра в квадратных скобках:
variable "aws_regions" {
type = map(object({
vpc_cidr_block = string
}))
}
provider "aws" {
alias = "by_region"
for_each = var.aws_regions
region = each.key
}
resource "aws_vpc" "private" {
# This expression filters var.aws_regions to include only
# the elements whose value is not null. Refer to the
# warning in the text below for more information.
for_each = {
for region, config in var.aws_regions : region => config
if config != null
}
provider = aws.by_region[each.key]
cidr_block = each.value.vpc_cidr_block
}Подробнее о синтаксисе аргумента provider можно узнать в разделе Ссылки на экземпляры провайдера.
Выражение for_each ресурса не должно в точности совпадать с выражением for_each связанной с ним конфигурации провайдера.
OpenTofu использует экземпляр провайдера для планирования и выполнения всех действий, связанных с экземпляром ресурса, включая уничтожение экземпляра ресурса, удалённого из конфигурации.
Поэтому связанный с любым экземпляром ресурса экземпляр провайдера должен оставаться в конфигурации как минимум ещё один цикл планирования и применения после удаления экземпляра ресурса. В противном случае OpenTofu не сможет запланировать уничтожение экземпляра ресурса.
Подробнее об этом ограничении можно узнать в разделе Ссылки на экземпляры провайдера.
Copyright (c) The OpenTofu Authors
Copyright (c) 2014 HashiCorp, Inc.
Mozilla Public License, version 2.0
https://opentofu.org/docs/v1.11/language/meta-arguments/resource-provider/