如何在Swift中调用AWS Lambda函数

JBa*_*zuk 7 amazon-web-services swift aws-lambda

我找不到任何关于如何在Swift中调用Lambda函数的文档或示例,但我尝试使用Objective-C从文档中推断出我仍然遇到错误:

"Error in myFunction: ValidationException: Supplied AttributeValue is empty, must contain exactly one of the supported datatypes"

当我从swift调用lambda函数时,我似乎没有正确地将参数传递给函数,因为脚本试图写入DynamoDB但是其中一个参数是空的(当我在javascript /中调用它时,这个lambda脚本有效)节点).

    let lambda = AWSLambda.defaultLambda()
    let request = AWSLambdaInvocationRequest()
    var context = [String: String]()
    let jsonString = "{\"email\":\"example@example.com\",\"name\":\"example\"}"
    let jsonData = jsonString.dataUsingEncoding(NSUTF8StringEncoding)
    request.clientContext = jsonData?.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.Encoding64CharacterLineLength)
    request.functionName = "myFunction"
    lambda.invoke(request).continueWithBlock( {
        (currentTask: AWSTask!) -> AWSTask in
        if (currentTask.error != nil) {
            // failed to execute.
            print("Error executing: ", currentTask.error)
            task.setError(currentTask.error)
        } else {
            print("token: ", currentTask.result)
            task.setResult(currentTask.result)
    }
        return currentTask
    })
Run Code Online (Sandbox Code Playgroud)

小智 5

您需要将payload参数设置为包含要传递的数据的映射.

    let invocationRequest = AWSLambdaInvokerInvocationRequest()
    invocationRequest.functionName = "myFunction"
    invocationRequest.invocationType = AWSLambdaInvocationType.RequestResponse
    invocationRequest.payload = ["email" : "example@example.com", "name" : "example"]

    let lambdaInvoker = AWSLambdaInvoker.defaultLambdaInvoker()
    let task = lambdaInvoker.invoke(invocationRequest).continueWithSuccessBlock() { (task) -> AWSTask! in
        print("response: ", task.result)
    }
Run Code Online (Sandbox Code Playgroud)