4
votes

AWS CLI command aws emr list-clusters returns the following json. Is there a way through bash or groovy that I can use the Name to get the Id? I can't just use the Id becauseI am deleting clusters and rebuilding them with only the same name. So I know the name of the cluster is "my-cluster" and I would like to use it somehow to get the Id of the cluster. End case is I actually want the Master public DNS of the cluster.

    {
        "Clusters": [
        {
            "Status": {
                "Timeline": {
                "ReadyDateTime": 1433200405.353,
                "CreationDateTime": 1433199926.596
            },
            "State": "WAITING",
            "StateChangeReason": {
                "Message": "Waiting after step completed"
                }
            },
            "NormalizedInstanceHours": 6,
            "Id": "j-3SD91U2E1L2QX",
            "Name": "my-cluster"
        },
        {
            "Status": {
                "Timeline": {
                    "ReadyDateTime": 1433200405.353,
                    "CreationDateTime": 1433199926.596
            },
            "State": "WAITING",
            "StateChangeReason": {
                "Message": "Waiting after step completed"
            }
        },
        "NormalizedInstanceHours": 6,
        "Id": "j-3S281UEK8L2LW",
        "Name": "my-cluster2"
        }
    ]
    }
2
your question asks how to get the cluster id, but you mention the end state is to get the public dns name for the cluster, do you want a 1-liner to get the dns name directly?Lucas Roberts

2 Answers

13
votes

You can use the query parameter to achieve what you are trying. The command will look like below:

aws emr list-clusters --query 'Clusters[?Name==`my-cluster`].Id' --output text

You can find the complete documentation for the query parameter here.

0
votes

To answer the complete question, one could put the above approach into a long one-liner over several lines.

aws emr describe-cluster                                       \
 --output text                                                 \
 --cluster-id  $(aws emr list-clusters                         \
                  --active                                     \
                  --query 'Clusters[?Name==`my-cluster`].Id'   \
                  --output text)                               \
 --query Cluster.MasterPublicDnsName