Terraform 避免使用地形重建EMR集群
本期与Terraform0.12版相关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-
嗨!我目前正在使用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