Added support for EMR AutoScalingRole (#12823)

credit to @tolis-sisiaridis for changes
Addresses https://github.com/hashicorp/terraform/issues/11126
This commit is contained in:
Jesse Collier 2017-03-18 10:12:43 -04:00 committed by Paul Stack
parent f36195849e
commit ba9434d741
2 changed files with 105 additions and 0 deletions

View File

@ -157,6 +157,11 @@ func resourceAwsEMRCluster() *schema.Resource {
ForceNew: true, ForceNew: true,
Required: true, Required: true,
}, },
"autoscaling_role": &schema.Schema{
Type: schema.TypeString,
ForceNew: true,
Optional: true,
},
"visible_to_all_users": { "visible_to_all_users": {
Type: schema.TypeBool, Type: schema.TypeBool,
Optional: true, Optional: true,
@ -259,6 +264,9 @@ func resourceAwsEMRClusterCreate(d *schema.ResourceData, meta interface{}) error
if v, ok := d.GetOk("log_uri"); ok { if v, ok := d.GetOk("log_uri"); ok {
params.LogUri = aws.String(v.(string)) params.LogUri = aws.String(v.(string))
} }
if v, ok := d.GetOk("autoscaling_role"); ok {
params.AutoScalingRole = aws.String(v.(string))
}
if instanceProfile != "" { if instanceProfile != "" {
params.JobFlowRole = aws.String(instanceProfile) params.JobFlowRole = aws.String(instanceProfile)
@ -353,6 +361,7 @@ func resourceAwsEMRClusterRead(d *schema.ResourceData, meta interface{}) error {
d.Set("name", cluster.Name) d.Set("name", cluster.Name)
d.Set("service_role", cluster.ServiceRole) d.Set("service_role", cluster.ServiceRole)
d.Set("autoscaling_role", cluster.AutoScalingRole)
d.Set("release_label", cluster.ReleaseLabel) d.Set("release_label", cluster.ReleaseLabel)
d.Set("log_uri", cluster.LogUri) d.Set("log_uri", cluster.LogUri)
d.Set("master_public_dns", cluster.MasterPublicDnsName) d.Set("master_public_dns", cluster.MasterPublicDnsName)

View File

@ -237,6 +237,7 @@ resource "aws_emr_cluster" "tf-test-cluster" {
depends_on = ["aws_main_route_table_association.a"] depends_on = ["aws_main_route_table_association.a"]
service_role = "${aws_iam_role.iam_emr_default_role.arn}" service_role = "${aws_iam_role.iam_emr_default_role.arn}"
autoscaling_role = "${aws_iam_role.emr-autoscaling-role.arn}"
} }
resource "aws_security_group" "allow_all" { resource "aws_security_group" "allow_all" {
@ -474,6 +475,29 @@ resource "aws_iam_policy" "iam_emr_profile_policy" {
} }
EOT EOT
} }
# IAM Role for autoscaling
resource "aws_iam_role" "emr-autoscaling-role" {
name = "EMR_AutoScaling_DefaultRole"
assume_role_policy = "${data.aws_iam_policy_document.emr-autoscaling-role-policy.json}"
}
data "aws_iam_policy_document" "emr-autoscaling-role-policy" {
statement {
effect = "Allow"
actions = ["sts:AssumeRole"]
principals = {
type = "Service"
identifiers = ["elasticmapreduce.amazonaws.com","application-autoscaling.amazonaws.com"]
}
}
}
resource "aws_iam_role_policy_attachment" "emr-autoscaling-role" {
role = "${aws_iam_role.emr-autoscaling-role.name}"
policy_arn = "arn:aws:iam::aws:policy/service-role/AmazonElasticMapReduceforAutoScalingRole"
}
`, r, r, r, r, r, r) `, r, r, r, r, r, r)
} }
@ -520,6 +544,7 @@ resource "aws_emr_cluster" "tf-test-cluster" {
depends_on = ["aws_main_route_table_association.a"] depends_on = ["aws_main_route_table_association.a"]
service_role = "${aws_iam_role.iam_emr_default_role.arn}" service_role = "${aws_iam_role.iam_emr_default_role.arn}"
autoscaling_role = "${aws_iam_role.emr-autoscaling-role.arn}"
} }
resource "aws_security_group" "allow_all" { resource "aws_security_group" "allow_all" {
@ -757,6 +782,29 @@ resource "aws_iam_policy" "iam_emr_profile_policy" {
} }
EOT EOT
} }
# IAM Role for autoscaling
resource "aws_iam_role" "emr-autoscaling-role" {
name = "EMR_AutoScaling_DefaultRole"
assume_role_policy = "${data.aws_iam_policy_document.emr-autoscaling-role-policy.json}"
}
data "aws_iam_policy_document" "emr-autoscaling-role-policy" {
statement {
effect = "Allow"
actions = ["sts:AssumeRole"]
principals = {
type = "Service"
identifiers = ["elasticmapreduce.amazonaws.com","application-autoscaling.amazonaws.com"]
}
}
}
resource "aws_iam_role_policy_attachment" "emr-autoscaling-role" {
role = "${aws_iam_role.emr-autoscaling-role.name}"
policy_arn = "arn:aws:iam::aws:policy/service-role/AmazonElasticMapReduceforAutoScalingRole"
}
`, r, r, r, r, r, r) `, r, r, r, r, r, r)
} }
@ -803,6 +851,7 @@ resource "aws_emr_cluster" "tf-test-cluster" {
depends_on = ["aws_main_route_table_association.a"] depends_on = ["aws_main_route_table_association.a"]
service_role = "${aws_iam_role.iam_emr_default_role.arn}" service_role = "${aws_iam_role.iam_emr_default_role.arn}"
autoscaling_role = "${aws_iam_role.emr-autoscaling-role.arn}"
} }
resource "aws_security_group" "allow_all" { resource "aws_security_group" "allow_all" {
@ -1040,6 +1089,29 @@ resource "aws_iam_policy" "iam_emr_profile_policy" {
} }
EOT EOT
} }
# IAM Role for autoscaling
resource "aws_iam_role" "emr-autoscaling-role" {
name = "EMR_AutoScaling_DefaultRole"
assume_role_policy = "${data.aws_iam_policy_document.emr-autoscaling-role-policy.json}"
}
data "aws_iam_policy_document" "emr-autoscaling-role-policy" {
statement {
effect = "Allow"
actions = ["sts:AssumeRole"]
principals = {
type = "Service"
identifiers = ["elasticmapreduce.amazonaws.com","application-autoscaling.amazonaws.com"]
}
}
}
resource "aws_iam_role_policy_attachment" "emr-autoscaling-role" {
role = "${aws_iam_role.emr-autoscaling-role.name}"
policy_arn = "arn:aws:iam::aws:policy/service-role/AmazonElasticMapReduceforAutoScalingRole"
}
`, r, r, r, r, r, r) `, r, r, r, r, r, r)
} }
@ -1085,6 +1157,7 @@ resource "aws_emr_cluster" "tf-test-cluster" {
depends_on = ["aws_main_route_table_association.a"] depends_on = ["aws_main_route_table_association.a"]
service_role = "${aws_iam_role.iam_emr_default_role.arn}" service_role = "${aws_iam_role.iam_emr_default_role.arn}"
autoscaling_role = "${aws_iam_role.emr-autoscaling-role.arn}"
} }
resource "aws_security_group" "allow_all" { resource "aws_security_group" "allow_all" {
@ -1322,5 +1395,28 @@ resource "aws_iam_policy" "iam_emr_profile_policy" {
} }
EOT EOT
} }
# IAM Role for autoscaling
resource "aws_iam_role" "emr-autoscaling-role" {
name = "EMR_AutoScaling_DefaultRole"
assume_role_policy = "${data.aws_iam_policy_document.emr-autoscaling-role-policy.json}"
}
data "aws_iam_policy_document" "emr-autoscaling-role-policy" {
statement {
effect = "Allow"
actions = ["sts:AssumeRole"]
principals = {
type = "Service"
identifiers = ["elasticmapreduce.amazonaws.com","application-autoscaling.amazonaws.com"]
}
}
}
resource "aws_iam_role_policy_attachment" "emr-autoscaling-role" {
role = "${aws_iam_role.emr-autoscaling-role.name}"
policy_arn = "arn:aws:iam::aws:policy/service-role/AmazonElasticMapReduceforAutoScalingRole"
}
`, r, r, r, r, r, r) `, r, r, r, r, r, r)
} }