Search code examples
bashamazon-web-servicesgroovy

Get AWS EMR Cluster ID from Name


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"
        }
    ]
    }

Solution

  • 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.