2016-04-27 14 views
5

Sto tentando di eseguire script Spark EC2 per avviare un cluster con un ruolo IAM che può essere assunto dal mio utente sotto il mio account root.Esecuzione di script Spark EC2 con ruolo IAM

Secondo this JIRA ticket, possiamo ora indicare --profile durante l'esecuzione degli script Spark EC2, e il comments on the pull request dire che l'opzione --profile si riferisce a ciò che credo come profilo AWSCLI.

Quando eseguo gli script come

ec2/spark-ec2 -k key-name -i key-name.pem -s 1 --profile myprofile --instance-type=t2.medium launch test-cluster 

ottengo

Profile "myprofile" not found! 

Tuttavia, l'esecuzione

aws s3 ls s3://mybucket --profile myprofile 

funziona come previsto, che porta il mio pensare al ruolo IAM è stato specificato correttamente nel ~/.aws/config (Non penso di aver specificato i ruoli IAM nello ~/.aws/credentials).

Tuttavia, quando aggiungo un profilo di prova per la ~/.aws/credentials come

[foobar] 
aws_secret_access_key=xxxxxxx 
aws_access_key_id=xxxxxxx 

Spark trova il profilo foobar. Tuttavia, dopo l'aggiunta di

[foobar] 
role_arn = arn:aws:iam::12345:role/MY_ROLE 
aws_secret_access_key=xxxxxxx 
aws_access_key_id=xxxxxxx 

Spark trova il profilo foobar, ma non accedere correttamente nel ruolo IAM. Ottengo

boto.exception.EC2ResponseError: EC2ResponseError: 400 Bad Request 
<?xml version="1.0" encoding="UTF-8"?> 
<Response><Errors><Error><Code>InvalidKeyPair.NotFound</Code><Message>The key pair 'key-name' does not exist</Message></Error></Errors><RequestID>fcebd475-a895-4a5b-9a29-9783fd6b7f3d</RequestID></Response> 

Questo perché la coppia di chiavi key-name non esiste sotto il mio utente, ma esiste con il ruolo IAM ho bisogno di assumere. Questo mi dice che Spark non sta registrando correttamente il ruolo di IAM.


mio ~/.aws/config:

[default] 
region = us-east-1 
aws_secret_access_key = xxxxx 
aws_access_key_id = xxxxx 

[profile myprofile] 
role_arn = arn:aws:iam::12345:role/MY_ROLE 
source_profile = default 

mio ~/.aws/credentials:

[default] 
aws_secret_access_key = xxxxx 
aws_access_key_id = xxxxx 

laterale nota- hanno cercato anche:

A ssuming il ruolo manualmente con

aws sts assume-role --role-arn arn:aws:iam::12345:role/MY_ROLE --role-session-name temp-session 

quindi esportare il AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN, e AWS_ACCESS_KEY_ID alle variabili di ambiente. Allora ho fatto funzionare gli script EC2 senza alcun profilo specificato e ha ottenuto

boto.exception.EC2ResponseError: EC2ResponseError: 401 Unauthorized 
<?xml version="1.0" encoding="UTF-8"?> 
<Response><Errors><Error><Code>AuthFailure</Code><Message>AWS was not able to validate the provided access credentials</Message></Error></Errors><RequestID>11402f6e-074c-478c-84c1-11fb92ad0bff</RequestID></Response> 

laterale nota- cercato anche:

Secondo this JIRA on Spark scripts with IAM roles, possiamo specificare --instance-profile-name (non è in un'istanza del solo modo di utilizzare un ruolo IAM in questo modo? cioè .. dovrei chiedere al nostro amministratore l'elenco IAM/creare le autorizzazioni per avviare un cluster con un ruolo IAM?). Ho provato con arn:aws:iam::12345:role/MY_ROLE e MY_ROLE ma ottengo

boto.exception.EC2ResponseError: EC2ResponseError: 400 Bad Request 
<?xml version="1.0" encoding="UTF-8"?> 
<Response><Errors><Error><Code>InvalidParameterValue</Code><Message>Value (arn:aws:iam::12345:role/MY_ROLE) for parameter iamInstanceProfile.name is invalid. Invalid IAM Instance Profile name</Message></Error></Errors><RequestID>ffeffef9-acad-4a34-a925-31f6b5bbbb3e</RequestID></Response> 

risposta

0

Sono riuscito l'assegnazione di un ruolo a un'istanza EC2, fornendo il parametro '--instance-profilo-name' con lo script scintilla EC2, che è possibile passare un profilo nome.

Dentro l'istanza assicurarsi di eseguire

sudo yum update 

un'occhiata anche a mia domanda: Running Spark EC2 scripts with IAM role

Good Luck

Problemi correlati