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

问题描述 投票:2回答:1

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

关于https://docs.aws.amazon.com/cli/latest/reference/emr/create-cluster.html的文件说明了这一点

--tags(列表)

与群集关联的标记列表,适用于群集中的每个Amazon EC2实例。标签是键值对,由最多128个字符的必需键字符串和最多256个字符的可选值字符串组成。

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

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

附加信息:我使用以下命令从aws cli获取属性,这些标记可以分别用标签键值对替换“Name”和“Prod”。

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
amazon-web-services aws-cli amazon-emr
1个回答
2
投票

正如您在创建EMR集群时所指出的那样,所有节点(Master,Slave,Task)的标签都是相同的。

您会发现使用AWS CLI的此过程很复杂。我的建议是查看下面的示例,然后编写一个Python程序来执行此操作。

将您自己的标签添加到EC2实例的过程。

第1步:列出您的EMR集群:aws emr list-clusters

这将输出JSON:

{
    "Clusters": [
        {
            "Id": "j-ABCDEFGHIJKLM",
            "Name": "'MyCluster'",
            "Status": {
                "State": "WAITING",
                "StateChangeReason": {
                    "Message": "Cluster ready after last step completed."
                },
                "Timeline": {
                    "CreationDateTime": 1536626095.303,
                    "ReadyDateTime": 1536626568.482
                }
            },
            "NormalizedInstanceHours": 0
        }
    ]
}

第2步:记下JSON中的集群ID:

"Id": "j-ABCDEFGHIJKLM",

第3步:描述您的EMR集群:aws emr describe-cluster --cluster-id j-ABCDEFGHIJKLM

这将输出JSON(我已将此输出截断为仅MASTER部分):

{
    "Cluster": {
        "Id": "j-ABCDEFGHIJKLM",
        "Name": "'Test01'",
....
        "InstanceGroups": [
            {
                "Id": "ig-2EHOYXFABCDEF",
                "Name": "Master Instance Group",
                "Market": "ON_DEMAND",
                "InstanceGroupType": "MASTER",
                "InstanceType": "m3.xlarge",
                "RequestedInstanceCount": 1,
                "RunningInstanceCount": 1,
                "Status": {
                    "State": "RUNNING",
                    "StateChangeReason": {
                        "Message": ""
                    },
                    "Timeline": {
                        "CreationDateTime": 1536626095.316,
                        "ReadyDateTime": 1536626533.886
                    }
                },
                "Configurations": [],
                "EbsBlockDevices": [],
                "ShrinkPolicy": {}
            },
....
        ]
    }
}

第4步:InstanceGroups是一个数组。找到InstanceGroupTypeMASTER的条目。记下Id

"Id": "ig-2EHOYXFABCDEF",

第5步:列出您的集群实例:aws emr list-instances --cluster-id j-ABCDEFGHIJKLM

这将输出JSON(我已截断输出):

{
    "Instances": [
....
        {
            "Id": "ci-31LGK4KIECHNY",
            "Ec2InstanceId": "i-0524ec45912345678",
            "PublicDnsName": "ec2-52-123-201-221.us-west-2.compute.amazonaws.com",
            "PublicIpAddress": "52.123.201.221",
            "PrivateDnsName": "ip-172-31-41-111.us-west-2.compute.internal",
            "PrivateIpAddress": "172.31.41.111",
            "Status": {
                "State": "RUNNING",
                "StateChangeReason": {},
                "Timeline": {
                    "CreationDateTime": 1536626164.073,
                    "ReadyDateTime": 1536626533.886
                }
            },
            "InstanceGroupId": "ig-2EHOYXFABCDEF",
            "Market": "ON_DEMAND",
            "InstanceType": "m3.xlarge",
            "EbsVolumes": []
        }
    ]
}

第6步:找到匹配的InstanceGroupId ig-2EHOYXFABCDEF。这将为您提供MASTER的EC2实例ID:"Ec2InstanceId": "i-0524ec45912345678"

第7步:标记您的EC2实例:

aws ec2 create-tags --resources i-0524ec45912345678 --tags Key=EMR,Value=MASTER

使用CLI Filters和/或jq,上述步骤可能更简单,但这应该是足够的信息,以便您知道如何查找和标记EMR主实例。

© www.soinside.com 2019 - 2024. All rights reserved.