douzi2749 2019-01-24 19:17
浏览 146
已采纳

使用AWS Go SDK将消息发布到SNS

I'm having issue with sending a message to SNS with the AWS Go SDK. Documentation for the Publish function is a little bit obscure.

My piece of code is:

package main

import (
    "encoding/json"
    "github.com/aws/aws-sdk-go-v2/aws/external"
    "github.com/aws/aws-sdk-go-v2/service/sns"
    "github.com/aws/aws-sdk-go/aws"
    "log"
)

type Person struct {
    Name string `json:"name"`
} 

func main() {
    cfg, _ := external.LoadDefaultAWSConfig()
    snsClient := sns.New(cfg)

    person := Person{
        Name:"ok",
    }
    jsonStr, _ := json.Marshal(person)

    req := snsClient.PublishRequest(&sns.PublishInput{
        TopicArn: aws.String("arn:aws:sns:us-east-1:*****:ok"),
        Message: aws.String(string(jsonStr)),
        MessageStructure: aws.String("json"),
        MessageAttributes: map[string]sns.MessageAttributeValue{
            "default": {
                DataType: aws.String("String"),
                StringValue: aws.String(string(jsonStr)),
            },
        },
    })

    res, err := req.Send()
    if err != nil {
        log.Fatal(err)
    }

    log.Print(res)
}

When I launch this code I receive the following message :

2019/01/24 20:14:24 InvalidParameter: Invalid parameter: Message Structure - No default entry in JSON message body
        status code: 400, request id: 55940de1-9645-5485-96c5-592586957ce8
exit status 1

Maybe someone can help me with that ?

Thanks

  • 写回答

2条回答 默认 最新

  • drtoaamk20278 2019-01-24 20:53
    关注

    I've found a solution to my issue.

    package main
    
    import (
        "encoding/json"
        "github.com/aws/aws-sdk-go-v2/aws/external"
        "github.com/aws/aws-sdk-go-v2/service/sns"
        "github.com/aws/aws-sdk-go-v2/aws"
        "log"
    )
    
    type Message struct {
        Default string `json:"default"`
    }
    
    type Person struct {
        Name string `json:"name"`
    } 
    
    func main() {
        cfg, _ := external.LoadDefaultAWSConfig()
        snsClient := sns.New(cfg)
    
        person := Person{
            Name: "Felix Kjellberg",
        }
        personStr, _ := json.Marshal(person)
    
        message := Message{
            Default: string(personStr),
        }
        messageBytes, _ := json.Marshal(message)
        messageStr := string(messageBytes)
    
        req := snsClient.PublishRequest(&sns.PublishInput{
            TopicArn: aws.String("arn:aws:sns:us-east-1:*****:ok"),
            Message: aws.String(messageStr),
            MessageStructure: aws.String("json"),
        })
    
        res, err := req.Send()
        if err != nil {log.Fatal(err)
        }
    
        log.Print(res)
    }
    

    Some encoding inception was needed

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 CST怎么把天线放在座椅环境中并仿真
  • ¥15 任务A:大数据平台搭建(容器环境)怎么做呢?
  • ¥15 r语言神经网络自变量重要性分析
  • ¥15 基于双目测规则物体尺寸
  • ¥15 wegame打不开英雄联盟
  • ¥15 公司的电脑,win10系统自带远程协助,访问家里个人电脑,提示出现内部错误,各种常规的设置都已经尝试,感觉公司对此功能进行了限制(我们是集团公司)
  • ¥15 救!ENVI5.6深度学习初始化模型报错怎么办?
  • ¥30 eclipse开启服务后,网页无法打开
  • ¥30 雷达辐射源信号参考模型
  • ¥15 html+css+js如何实现这样子的效果?