2017-10-12 9 views
1

J'ai actuellement une fonction lambda qui met à jour une table DynamoDB avec une valeur passée en paramètre. Je suis en mesure d'exécuter les éléments suivants dans la console Lambda avec un paramètre de test mis à "TEST":Exécuter Lambda à partir d'AWS SSM Automation avec les paramètres

import boto3 
import json 

def lambda_handler(event, context): 
    # TODO implement 
    update_ami(event) 


def update_ami(ami_id): 
    #DO STUFF 

Je tente d'appeler cela à partir d'une automatisation SSM construit à partir du document JSON suivant:

{ 
    "description":"Test Execute Lambda Function.", 
    "schemaVersion":"0.3", 
    "assumeRole":"MYARN", 
    "parameters":{}, 
    "mainSteps":[ 
     { 
      "name": "invokeMyLambdaFunction", 
      "action": "aws:invokeLambdaFunction", 
      "maxAttempts": 3, 
      "timeoutSeconds": 120, 
      "onFailure": "Abort", 
      "inputs": { 
       "FunctionName": "MyLambdaFunction", 
       "Payload": "TESTER" 

      } 
     } 
    ] 
} 

l'exécution de cette automatisation aboutit à l'erreur suivante:

Automation Step Execution fails when it is invoking the lambda function. Get Exception from Invoke API of lambda Service. Exception Message from Invoke API: [Could not parse request body into json: Unrecognized token 'TESTER': was expecting ('true', 'false' or 'null') 

J'ai aussi essayé passer l'entrée Payload comme un objet JSON instea d d'une chaîne, et ajusté ma méthode lambda en conséquence:

JSON Automatisation:

... 
    "inputs": { 
     "FunctionName": "MyLambdaFunction", 
     "Payload": { 
      "ami_id": "AMI-TESTER" 
     } 
    } 
... 

Lambda Python:

def lambda_handler(event, context): 
    # TODO implement 
    update_ami(event['ami-id']) 

Il en résulte l'erreur suivante provenant de l'automatisation éditeur de document dans le Console SSM:

Input {ami_id=TESTER} is of type class java.util.LinkedHashMap, but expected type is String. 

Donc, en un mot ... Comment transmettre une seule chaîne d'un document Automation à une fonction Lambda?

Répondre

0

L'erreur qui est indiqué ci-dessous semble être question avec une charge utile non passée sous forme de chaîne:

Input {ami_id=TESTER} is of type class java.util.LinkedHashMap, but expected type is String 

S'il vous plaît essayer d'utiliser le caractère d'échappement avant guillemets doubles.

"inputs": { 
      "FunctionName": "MyLambdaFunction", 
      "Payload": "{ 
       \"ami_id\": \"AMI-TESTER\" 
      }" 
     } 

AWS a fourni une syntaxe correcte, si vous voyez this Url

{ 
    "name":"updateSsmParam", 
    "action":"aws:invokeLambdaFunction", 
    "timeoutSeconds":1200, 
    "maxAttempts":1, 
    "onFailure":"Abort", 
    "inputs":{ 
     "FunctionName":"Automation-UpdateSsmParam", 
     "Payload":"{\"parameterName\":\"latestAmi\", \"parameterValue\":\"{{createImage.ImageId}}\"}" 
    } 
    }