我想自动化集群的运行,并且可以使用标签来获取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
答案 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