通过 Golang 中的 step 函数调用 AWS lambda 函数

我有一个 AWS step 函数,它调用用 Golang 编写的 lambda 函数。由于某种原因,lambda 函数似乎无法读取 step 函数的输入。


拉姆达函数 -


package main


import (

    "fmt"


    "github.com/aws/aws-lambda-go/lambda"

)


type InEvent struct {

    Name string `json:"name"`

}


type OutEvent struct {

    Greeting string `json:"greeting"`

}


func HandleRequest(name InEvent) (OutEvent, error) {

    var result OutEvent

    result.Greeting = fmt.Sprintf("Hello %s!", name.Name)

    return result, nil

}


func main() {

    lambda.Start(HandleRequest)

}

阶跃函数 -


{

  "Comment": "A Hello World example of the Amazon States Language using Pass states",

  "StartAt": "Invoke Lambda function",

  "States": {

    "Invoke Lambda function": {

      "Type": "Task",

      "Resource": "arn:aws:states:::lambda:invoke",

      "Parameters": {

        "FunctionName": "arn:aws:lambda:us-west-1:301438421794:function:SF1_1:$LATEST",

        "Payload": {

          "Input.$": "$"

        }

      },

      "End": true

    }

  }

}

阶跃函数的输入 -


{

  "name": "ABCDE"

}

阶跃函数的输出 -


{

  "ExecutedVersion": "$LATEST",

  "Payload": {

    "greeting": "Hello !"

  },

  "SdkHttpMetadata": {

    "AllHttpHeaders": {

      "X-Amz-Executed-Version": [

        "$LATEST"

      ],

      "x-amzn-Remapped-Content-Length": [

        "0"

      ],

      "Connection": [

        "keep-alive"

      ],

      "x-amzn-RequestId": [

        "5f297331-8b1a-49a0-9ad9-17a78ec1cfd0"

      ],

      "Content-Length": [

        "22"

      ],

      "Date": [

        "Fri, 25 Dec 2020 19:58:20 GMT"

      ],

      "X-Amzn-Trace-Id": [

        "root=1-5fe6445c-5cb6860d2559230940506a2f;sampled=0"

      ],

      "Content-Type": [

        "application/json"

      ]

    },


我希望 Output.Payload.greeting 是“Hello ABCDE!” 而是 Output.Payload.greeting 是“你好!”


这里出了什么问题?为什么 lambda 函数中的 name 变量没有正确存储输入?为什么“ABCDE”在 lambda 函数中会变成一个空字符串?


当我直接在 lambda 控制台上测试 lambda 函数而不使用步进函数时,一切正常。


有只小跳蛙
浏览 92回答 2
2回答

海绵宝宝撒

您的状态机定义中的Payload部分正在塑造传递给 Lambda 的输入:"Payload": {    "Input.$": "$"}所以 Lambda 的实际输入将是:{     Input:         {             name: 'ABCDE'     } }因此,您需要在 Golang 代码中考虑这一点,或者Payload在状态机定义中更改该部分。

慕娘9325324

共享代码和示例时要小心,您的帐户 ID 也会被公开以下是您的 golang 代码的工作状态机    {    "Comment": "A Hello World example of the Amazon States Language using Pass states",    "StartAt": "Invoke Lambda function",    "States": {        "Invoke Lambda function": {        "Type": "Task",        "Resource": "arn:aws:states:::lambda:invoke",        "Parameters": {            "FunctionName": "arn:aws:lambda:us-east-1:301438421794:function:testfunction",            "Payload": {            "name.$": "$.name"            }        },        "ResultPath": "$.lambdaOutput",        "End": true        }    }    }产生如下输出:    {    "name": "suresh",    "lambdaOutput": {        "ExecutedVersion": "$LATEST",        "Payload": {        "greeting": "Hello suresh!"        },        "SdkHttpMetadata": {    ....    }您可以通过像这样修改进一步切片输出 "OutputPath": "$.lambdaOutput.Payload",这将为您提供准确的输出    {    "greeting": "Hello suresh!"    }看看这里。这是我可以推荐的开始使用阶梯函数的最佳资源。为了处理函数之间的数据,请保持这个方便。对于处理输入和输出,这也非常有用。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go