Метааргумент ресурса 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.9/language/meta-arguments/resource-provider/