providerのconfiguration_aliasesでハマったのでメモ。
たとえば、AWS Ceritificate Managerのモジュールがあるとします。
この場合、CloudFrontから割り当てたい場合と、ALBから割り当てたい場合などがあり、CloudFrontはus-east-1リージョン、ALBはap-northeast-1リージョンで作成したいので、それぞれ別のプロバイダー設定を渡す必要があります。
aws → デフォルトのプロバイダーでap-northeast-1
aws.virginia → cloudFrontを作りたいときに読み込んでもらうプロバイダー
まずダメな例。
こうすると、このモジュールでは、2つのプロバイダーが必要。ということになる。
1 2 3 4 5 6 7 8 9 10 |
terraform { required_version = "= 1.3.9" required_providers { aws = { source = "hashicorp/aws" version = "= 4.57.0" configuration_aliases = [aws, aws.virginia] } } } |
OKな例。単純にconfiguration_aliasesを定義しなければ良い。
1 2 3 4 5 6 7 8 9 |
terraform { required_version = "= 1.3.9" required_providers { aws = { source = "hashicorp/aws" version = "= 4.57.0" } } } |
呼び出す場合の書き方
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
module "acm" { source = "./../../modules/acm" sub_domain_name = "backend-alb" hosted_zone_name = var.hosted_zone_name providers = { aws = aws } } module "acm" { source = "./../../modules/acm" sub_domain_name = var.sub_domain_name hosted_zone_name = var.hosted_zone_name providers = { aws = aws.virginia } } |
providerはこのような感じで定義
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
provider "aws" { region = local.region default_tags { tags = { env = local.env project = local.system_name } } } provider "aws" { region = "us-east-1" alias = "virginia" default_tags { tags = { env = local.env project = local.system_name } } } |
どうやら、このconfiguration_aliases設定はマルチプロバイダーで構成するモジュールを作る時とかに使うものみたいです。