-
Notifications
You must be signed in to change notification settings - Fork 10k
Closed
Labels
Description
I'm using multiple AWS providers to deploy resources into different regions, but I want my modules to be generic with respect to which regions.
Ideally I would write a module like this:
variable provider { default = "aws" }
resource "aws_vpc" "vpc" {
# works:
#provider = "aws.us-east-1"
# does not work:
provider = "${var.provider}"
cidr_block = "192.168.0.0/16"
tags { Name = "TEST - DELETE ME" }
}
and invoke it like this:
provider "aws" {
region = "us-east-2"
}
provider "aws" {
alias = "us-east-1"
region = "us-east-1"
}
# do other stuff using the default AWS provider
# tell this module to use aws.us-east-1
module "module1" {
source = "./testmodule"
provider = "aws.us-east-1"
}
but that fails on terraform get
:
dmrz@golbez:~/tmp/tftest2$ terraform get
Get: file:///home/dmrz/tmp/tftest2/testmodule
Error loading Terraform: 1 error(s) occurred:
* module module1: provider alias must be defined by the module or a parent: ${var.provider}
It works fine if I instead hardcode the provider field value within the module, but then my module isn't generic.
Note: the resource I really want to use this for at this moment is aws_cloudwatch_metric_alarm
, but aws_vpc
behaves the same way and makes a much simpler test case.
Thanks for all the great work on Terraform!
kevintsai, kkarimi, pearcec, hugoduncan, ashb and 21 more