簡體   English   中英

如何使用 AWS Lambda 處理程序修復錯誤,DynamoDB Put req?

[英]How to fix error with AWS Lambda handler, DynamoDB Put req?

嘗試創建一個 Lambda 來與我的 DynamoDB 交互。 這個特定的 Lambda 是將一個項目放入/寫入數據庫:

package main

import (
    "fmt"

    "github.com/aws/aws-lambda-go/lambda"
    "github.com/aws/aws-sdk-go/aws"
    "github.com/aws/aws-sdk-go/aws/session"
    "github.com/aws/aws-sdk-go/service/dynamodb"
    "github.com/aws/aws-sdk-go/service/dynamodb/dynamodbattribute"
)

type Item struct {
    Email    string `json:"email"`
    Password string `json:"password"`
    Rname    string `json:"rname"`
}

func Put() error {

    // Create a session - London Region
    session, err := session.NewSession(&aws.Config{
        Region: aws.String("eu-west-2")},
    )
    if err != nil {
        fmt.Println(err)
    }

    svc := dynamodb.New(session)

    // Create instance of Item Struct
    item := Item{
        Email:    "123@mail.com",
        Password: "12345678",
        Rname:    "abcde",
    }

    // Marshall Item
    av, err := dynamodbattribute.MarshalMap(item)

    if err != nil {
        fmt.Println("Got error marshalling map:")
        fmt.Println(err)
    }

    // Create Item
    input := &dynamodb.PutItemInput{
        Item:      av,
        TableName: aws.String("accountsTable"),
    }

    _, err = svc.PutItem(input)

    if err != nil {
        fmt.Println("Got error calling PutItem:")
        fmt.Println(err)
    }
    return err
}

func main() {
    lambda.Start(Put())
}

但是得到錯誤:

{
  "errorMessage": "handler is nil",
  "errorType": "errorString"
}

我也已將運行時設置中的處理程序更改為 main,所以不要認為這會是問題所在。

建設與:

GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -a main.go

並通過控制台(無 IAC)將可執行文件的 zip 放入 AWS

解決此錯誤的任何幫助將不勝感激。 謝謝。

您需要將 function 句柄而不是 function 結果傳遞給lambda.Start

請將您的主 function 更新為

func main() {
    lambda.Start(Put)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM