Установите Su bnet ID и имя ключа EC2 в конфигурации кластера EMR с помощью пошаговых функций - PullRequest
1 голос
/ 06 января 2020

По состоянию на ноябрь 2019 г. AWS Step Function имеет встроенную поддержку оркестровки кластеров EMR. Поэтому мы пытаемся настроить кластер и запустить на нем некоторые задания.

Мы не смогли найти никакой документации о том, как установить SubnetId, а также имя ключа, используемого для экземпляров EC2 в кластере. Есть ли такая возможность?

На данный момент наш шаг создания кластера выглядит следующим образом:

"States": {
          "Create an EMR cluster": {
            "Type": "Task",
            "Resource": "arn:aws:states:::elasticmapreduce:createCluster.sync",
            "Parameters": {
              "Name": "TestCluster",
              "VisibleToAllUsers": true,
              "ReleaseLabel": "emr-5.26.0",
              "Applications": [
                { "Name": "spark" }
              ],
              "ServiceRole": "SomeRole",
              "JobFlowRole": "SomeInstanceProfile",
              "LogUri": "s3://some-logs-bucket/logs",
              "Instances": {
                "KeepJobFlowAliveWhenNoSteps": true,
                "InstanceFleets": [
                  {
                    "Name": "MasterFleet",
                    "InstanceFleetType": "MASTER",
                    "TargetOnDemandCapacity": 1,
                    "InstanceTypeConfigs": [
                      {
                        "InstanceType": "m3.2xlarge"
                      }
                    ]
                  },
                  {
                    "Name": "CoreFleet",
                    "InstanceFleetType": "CORE",
                    "TargetSpotCapacity": 2,
                    "InstanceTypeConfigs": [
                      {
                        "InstanceType": "m3.2xlarge",
                        "BidPriceAsPercentageOfOnDemandPrice": 100                         }
                    ]
                  }
                ]
              }
            },
            "ResultPath": "$.cluster",
            "End": "true"
          }
}

Как только мы пытаемся добавить ключ "SubnetId" в любой из подобъектов в параметрах или в самом параметре мы получаем ошибку:

Invalid State Machine Definition: 'SCHEMA_VALIDATION_FAILED: The field "SubnetId" is not supported by Step Functions at /States/Create an EMR cluster/Parameters' (Service: AWSStepFunctions; Status Code: 400; Error Code: InvalidDefinition;

1 Ответ

0 голосов
/ 09 января 2020

Обращаясь к документам SF по интеграции emr , мы видим, что createCluster.syn c использует API emr RunJobFlow . В RunJobFlow мы можем указать Ec2KeyName и Ec2SubnetId, расположенные по путям $ .Instances.Ec2KeyName и $ .Instances.Ec2SubnetId.

С учетом сказанного мне удалось создать конечный автомат со следующим определением (в примечании к вашему определению была синтаксическая ошибка с "End": "true", которая должна быть "End": true)

{
"Comment": "A Hello World example of the Amazon States Language using Pass states",
"StartAt": "Create an EMR cluster",
"States": {
    "Create an EMR cluster": {
        "Type": "Task",
        "Resource": "arn:aws:states:::elasticmapreduce:createCluster.sync",
        "Parameters": {
            "Name": "TestCluster",
            "VisibleToAllUsers": true,
            "ReleaseLabel": "emr-5.26.0",
            "Applications": [
                {
                    "Name": "spark"
                }
            ],
            "ServiceRole": "SomeRole",
            "JobFlowRole": "SomeInstanceProfile",
            "LogUri": "s3://some-logs-bucket/logs",
            "Instances": {
                "Ec2KeyName": "ENTER_EC2KEYNAME_HERE",
                "Ec2SubnetId": "ENTER_EC2SUBNETID_HERE",
                "KeepJobFlowAliveWhenNoSteps": true,
                "InstanceFleets": [
                    {
                        "Name": "MasterFleet",
                        "InstanceFleetType": "MASTER",
                        "TargetOnDemandCapacity": 1,
                        "InstanceTypeConfigs": [
                            {
                                "InstanceType": "m3.2xlarge"
                            }
                        ]
                    },
                    {
                        "Name": "CoreFleet",
                        "InstanceFleetType": "CORE",
                        "TargetSpotCapacity": 2,
                        "InstanceTypeConfigs": [
                            {
                                "InstanceType": "m3.2xlarge",
                                "BidPriceAsPercentageOfOnDemandPrice": 100
                            }
                        ]
                    }
                ]
            }
        },
        "ResultPath": "$.cluster",
        "End": true
    }
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...