如何在Terraform中为多个AWS Provider设置默认账户
如何在Terraform中为多个AWS Provider设置默认账户
我明白你现在的需求:在Terraform里配置了多个AWS账户的Provider,想把其中一个设为默认,这样创建资源时不用每次都指定provider参数对吧?你之前试的几种方法都踩了Terraform Provider配置的坑,我来帮你捋清楚正确的做法:
首先要明确Terraform的核心规则:不带alias的AWS Provider会被自动当作默认Provider,你之前的错误在于给所有Provider都加了alias,还尝试用不存在的default = true参数或者错误的providers块来设置默认,这些都是不符合Terraform语法的。
正确的配置方式
把你想设为默认的那个账户(比如sandbox)的Provider去掉alias,其他账户的Provider保留alias即可,示例代码如下:
# 默认Provider(sandbox账户),无alias provider "aws" { region = "us-east-2" profile = "sandbox" } # 其他带alias的Provider provider "aws" { alias = "silver" region = "us-east-2" profile = var.profile } provider "aws" { alias = "gold" region = "us-east-2" profile = "gold" } provider "aws" { alias = "plt" region = "us-east-2" profile = "plt" } provider "aws" { alias = "infra" region = "us-east-2" profile = "infra" }
使用方法
- 创建资源时,如果不指定
provider参数,Terraform会自动使用上面那个无alias的sandbox账户:# 这个S3桶会部署在默认的sandbox账户 resource "aws_s3_bucket" "default_bucket" { bucket = "my-sandbox-bucket" } - 如果要使用其他账户的资源,只需要在资源块里指定对应的
provider参数即可:# 这个EC2实例会部署在gold账户 resource "aws_instance" "gold_server" { provider = aws.gold # ...其他实例配置 }
为什么你之前的方法不行?
- Terraform的
provider块根本没有default = true这个参数,所以这个写法会直接报错; - 你尝试的
providers = {...}块是用于模块间传递Provider的配置,不是用来设置全局默认Provider的,所以放在根模块里会提示“Unsupported argument”。
备注:内容来源于stack exchange,提问作者Meghana d
相关产品推荐
相关产品推荐

