AWS CLI EMR получает идентификатор экземпляра главного узла и помечает его - PullRequest
0 голосов
/ 10 сентября 2018

Я хочу автоматизировать работу кластера и могу использовать теги для получения атрибутов экземпляра EC2, таких как его экземпляр-идентификатор.

Документация по https://docs.aws.amazon.com/cli/latest/reference/emr/create-cluster.html гласит, что

- теги (список)

Список тегов, которые нужно связать с кластером, которые применяются к каждому Amazon Экземпляр EC2 в кластере. Теги - это пары ключ-значение, состоящие из обязательная ключевая строка длиной не более 128 символов и необязательная строка значения длиной не более 256 символов.

Вы можете указать теги в формате ключ = значение или добавить тег без значение, использующее только имя ключа, например, ключ. Используйте пробел для разделите несколько тегов.

Так что это применяет теги к каждому экземпляру 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

1 Ответ

0 голосов
/ 11 сентября 2018

Как вы заметили при создании кластера EMR, теги одинаковы для всех узлов (Master, Slave, Task).

Вы обнаружите, что этот процесс, использующий интерфейс командной строки AWS, будет сложным. Я рекомендую ознакомиться с приведенными ниже примерами и написать для этого программу на 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": "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 - это массив. Найдите запись, где InstanceGroupType равно MASTER. Запишите 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. Это даст вам идентификатор экземпляра EC2 для MASTER: "Ec2InstanceId": "i-0524ec45912345678"

Шаг 7: пометьте свой экземпляр EC2:

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

Вышеуказанные шаги могут быть проще с CLI Filters и / или jq, но этой информации должно быть достаточно, чтобы вы знали, как найти и пометить мастер-экземпляр EMR.

...