2017-04-21 3 views
2

Ich habe meine Pipeline so eingerichtet, dass sie eine AWS Lamba-Funktion aufruft. Nach einer Laufzeit von 10 Minuten, das ist der Fehler, den ich bekommen:Zugriff verweigert, wenn AWS Lambda-Funktion von AWS CodePipeline aufgerufen wird

Aktion Ausführung der AWS Lambda-Funktion addAMIToAutoScalingLC fehlgeschlagen fehlgeschlagen ein Ergebnis zurück. Überprüfen Sie, ob die Funktion berechtigt ist, die PutJobSuccessResult-Aktion aufzurufen, und dass sie einen -Aufruf an PutJobSuccessResult vorgenommen hat.

Die Protokolle selbst enthalten keine relevanten Informationen.

Ich glaube, meine IAM Berechtigungen Set-up richtig:

  • Die Lambda-Funktion wird mit einer Rolle ausführen, die hat: AWSLambdaFullAccess, AWSCodePipelineFullAccess.
  • Die CodePipeline ist Ich denke, mit der Rolle AWS-CodePipeline-Service ausführen, die hat: AWSLambdaFullAccess

Ich denke, dass mein Skript den Anruf zu PutJobSuccessResult macht, denn wenn ich das Skript testen ich ein Execution result: succeeded bekommen.

Mein Skript benötigt keine Parameter, daher habe ich keinen Benutzerparameter in CodePipeline angegeben.

Was soll ich weiter untersuchen?

+1

Welche Art der Authentifizierung Sie verwenden hier? IAM oder ressourcenbasiert? – kosa

+0

Ich benutze IAM (ich habe die Regeln beschrieben) – Nicorr

Antwort

2

Die Antwort gefunden. Das Problem kam nicht von der Erlaubnis, sondern von der Abwesenheit des Anrufs PutJobSuccessResult: Die Pipeline wusste nicht, dass die Lambda-Funktion ausgeführt wurde, so wartete bis zum Timeout.

Dieser Codeblock löste das Problem (Python):

def lambda_handler(event, context): 

    # stuff 

    response = pipeline.put_job_success_result(
     jobId=event['CodePipeline.job']['id'] 
    ) 
    return response 
Verwandte Themen