AWS CLI EMR获取主节点实例ID并对其进行标记

时间:2018-09-10 11:04:40

标签: amazon-web-services aws-cli amazon-emr

我想自动化集群的运行,并且可以使用标签来获取EC2实例的属性,例如其instance-id。

https://docs.aws.amazon.com/cli/latest/reference/emr/create-cluster.html上的文档指出

  

-标签(列表)

     

与集群关联的标签列表,适用于每个亚马逊   集群中的EC2实例。标签是键值对,包含   最多包含128个字符的必需密钥字符串,以及   可选的值字符串,最多256个字符。

     

您可以指定键=值格式的标签,也可以添加不带标签的标签   仅使用键名的值,例如key。使用空格   分隔多个标签。

因此,这会将标签应用于每个EC2实例,包括主机和从机。如何识别主节点是哪个实例?

其他信息: 我正在使用以下命令根据标签从aws cli获取属性,您可以在其中分别用标签键值对替换“名称”和“产品”。

aws ec2 describe-instances | jq '.Reservations[].Instances | select(.[].Tags[].Value | startswith("Prod") ) |   select(.[].Tags[].Key == "Name") |   {InstanceId: .[].InstanceId, PublicDnsName: .[].PublicDnsName, State: .[].State, LaunchTime: .[].LaunchTime, Tags: .[].Tags}   | [.]' | jq .[].InstanceId

4 个答案:

答案 0 :(得分:1)

在没有aws cli的环境中,可以cat以下文件:

cat /mnt/var/lib/info/job-flow.json

内容示例如下:

{
  "jobFlowId": "j-0000X0X0X00XX",
  "jobFlowCreationInstant": 1579512208006,
  "instanceCount": 2,
  "masterInstanceId": "i-00x0xx0000xxx0x00",
  "masterPrivateDnsName": "localhost",
  "masterInstanceType": "m5.xlarge",
  "slaveInstanceType": "m5.xlarge",
  "hadoopVersion": "2.8.5",
  "instanceGroups": [
    {
      "instanceGroupId": "ig-0XX00XX0X0XXX",
      "instanceGroupName": "Master - 1",
      "instanceRole": "Master",
      "marketType": "OnDemand",
      "instanceType": "m5.xlarge",
      "requestedInstanceCount": 1
    },
    {
      "instanceGroupId": "ig-000X0XXXXXXX",
      "instanceGroupName": "Core - 2",
      "instanceRole": "Core",
      "marketType": "OnDemand",
      "instanceType": "m5.xlarge",
      "requestedInstanceCount": 1
    }
  ]

注意:我已经省略了作业的ID,其中使用0(期望数字)和X(期望矮子)。

答案 1 :(得分:0)

以下可用于直接获取实例ID

aws emr list-instances --cluster-id ${aws_emr_cluster.cluster.id} --instance- 
group-id ${aws_emr_cluster.cluster.master_instance_group.0.id}  --query 
'Instances[*].Ec2InstanceId' --output text

答案 2 :(得分:0)

下面的示例是 Instance Fleet 的示例,它将 Cluster ID Instance Fleet ID Master IP 保存为环境变量。

将群集名称“ My-Cluster”替换为实际的群集名称。

export CLUSTER_ID=$(aws emr list-clusters --active --query 'Clusters[?Name==`My-Cluster`].Id' --output text)
export INSTANCE_FLEET=$(aws emr describe-cluster --cluster-id $CLUSTER_ID | jq -r '.[].InstanceFleets | .[] | select(.InstanceFleetType=="MASTER") | .Id')
export PRIVATE_IP=aws emr list-instances --cluster-id $CLUSTER_ID --instance-fleet-id $INSTANCE_FLEET  --query 'Instances[*].PrivateIpAddress' --output text

答案 3 :(得分:0)

您可以在 3 行代码中以编程方式完成此操作,而无需复制粘贴任何特定信息:

# get cluster id
CLUSTER_ID=$(aws emr list-clusters --active --query "Clusters[0].Id" --output text)

# get instance id
INSTANCE_ID=$(aws emr list-instances --cluster-id $CLUSTER_ID --instance-group-types MASTER --query "Instances[0].Ec2InstanceId" --output text)

# tag
aws ec2 create-tags --resources $INSTANCE_ID --tags Key=EMR,Value=MASTER