如何通过Terraform为AWS EMR主节点和核心节点EC2设置不同标签
解决方案
你当前在aws_emr_cluster根级配置的tags是全局统一标签,会同步应用到集群所有EC2实例、集群自身及关联资源上,所以主节点和核心节点的Name标签会完全一致。要实现不同实例组使用不同标签,需要在master_instance_group、core_instance_group块内单独配置专属的tags参数,根级的公共标签可以保留通用属性。
修改后的代码示例
resource "aws_emr_cluster" "emr_cluster" { name = "test" release_label = var.cluster_release_label applications = var.applications ec2_attributes { key_name = var.emr_root_user_key_pair_name emr_managed_master_security_group = aws_security_group.emr_instance.id emr_managed_slave_security_group = aws_security_group.emr_instance.id instance_profile = aws_iam_instance_profile.emr_profile.arn } master_instance_group { instance_count = var.master_instance_count instance_type = var.master_instance_type ebs_config { size = var.master_ebs_size type = "gp2" volumes_per_instance = 1 } # 主节点专属标签 tags = { "Name" = "EMR-Master-Node" "type" = "EMR" "group" = "HBase" "role" = "master" } } core_instance_group { instance_count = var.core_instance_count instance_type = var.core_instance_type ebs_config { size = var.core_ebs_size type = "gp2" volumes_per_instance = 1 } # 核心节点专属标签 tags = { "Name" = "EMR-Core-Node" "type" = "EMR" "group" = "HBase" "role" = "core" } } ebs_root_volume_size = var.ebs_root_volume_size service_role = module.iam_emr_service_role.role_arn # 根级tags可保留不需要区分的集群级公共标签,避免重复配置 # 实例组内的标签优先级更高,相同key会覆盖根级配置 tags = { "cluster" = "test-emr-cluster" } }
注意事项
- 要求AWS Terraform Provider版本 >= v3.35.0,低版本不支持实例组级别的tags配置
- 如果使用低于v3.35.0的旧版本Provider,可额外通过
aws_ec2_tag资源,关联EMR集群实例组输出的EC2实例ID列表来单独配置标签 - 任务节点如果有单独配置需求,也可以在
task_instance_group块内用同样的方式配置专属标签
内容的提问来源于stack exchange,提问作者HareSRV
相关产品推荐
相关产品推荐

