微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 dynamodb 触发器的 aws-lambda 中的 IncompatibleDynamoDBTypeError

如何解决使用 dynamodb 触发器的 aws-lambda 中的 IncompatibleDynamoDBTypeError

我现在花了很多时间试图解决这个问题。就是这样:我应该从 dynamodb 表中的最新条目获取电子邮件信息,并使用亚马逊的 ses 服务发送电子邮件。这是我到目前为止所拥有的:

package main

import (
    "log"

    "github.com/aws/aws-lambda-go/events"
    "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/ses"
)

// Handler is a method that handles the sending of email messages
func Handler(event events.DynamoDBEvent) (string,error) {
    emailParams := &ses.SendEmailInput{
        Message: &ses.Message{
            Body: &ses.Body{
                Text: &ses.Content{
                    Data:aws.String(event.Records[0].Change.NewImage["body"].String()),},Subject: &ses.Content{
                Data:aws.String(event.Records[0].Change.NewImage["subject"].String()),Destination: &ses.Destination{
            ToAddresses: aws.StringSlice(event.Records[0].Change.NewImage["recipients"].StringSet()),Source:aws.String("my_email_here@gmail.com"),}

    var emailClient *ses.SES = ses.New(session.New(),aws.NewConfig().WithRegion("us-east-2"))
    var result1,result2 = emailClient.SendEmail(emailParams)

    log.Println(result1)
    log.Println(result2)
    return "Success",nil
}

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

DynamoDB 表中每个条目的结构如下:

{
  "id": "id","subject": "Subject","body": "Body","recipients": [
    "email1@gmail.com","email2@gmail.com"
  ]
}

我可以使用上面的代码成功读取主题和正文,但是,我收到收件人数组的以下错误

accessor called for incompatible type,requested type 9 but actual type was 3: IncompatibleDynamoDBTypeError

我知道这与以下行有关:

ToAddresses: aws.StringSlice(event.Records[0].Change.NewImage["recipients"].StringSet()),

但是我想不通。 Amazon 的 ses 服务期望 ToAddresses 字段的类型是 []*string。

谢谢

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。