如何在Terraform数据源/资源块中引用Provider默认标签值
解决方案
你可以直接通过AWS Provider的导出属性引用default_tags中定义的标签值,不需要额外定义重复变量,也不需要通过其他数据源查询,引用路径为aws.default_tags.tags.<你的标签键名>。
你当前使用的4.19.0版本AWS Provider已经完整支持该特性,直接替换硬编码的环境值即可,修改后的完整配置如下:
terraform { required_providers { aws = { source = "hashicorp/aws" version = "4.19.0" } } required_version = ">=1.2.3" } provider "aws" { default_tags { tags = { Environment = "dev" Application = "myapp" Terraform = "true" } } } data "aws_iam_policy_document" "this" { statement { sid = "S3BucketAccess" actions = "s3:*" resources = [ "${data.aws_s3_bucket.this.arn}/${aws.default_tags.tags.Environment}" ] } } data "aws_s3_bucket" "this" { bucket = "myBucket" }
补充说明
- 该引用方式是Provider原生支持的读取路径,不会产生额外的API请求,也不会出现标签值同步延迟的问题
- 后续如果需要调整Environment标签值,只需要修改
default_tags块中的配置,所有引用位置会自动同步更新,不需要逐处修改 - 其他在default_tags中定义的标签(比如Application)也可以用同样的
aws.default_tags.tags.Application路径直接引用
注意:如果你的配置中定义了多个带别名(alias)的AWS Provider,引用时需要加上对应别名,格式为
aws.<别名>.default_tags.tags.Environment,无别名的默认Provider直接用aws.default_tags即可。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

