3

Dieses Tutorial zeigt, wie ein Lambda von CodePipeline Invoke einen einzigen Parameter übergeben:Invoke Lambda von CodePipeline mit mehreren Userparameters

http://docs.aws.amazon.com/codepipeline/latest/userguide/how-to-lambda-integration.html

ich ein slackhook Lambda aufgebaut haben, die zwei Parameter zu erhalten, muss:

  • webhook_url
  • Nachricht

Wenn JSON über den CodePipeline-Editor übergeben wird, wird der JSON-Block gesendet, sodass er nicht direkt analysiert werden kann.

Userparameter übergeben:

{ 
    "webhook":"https://hooks.slack.com/services/T0311JJTE/3W...W7F2lvho", 
    "message":"Staging build awaiting approval for production deploy" 
} 

Benutzerparameter in der Ereignisnutzlast

UserParameters: '{ 
    "webhook":"https://hooks.slack.com/services/T0311JJTE/3W...W7F2lvho", 
    "message":"Staging build awaiting approval for production deploy" 
}' 

Beim Versuch, mehrere Userparameters direkt in der Cloudformation wie folgt anzuwenden:

Name: SlackNotification 
    ActionTypeId: 
    Category: Invoke 
    Owner: AWS 
    Version: '1' 
    Provider: Lambda 
    OutputArtifacts: [] 
    Configuration: 
    FunctionName: aws-notify2 
    UserParameters: 
     - webhook: !Ref SlackHook 
     - message: !Join [" ",[!Ref app, !Ref env, "build has started"]] 
    RunOrder: 1 

einen Fehler erstellen - Die Konfiguration darf nur einfache Objekte oder Strings enthalten.

Alle Vermutungen darüber, wie mehrere UserParameters, die von einer CloudFormation-Vorlage in ein Lambda übergeben werden, erhalten würden, wären sehr willkommen.

Hier ist der Lambda-Code als Referenz: https://github.com/byu-oit-appdev/aws-codepipeline-lambda-slack-webhook

Antwort

4

Sie sollen mehr UserParameters als ein einzelne JSON-Objekt Zeichenfolge übergeben können, dann die JSON in Ihrer Lambda-Funktion beim Empfang analysiert.

Das ist genau, wie die Python example in der Dokumentation diesen Fall behandelt:

try: 
    # Get the user parameters which contain the stack, artifact and file settings 
    user_parameters = job_data['actionConfiguration']['configuration']['UserParameters'] 
    decoded_parameters = json.loads(user_parameters) 

ähnlich JSON.parse verwenden, sollte in Node.JS funktioniert ein JSON-Objekt Zeichenfolge zu analysieren (wie in Ihrem Event-Payload Beispiel gezeigt) in ein nutzbares JSON-Objekt:

> JSON.parse('{ "webhook":"https://hooks.slack.com/services/T0311JJTE/3W...W7F2lvho", "message":"Staging build awaiting approval for production deploy" }') 
{ webhook: 'https://hooks.slack.com/services/T0311JJTE/3W...W7F2lvho', 
    message: 'Staging build awaiting approval for production deploy' } 
+0

@Eric Wenn Sie Pipeline mit Cloudformation oder CLI erstellen, denken Sie daran, die Anführungszeichen zu entkommen. – RandomQuestion

Verwandte Themen