Terraform 避免使用地形重建EMR集群

Terraform 避免使用地形重建EMR集群,terraform,amazon-emr,Terraform,Amazon Emr,本期与Terraform0.12版相关 嗨!我目前正在使用Terraform在我的团队中部署AWS EMR集群,每次我们添加新资源时,Terraform都会重新创建集群。我们集群的声明如下: resource "aws_emr_cluster" "emr_spark_cluster" { name = "whatever_name_to_emr_spark_cluster" release_label = "emr-

本期与Terraform0.12版相关


嗨!我目前正在使用Terraform在我的团队中部署AWS EMR集群,每次我们添加新资源时,Terraform都会重新创建集群。我们集群的声明如下:

resource "aws_emr_cluster" "emr_spark_cluster" {
  name = "whatever_name_to_emr_spark_cluster"
  release_label = "emr-5.29.0"
  applications = ["Spark"]
  log_uri = "whatever_log_uri"

  ec2_attributes {
    subnet_id = var.vpc_public_subnets[0]
    emr_managed_master_security_group = aws_security_group.emr_sg.id
    emr_managed_slave_security_group = aws_security_group.emr_sg.id
    instance_profile = aws_iam_instance_profile.instance_profile.arn
    key_name = "whatever_name_to_ec2_attributes"
  }

  master_instance_group {
    instance_type = var.emr_master_instance_type
  }

  core_instance_group {
    instance_type = var.emr_core_instance_type
    instance_count = var.emr_core_instance_count

    ebs_config {
      size = var.emr_core_ebs_size
      type = whatever_type
      volumes_per_instance = whatever_volumes_per_instance
    }
  }

  tags = var.tags
  service_role = aws_iam_role.emr_service.arn
}
基本上,我们使用
master\u-instance\u组
core\u-instance\u组
作为(1

在集群已经部署并试图添加新资源的情况下,
terraformapply
命令指出,需要重新创建集群(删除所有不感兴趣的内容):

基本上,我真正感兴趣的部分是
实例组
。我想这就是需要重新创建集群的原因,因为当前的
主实例组
核心实例组
属性不“保留”特定的实例组,而只保留它们的类型和大小,对吗

出于这个原因,我尝试使用资源来替换
主实例组
核心实例组
属性,并通过
集群id
属性将它们直接链接到集群。例如,
master\u实例的
aws\u emr\u实例组

resource "aws_emr_instance_group" "master_instances" {
  name = "emr_cluster_master_instances"
  cluster_id = aws_emr_cluster.emr_spark_cluster.id
  instance_type = var.emr_master_instance_type
  instance_count = var.emr_master_instance_count
  ebs_config {
      iops = 0
      size = var.emr_core_ebs_size
      type = whatever_type
      volumes_per_instance = whatever_volumes_per_instance
  }
}
但在执行<代码>地形平面图时
失败,出现以下错误:

module.emr.aws_emr_cluster.emr_spark_cluster: Creating...

Error: error running EMR Job Flow: ValidationException: Instance count must be greater than 0
我不理解这个错误,因为我正在将instances组与集群链接

因此,我的问题是:

  • 如何为集群设置特定实例,以避免每次需要添加新资源时重新创建集群(在另一个管道中部署新资源将被丢弃)。我是否必须使用
    master\u instance\u type
    core\u instance\u type
    core\u instance\u count
    ,即使这些都是不推荐使用的参数?也许我错误地使用了
    aws\u emr\u instance\u group
    资源
  • 对于属性
    主实例组
    核心实例组
    ,这可能是预期的行为吗?我的意思是,为了避免创建特定的实例,使其在集群被破坏时仍处于活动状态
提前谢谢


1)我之所以说“建议”,是因为其他属性,如
core\u-instance\u-type
core\u-instance\u-count
master\u-instance\u-type
在Terraform 0.12中已被弃用。

在emr创建后是否在emr上运行
步骤
?@srikantholur我没有声明任何
步骤
属性。在那里可以声明哪种类型的
步骤
?我知道集群被其他队友用来处理来自S3 bucket的文件,但是他们是手动完成的,这个操作可以通过这些
步骤来处理吗?还请记住,我的目标是避免每次创建新资源时重新创建集群。创建后,您是否在emr上运行
步骤
?@srikanthholur我没有声明任何
步骤
属性。在那里可以声明哪种类型的
步骤
?我知道集群被其他队友用来处理来自S3 bucket的文件,但是他们是手动完成的,这个操作可以通过这些
步骤来处理吗?还要记住,我的目标是避免每次创建新资源时重新创建集群
module.emr.aws_emr_cluster.emr_spark_cluster: Creating...

Error: error running EMR Job Flow: ValidationException: Instance count must be greater than 0