Cluster
Provides a EMR Cluster resource. With this you can create, read, and release EMR Cluster.
NOTE: Available in 1.57.0+.
Example Usage
1. Create A Cluster
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.alicloud.emr.EmrFunctions;
import com.pulumi.alicloud.emr.inputs.GetMainVersionsArgs;
import com.pulumi.alicloud.emr.inputs.GetInstanceTypesArgs;
import com.pulumi.alicloud.emr.inputs.GetDiskTypesArgs;
import com.pulumi.alicloud.vpc.Network;
import com.pulumi.alicloud.vpc.NetworkArgs;
import com.pulumi.alicloud.ecs.SecurityGroup;
import com.pulumi.alicloud.ecs.SecurityGroupArgs;
import com.pulumi.alicloud.vpc.Switch;
import com.pulumi.alicloud.vpc.SwitchArgs;
import com.pulumi.alicloud.ram.Role;
import com.pulumi.alicloud.ram.RoleArgs;
import com.pulumi.alicloud.emr.Cluster;
import com.pulumi.alicloud.emr.ClusterArgs;
import com.pulumi.alicloud.emr.inputs.ClusterHostGroupArgs;
import com.pulumi.codegen.internal.KeyedValue;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
final var defaultMainVersions = EmrFunctions.getMainVersions();
final var defaultInstanceTypes = EmrFunctions.getInstanceTypes(GetInstanceTypesArgs.builder()
.destinationResource("InstanceType")
.clusterType(defaultMainVersions.applyValue(getMainVersionsResult -> getMainVersionsResult.mainVersions()[0].clusterTypes()[0]))
.supportLocalStorage(false)
.instanceChargeType("PostPaid")
.supportNodeTypes(
"MASTER",
"CORE",
"TASK")
.build());
final var dataDisk = EmrFunctions.getDiskTypes(GetDiskTypesArgs.builder()
.destinationResource("DataDisk")
.clusterType(defaultMainVersions.applyValue(getMainVersionsResult -> getMainVersionsResult.mainVersions()[0].clusterTypes()[0]))
.instanceChargeType("PostPaid")
.instanceType(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].id()))
.zoneId(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].zoneId()))
.build());
final var systemDisk = EmrFunctions.getDiskTypes(GetDiskTypesArgs.builder()
.destinationResource("SystemDisk")
.clusterType(defaultMainVersions.applyValue(getMainVersionsResult -> getMainVersionsResult.mainVersions()[0].clusterTypes()[0]))
.instanceChargeType("PostPaid")
.instanceType(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].id()))
.zoneId(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].zoneId()))
.build());
for (var i = 0; i < (var_.vpc_id() == "" ? 1 : 0 == true); i++) {
new Network("vpc-" + i, NetworkArgs.builder()
.cidrBlock(var_.vpc_cidr())
.build());
}
for (var i = 0; i < (var_.security_group_id() == "" ? 1 : 0 == true); i++) {
new SecurityGroup("defaultSecurityGroup-" + i, SecurityGroupArgs.builder()
.vpcId(var_.vpc_id() == "" ? vpc.id() : var_.vpc_id())
.build());
}
for (var i = 0; i < (var_.vswitch_id() == "" ? 1 : 0 == true); i++) {
new Switch("vswitch-" + i, SwitchArgs.builder()
.availabilityZone(var_.availability_zone() == "" ? defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].zoneId()) : var_.availability_zone())
.vswitchName(var_.vswitch_name())
.cidrBlock(var_.vswitch_cidr())
.vpcId(var_.vpc_id() == "" ? vpc.id() : var_.vpc_id())
.build());
}
var defaultRole = new Role("defaultRole", RoleArgs.builder()
.document("""
{
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": {
"Service": [
"emr.aliyuncs.com",
"ecs.aliyuncs.com"
]
}
}
],
"Version": "1"
}
""")
.description("this is a role test.")
.force(true)
.build());
var defaultCluster = new Cluster("defaultCluster", ClusterArgs.builder()
.emrVer(defaultMainVersions.applyValue(getMainVersionsResult -> getMainVersionsResult.mainVersions()[0].emrVersion()))
.clusterType(defaultMainVersions.applyValue(getMainVersionsResult -> getMainVersionsResult.mainVersions()[0].clusterTypes()[0]))
.hostGroups(
ClusterHostGroupArgs.builder()
.hostGroupName("master_group")
.hostGroupType("MASTER")
.nodeCount("2")
.instanceType(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].id()))
.diskType(dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].value()))
.diskCapacity(dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) 160 ? dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) : 160)
.diskCount("1")
.sysDiskType(systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].value()))
.sysDiskCapacity(systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) 160 ? systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) : 160)
.build(),
ClusterHostGroupArgs.builder()
.hostGroupName("core_group")
.hostGroupType("CORE")
.nodeCount("3")
.instanceType(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].id()))
.diskType(dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].value()))
.diskCapacity(dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) 160 ? dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) : 160)
.diskCount("4")
.sysDiskType(systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].value()))
.sysDiskCapacity(systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) 160 ? systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) : 160)
.build(),
ClusterHostGroupArgs.builder()
.hostGroupName("task_group")
.hostGroupType("TASK")
.nodeCount("2")
.instanceType(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].id()))
.diskType(dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].value()))
.diskCapacity(dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) 160 ? dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) : 160)
.diskCount("4")
.sysDiskType(systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].value()))
.sysDiskCapacity(systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) 160 ? systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) : 160)
.build())
.highAvailabilityEnable(true)
.zoneId(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].zoneId()))
.securityGroupId(var_.security_group_id() == "" ? defaultSecurityGroup.id() : var_.security_group_id())
.isOpenPublicIp(true)
.chargeType("PostPaid")
.vswitchId(var_.vswitch_id() == "" ? vswitch.id() : var_.vswitch_id())
.userDefinedEmrEcsRole(defaultRole.name())
.sshEnable(true)
.masterPwd("ABCtest1234!")
.build());
}
}
2. Scale Up
The hosts of EMR Cluster are orginized as host group. Scaling up/down is operating host group. In the case of scaling up cluster, we should add the node_count of some host group.
NOTE: Scaling up is only applicable to CORE and TASK group. Cost time of scaling up will vary with the number of scaling-up nodes. Scaling down is only applicable to TASK group. If you want to scale down CORE group, please submit tickets or contact EMR support team. As the following case, we scale up the TASK group 2 nodes by increasing host_group.node_count by 2.
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.alicloud.emr.EmrFunctions;
import com.pulumi.alicloud.emr.inputs.GetMainVersionsArgs;
import com.pulumi.alicloud.emr.inputs.GetInstanceTypesArgs;
import com.pulumi.alicloud.emr.inputs.GetDiskTypesArgs;
import com.pulumi.alicloud.vpc.Network;
import com.pulumi.alicloud.vpc.NetworkArgs;
import com.pulumi.alicloud.ecs.SecurityGroup;
import com.pulumi.alicloud.ecs.SecurityGroupArgs;
import com.pulumi.alicloud.vpc.Switch;
import com.pulumi.alicloud.vpc.SwitchArgs;
import com.pulumi.alicloud.ram.Role;
import com.pulumi.alicloud.ram.RoleArgs;
import com.pulumi.alicloud.emr.Cluster;
import com.pulumi.alicloud.emr.ClusterArgs;
import com.pulumi.alicloud.emr.inputs.ClusterHostGroupArgs;
import com.pulumi.codegen.internal.KeyedValue;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
final var defaultMainVersions = EmrFunctions.getMainVersions();
final var defaultInstanceTypes = EmrFunctions.getInstanceTypes(GetInstanceTypesArgs.builder()
.destinationResource("InstanceType")
.clusterType(defaultMainVersions.applyValue(getMainVersionsResult -> getMainVersionsResult.mainVersions()[0].clusterTypes()[0]))
.supportLocalStorage(false)
.instanceChargeType("PostPaid")
.supportNodeTypes(
"MASTER",
"CORE",
"TASK")
.build());
final var dataDisk = EmrFunctions.getDiskTypes(GetDiskTypesArgs.builder()
.destinationResource("DataDisk")
.clusterType(defaultMainVersions.applyValue(getMainVersionsResult -> getMainVersionsResult.mainVersions()[0].clusterTypes()[0]))
.instanceChargeType("PostPaid")
.instanceType(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].id()))
.zoneId(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].zoneId()))
.build());
final var systemDisk = EmrFunctions.getDiskTypes(GetDiskTypesArgs.builder()
.destinationResource("SystemDisk")
.clusterType(defaultMainVersions.applyValue(getMainVersionsResult -> getMainVersionsResult.mainVersions()[0].clusterTypes()[0]))
.instanceChargeType("PostPaid")
.instanceType(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].id()))
.zoneId(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].zoneId()))
.build());
for (var i = 0; i < (var_.vpc_id() == "" ? 1 : 0 == true); i++) {
new Network("vpc-" + i, NetworkArgs.builder()
.cidrBlock(var_.vpc_cidr())
.build());
}
for (var i = 0; i < (var_.security_group_id() == "" ? 1 : 0 == true); i++) {
new SecurityGroup("defaultSecurityGroup-" + i, SecurityGroupArgs.builder()
.vpcId(var_.vpc_id() == "" ? vpc.id() : var_.vpc_id())
.build());
}
for (var i = 0; i < (var_.vswitch_id() == "" ? 1 : 0 == true); i++) {
new Switch("vswitch-" + i, SwitchArgs.builder()
.availabilityZone(var_.availability_zone() == "" ? defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].zoneId()) : var_.availability_zone())
.vswitchName(var_.vswitch_name())
.cidrBlock(var_.vswitch_cidr())
.vpcId(var_.vpc_id() == "" ? vpc.id() : var_.vpc_id())
.build());
}
var defaultRole = new Role("defaultRole", RoleArgs.builder()
.document("""
{
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": {
"Service": [
"emr.aliyuncs.com",
"ecs.aliyuncs.com"
]
}
}
],
"Version": "1"
}
""")
.description("this is a role test.")
.force(true)
.build());
var defaultCluster = new Cluster("defaultCluster", ClusterArgs.builder()
.emrVer(defaultMainVersions.applyValue(getMainVersionsResult -> getMainVersionsResult.mainVersions()[0].emrVersion()))
.clusterType(defaultMainVersions.applyValue(getMainVersionsResult -> getMainVersionsResult.mainVersions()[0].clusterTypes()[0]))
.hostGroups(
ClusterHostGroupArgs.builder()
.hostGroupName("master_group")
.hostGroupType("MASTER")
.nodeCount("2")
.instanceType(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].id()))
.diskType(dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].value()))
.diskCapacity(dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) 160 ? dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) : 160)
.diskCount("1")
.sysDiskType(systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].value()))
.sysDiskCapacity(systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) 160 ? systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) : 160)
.build(),
ClusterHostGroupArgs.builder()
.hostGroupName("core_group")
.hostGroupType("CORE")
.nodeCount("3")
.instanceType(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].id()))
.diskType(dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].value()))
.diskCapacity(dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) 160 ? dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) : 160)
.diskCount("4")
.sysDiskType(systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].value()))
.sysDiskCapacity(systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) 160 ? systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) : 160)
.build(),
ClusterHostGroupArgs.builder()
.hostGroupName("task_group")
.hostGroupType("TASK")
.nodeCount("4")
.instanceType(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].id()))
.diskType(dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].value()))
.diskCapacity(dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) 160 ? dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) : 160)
.diskCount("4")
.sysDiskType(systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].value()))
.sysDiskCapacity(systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) 160 ? systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) : 160)
.build())
.highAvailabilityEnable(true)
.zoneId(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].zoneId()))
.securityGroupId(var_.security_group_id() == "" ? defaultSecurityGroup.id() : var_.security_group_id())
.isOpenPublicIp(true)
.chargeType("PostPaid")
.vswitchId(var_.vswitch_id() == "" ? vswitch.id() : var_.vswitch_id())
.userDefinedEmrEcsRole(defaultRole.name())
.sshEnable(true)
.masterPwd("ABCtest1234!")
.build());
}
}
3. Scale Down
In the case of scaling down a cluster, we need to specified the host group and the instance list.
NOTE: Graceful decommission of hadoop cluster has been supported Available in 1.168.0+. The following is an example. We scale down the cluster by decreasing the node count by 2, and specifying the scale-down instance list.
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.alicloud.emr.EmrFunctions;
import com.pulumi.alicloud.emr.inputs.GetMainVersionsArgs;
import com.pulumi.alicloud.emr.inputs.GetInstanceTypesArgs;
import com.pulumi.alicloud.emr.inputs.GetDiskTypesArgs;
import com.pulumi.alicloud.vpc.Network;
import com.pulumi.alicloud.vpc.NetworkArgs;
import com.pulumi.alicloud.ecs.SecurityGroup;
import com.pulumi.alicloud.ecs.SecurityGroupArgs;
import com.pulumi.alicloud.vpc.Switch;
import com.pulumi.alicloud.vpc.SwitchArgs;
import com.pulumi.alicloud.ram.Role;
import com.pulumi.alicloud.ram.RoleArgs;
import com.pulumi.alicloud.emr.Cluster;
import com.pulumi.alicloud.emr.ClusterArgs;
import com.pulumi.alicloud.emr.inputs.ClusterHostGroupArgs;
import com.pulumi.codegen.internal.KeyedValue;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
final var defaultMainVersions = EmrFunctions.getMainVersions();
final var defaultInstanceTypes = EmrFunctions.getInstanceTypes(GetInstanceTypesArgs.builder()
.destinationResource("InstanceType")
.clusterType(defaultMainVersions.applyValue(getMainVersionsResult -> getMainVersionsResult.mainVersions()[0].clusterTypes()[0]))
.supportLocalStorage(false)
.instanceChargeType("PostPaid")
.supportNodeTypes(
"MASTER",
"CORE",
"TASK")
.build());
final var dataDisk = EmrFunctions.getDiskTypes(GetDiskTypesArgs.builder()
.destinationResource("DataDisk")
.clusterType(defaultMainVersions.applyValue(getMainVersionsResult -> getMainVersionsResult.mainVersions()[0].clusterTypes()[0]))
.instanceChargeType("PostPaid")
.instanceType(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].id()))
.zoneId(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].zoneId()))
.build());
final var systemDisk = EmrFunctions.getDiskTypes(GetDiskTypesArgs.builder()
.destinationResource("SystemDisk")
.clusterType(defaultMainVersions.applyValue(getMainVersionsResult -> getMainVersionsResult.mainVersions()[0].clusterTypes()[0]))
.instanceChargeType("PostPaid")
.instanceType(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].id()))
.zoneId(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].zoneId()))
.build());
for (var i = 0; i < (var_.vpc_id() == "" ? 1 : 0 == true); i++) {
new Network("vpc-" + i, NetworkArgs.builder()
.cidrBlock(var_.vpc_cidr())
.build());
}
for (var i = 0; i < (var_.security_group_id() == "" ? 1 : 0 == true); i++) {
new SecurityGroup("defaultSecurityGroup-" + i, SecurityGroupArgs.builder()
.vpcId(var_.vpc_id() == "" ? vpc.id() : var_.vpc_id())
.build());
}
for (var i = 0; i < (var_.vswitch_id() == "" ? 1 : 0 == true); i++) {
new Switch("vswitch-" + i, SwitchArgs.builder()
.availabilityZone(var_.availability_zone() == "" ? defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].zoneId()) : var_.availability_zone())
.vswitchName(var_.vswitch_name())
.cidrBlock(var_.vswitch_cidr())
.vpcId(var_.vpc_id() == "" ? vpc.id() : var_.vpc_id())
.build());
}
var defaultRole = new Role("defaultRole", RoleArgs.builder()
.document("""
{
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": {
"Service": [
"emr.aliyuncs.com",
"ecs.aliyuncs.com"
]
}
}
],
"Version": "1"
}
""")
.description("this is a role test.")
.force(true)
.build());
var defaultCluster = new Cluster("defaultCluster", ClusterArgs.builder()
.emrVer(defaultMainVersions.applyValue(getMainVersionsResult -> getMainVersionsResult.mainVersions()[0].emrVersion()))
.clusterType(defaultMainVersions.applyValue(getMainVersionsResult -> getMainVersionsResult.mainVersions()[0].clusterTypes()[0]))
.hostGroups(
ClusterHostGroupArgs.builder()
.hostGroupName("master_group")
.hostGroupType("MASTER")
.nodeCount("2")
.instanceType(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].id()))
.diskType(dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].value()))
.diskCapacity(dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) 160 ? dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) : 160)
.diskCount("1")
.sysDiskType(systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].value()))
.sysDiskCapacity(systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) 160 ? systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) : 160)
.build(),
ClusterHostGroupArgs.builder()
.hostGroupName("core_group")
.hostGroupType("CORE")
.nodeCount("3")
.instanceType(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].id()))
.diskType(dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].value()))
.diskCapacity(dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) 160 ? dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) : 160)
.diskCount("4")
.sysDiskType(systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].value()))
.sysDiskCapacity(systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) 160 ? systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) : 160)
.build(),
ClusterHostGroupArgs.builder()
.hostGroupName("task_group")
.hostGroupType("TASK")
.nodeCount("2")
.instanceType(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].id()))
.diskType(dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].value()))
.diskCapacity(dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) 160 ? dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) : 160)
.diskCount("4")
.sysDiskType(systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].value()))
.sysDiskCapacity(systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) 160 ? systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) : 160)
.build())
.highAvailabilityEnable(true)
.zoneId(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].zoneId()))
.securityGroupId(var_.security_group_id() == "" ? defaultSecurityGroup.id() : var_.security_group_id())
.isOpenPublicIp(true)
.chargeType("PostPaid")
.vswitchId(var_.vswitch_id() == "" ? vswitch.id() : var_.vswitch_id())
.userDefinedEmrEcsRole(defaultRole.name())
.sshEnable(true)
.masterPwd("ABCtest1234!")
.build());
}
}
4. Create a emr gateway cluster
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.alicloud.emr.EmrFunctions;
import com.pulumi.alicloud.emr.inputs.GetMainVersionsArgs;
import com.pulumi.alicloud.emr.inputs.GetInstanceTypesArgs;
import com.pulumi.alicloud.emr.inputs.GetDiskTypesArgs;
import com.pulumi.alicloud.vpc.Network;
import com.pulumi.alicloud.vpc.NetworkArgs;
import com.pulumi.alicloud.ecs.SecurityGroup;
import com.pulumi.alicloud.ecs.SecurityGroupArgs;
import com.pulumi.alicloud.vpc.Switch;
import com.pulumi.alicloud.vpc.SwitchArgs;
import com.pulumi.alicloud.ram.Role;
import com.pulumi.alicloud.ram.RoleArgs;
import com.pulumi.alicloud.emr.Cluster;
import com.pulumi.alicloud.emr.ClusterArgs;
import com.pulumi.alicloud.emr.inputs.ClusterHostGroupArgs;
import com.pulumi.codegen.internal.KeyedValue;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
final var defaultMainVersions = EmrFunctions.getMainVersions();
final var defaultInstanceTypes = EmrFunctions.getInstanceTypes(GetInstanceTypesArgs.builder()
.destinationResource("InstanceType")
.clusterType(defaultMainVersions.applyValue(getMainVersionsResult -> getMainVersionsResult.mainVersions()[0].clusterTypes()[0]))
.supportLocalStorage(false)
.instanceChargeType("PostPaid")
.supportNodeTypes("GATEWAY")
.build());
final var dataDisk = EmrFunctions.getDiskTypes(GetDiskTypesArgs.builder()
.destinationResource("DataDisk")
.clusterType(defaultMainVersions.applyValue(getMainVersionsResult -> getMainVersionsResult.mainVersions()[0].clusterTypes()[0]))
.instanceChargeType("PostPaid")
.instanceType(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].id()))
.zoneId(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].zoneId()))
.build());
final var systemDisk = EmrFunctions.getDiskTypes(GetDiskTypesArgs.builder()
.destinationResource("SystemDisk")
.clusterType(defaultMainVersions.applyValue(getMainVersionsResult -> getMainVersionsResult.mainVersions()[0].clusterTypes()[0]))
.instanceChargeType("PostPaid")
.instanceType(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].id()))
.zoneId(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].zoneId()))
.build());
for (var i = 0; i < (var_.vpc_id() == "" ? 1 : 0 == true); i++) {
new Network("vpc-" + i, NetworkArgs.builder()
.cidrBlock(var_.vpc_cidr())
.build());
}
for (var i = 0; i < (var_.security_group_id() == "" ? 1 : 0 == true); i++) {
new SecurityGroup("defaultSecurityGroup-" + i, SecurityGroupArgs.builder()
.vpcId(var_.vpc_id() == "" ? vpc.id() : var_.vpc_id())
.build());
}
for (var i = 0; i < (var_.vswitch_id() == "" ? 1 : 0 == true); i++) {
new Switch("vswitch-" + i, SwitchArgs.builder()
.availabilityZone(var_.availability_zone() == "" ? defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].zoneId()) : var_.availability_zone())
.vswitchName(var_.vswitch_name())
.cidrBlock(var_.vswitch_cidr())
.vpcId(var_.vpc_id() == "" ? vpc.id() : var_.vpc_id())
.build());
}
var defaultRole = new Role("defaultRole", RoleArgs.builder()
.document("""
{
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": {
"Service": [
"emr.aliyuncs.com",
"ecs.aliyuncs.com"
]
}
}
],
"Version": "1"
}
""")
.description("this is a role test.")
.force(true)
.build());
var gateway = new Cluster("gateway", ClusterArgs.builder()
.emrVer(defaultMainVersions.applyValue(getMainVersionsResult -> getMainVersionsResult.mainVersions()[0].emrVersion()))
.clusterType("GATEWAY")
.hostGroups(ClusterHostGroupArgs.builder()
.hostGroupName("master_group")
.hostGroupType("GATEWAY")
.nodeCount("1")
.instanceType(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].id()))
.diskType(dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].value()))
.diskCapacity(dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) 160 ? dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) : 160)
.diskCount("1")
.sysDiskType(systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].value()))
.sysDiskCapacity(systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) 160 ? systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) : 160)
.build())
.highAvailabilityEnable(true)
.zoneId(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].zoneId()))
.securityGroupId(var_.security_group_id() == "" ? defaultSecurityGroup.id() : var_.security_group_id())
.isOpenPublicIp(true)
.chargeType("PostPaid")
.vswitchId(var_.vswitch_id() == "" ? vswitch.id() : var_.vswitch_id())
.userDefinedEmrEcsRole(defaultRole.name())
.sshEnable(true)
.masterPwd("ABCtest1234!")
.relatedClusterId(related_cluster_id)
.build());
}
}
Import
Aliclioud E-MapReduce cluster can be imported using the id e.g.
$ pulumi import alicloud:emr/cluster:Cluster default C-B47FB8FE96C67XXXX