{
   "AWSTemplateFormatVersion":"2010-09-09",
   "Description":"Default EMR Cluster",
   "Parameters":{
      "ClusterName":{
         "Type":"String",
         "Description":"Name your cluster"
      },
      "ClusterSize": {
        "Type": "Number",
        "Description": "Size of cluster",
        "AllowedValues": [
            "2",
            "5",
            "10",
            "20",
            "50",
            "100"
        ],
        "Default": "2"
      },
      "ComputeRequirements":{
         "Type":"String",
         "Description":"Compute requirements",
         "AllowedValues":[
            "Generic",
            "CPU",
            "Memory"
         ],
         "Default":"Generic"
      }
   },
   "Mappings":{
      "ComputeMapping":{
         "Generic":{
            "instancetype":"m5.xlarge"
         },
         "CPU":{
            "instancetype":"c5.xlarge"
         },
         "Memory":{
            "instancetype":"r5.xlarge"
         }
      }
   },
   "Resources":{
      "EMRCluster":{
         "Type":"AWS::EMR::Cluster",
         "Properties":{
            "Name":{
               "Ref":"ClusterName"
            },
            "JobFlowRole":"EMR_EC2_Restricted_Role",
            "ServiceRole":"EMRClusterServiceRole",
            "ReleaseLabel":"emr-5.29.0",
            "VisibleToAllUsers": true,
            "Instances":{
               "Ec2SubnetId":"subnet-id",
               "Ec2KeyName":"key-name",
               "EmrManagedMasterSecurityGroup" : "sec-group-id",
               "EmrManagedSlaveSecurityGroup" : "sec-group-id",
               "MasterInstanceGroup":{
                  "InstanceCount":1,
                  "InstanceType":{
                     "Fn::FindInMap":[
                        "ComputeMapping",
                        {
                           "Ref":"ComputeRequirements"
                        },
                        "instancetype"
                     ]
                  },
                  "Market":"ON_DEMAND",
                  "Name":"Master"
               },
               "CoreInstanceGroup":{
                  "InstanceCount": { "Ref": "ClusterSize" },
                  "InstanceType":{
                     "Fn::FindInMap":[
                        "ComputeMapping",
                        {
                           "Ref":"ComputeRequirements"
                        },
                        "instancetype"
                     ]
                  },
                  "Market":"ON_DEMAND",
                  "Name":"Core"
               }
            },
            "Applications":[
               {
                  "Name":"Spark"
               },
               {
                  "Name":"Ganglia"
               },
               {
                  "Name":"Hive"
               }
            ],
            "LogUri":{
               "Fn::Join":[
                  "",
                  [
                     "s3://emr-sc-blog-",
                     {
                        "Ref":"AWS::AccountId"
                     },
                     "/emrlogs/"
                  ]
               ]
            }
         }
      }
   },
   "Outputs":{
      "MasterNodeHadoopURL":{
         "Description":"EMR Resource Manager",
         "Value":{
            "Fn::Sub":"http://${EMRCluster.MasterPublicDNS}:8088"
         }
      }
   }
}