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