"Роль службы EMR недействительна" при создании кластера EMR

После создания ведра Amazon S3, my_bucket, я создал кластер Elastic Map Reduce через cli:

aws emr create-cluster --name "Тестирование кустов" --ami-версия 3.3 --applications Name = Hive --use-default-role -instance-type m3.xlarge -instance-count 3 --steps Тип = Hive, Name= "Программа улья", Args = [- d, INPUT = s3://my_bucket/input,-d.OUTPUT=s3://my_bucket/вход, D-ЛИЭС = s3://my_bucket/serde_libs]

Заметьте, что я не указал файл hive *. q. После создания кластера S3 и EMR я запишусь в поле EMR, а затем запустим hive в интерактивном режиме.

Примечание. Я предполагаю, что есть поле EMR, на которое я могу войти.

Однако, когда я запустил aws emr describe-cluster --cluster-id XYZ, я увидел эту ошибку в выходе:

   "State": "TERMINATED_WITH_ERRORS", 
        "StateChangeReason": {
            "Message": "EMR service role arn:aws:iam::xyz:role/EMR_DefaultRole 
                         is invalid", 
            "Code": "VALIDATION_ERROR"
        }

Что может вызвать эту ошибку? Нужно ли мне открывать разрешения на вебе S3 для кластера EMR для доступа к нему?

Ответ 1

Проблема связана не с ведром, а с ожидаемой ролью IAM.

См. http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/emr-iam-roles-creatingroles.html#emr-iam-roles-createdefaultwithcli

Выполните команду AWS CLI:

aws emr create-default-roles 

Затем создайте кластер еще раз. Это одноразовый шаг, необходимый для создания ролей по умолчанию.

  • Примечание: остерегайтесь использования последней версии aws cli, у меня были проблемы с 1.4 (debian jessie package)

  • Примечание 2: взято из кода mrjob и амазонок:

    Профиль экземпляра и роль службы необходимы для созданных учетных записей после 6 апреля 2015 г. и в конечном итоге потребуется для всех учетных записей.

Ответ 2

Я видел, как эта проблема возникает при создании пользовательских ролей служб и назначении неправильной главной службы.

В этом примере будет создана эта ошибка:

{
   "Version": "2012-10-17",
   "Statement": [
     {
       "Action": "sts:AssumeRole",
       "Principal": {
         "Service": "ec2.amazonaws.com"
       },
       "Effect": "Allow",
       "Sid": "Invalid"
     }
   ]
}

В этом примере не будет:

{
   "Version": "2012-10-17",
   "Statement": [
     {
       "Action": "sts:AssumeRole",
       "Principal": {
         "Service": "elasticmapreduce.amazonaws.com"
       },
       "Effect": "Allow",
       "Sid": "Valid"
     }
   ]
}

Подробнее см. здесь: http://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-mgmt.pdf#emr-plan-access-iam