amazon-web-services - 使用 Golang-AWS-SDK IoTDataPlane 将 HTTP POST 发送到 AWS IoT

标签 amazon-web-services go aws-sdk aws-iot aws-sdk-go

我想通过 HTTP 使用 AWS-SDK 通过 golang 中的 AWS IoT 向 MQTT 主题发送消息,
当尝试使用以下代码时,它不成功。响应是:

ResourceNotFoundException: Not Found
status code: 404, request id: 3d2c0f11-09f6-4e86-94bf-ea877a30ebcd

以下是我使用的代码:

package main


import (
        "github.com/aws/aws-sdk-go/aws"
        "github.com/aws/aws-sdk-go/aws/session"
        "github.com/aws/aws-sdk-go/service/iotdataplane"
        "fmt"
)


func main(){
svc := iotdataplane.New(session.New(), &aws.Config {Region: aws.String("us-west-2"), Endpoint: aws.String("https://YOUR_PREFIX.iot.us-west-2.amazonaws.com")})

params := &iotdataplane.PublishInput{
        Topic:   aws.String("mytopic"), // Required
        Payload: []byte("PAYLOAD"),
        Qos:     aws.Int64(0),
}
resp, err := svc.Publish(params)

if err != nil {
        // Print the error, cast err to awserr.Error to get the Code and
        // Message from an error.
        fmt.Println(err.Error())
        return
}

// Pretty-print the response data.
fmt.Println(resp)

而且我还验证了我的 AWS 账户验证了有效的凭证设置和策略。以下是我在 ~/.aws/credentials 中的 aws 凭证

[default]
aws_access_key_id = YOUR_ACCESS_KEY_ID
aws_secret_access_key = YOUR_SECRET_ACCESS_KEY

和附加到您的身份的政策:

{
"Version": "2012-10-17",
"Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "iot:*"
        ],
        "Resource": "*"
   }
]

我也尝试过使用 Node.JS 它可以工作!!以下是 Node 中的 WORKING 源码,供引用:

var    AWS = require('aws-sdk');

AWS.config.update({region: 'us-west-2'});
var iotdata = new AWS.IotData({endpoint: 'YOUR_PREFIX.iot.us-west-2.amazonaws.com'});


var params = {
  topic: 'mytopic', /* required */
  payload: new Buffer('hello') || 'STRING_VALUE',
  qos: 0
};

iotdata.publish(params, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});

对于 Node JS 的工作,它需要在根文件夹中有一个适当的 AWS.config 文件。像这样:

accessKeyId = YOUR_ACCESS_KEY_ID
secretAccessKey = YOUR_SECRET_ACCESS_KEY

最佳答案

如果仍然与任何人相关... 在 aws.Config 中使用凭证 *credentials.Credentials

查看文档: https://godoc.org/github.com/aws/aws-sdk-go/aws#Config

关于amazon-web-services - 使用 Golang-AWS-SDK IoTDataPlane 将 HTTP POST 发送到 AWS IoT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34409792/

相关文章:

amazon-web-services - aws cloudwatch指标覆盖/覆盖

amazon-web-services - (Quicksight)如何仅对唯一字段的值求和

go - 为什么 Go 中的 fmt.Println 会打印动词 %s 字面值而不是值?

php - 安装 aws php sdk - 意外变量

php - AWS S3 预签名请求缓存

java - Amazon Beanstalk 上的现有 Maven 项目

amazon-web-services - 为什么使用https连接aws负载均衡器和vpc中的实例?

go - 在 Golang 中,http.HandleFunc 是 block 吗?

unit-testing - 在 go test 文件中使用包级变量

amazon-web-services - AWS SDK 是否自动处理 session 过期?