HTTP POST в AWS IoT с использованием Golang-AWS-SDK IoTDataPlane

Я хочу отправить сообщение в тему MQTT через AWS IoT в golang с помощью AWS-SDK через HTTP,
при попытке с приведенным ниже кодом это было неудачно. Ответ был:

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 в ~ / .aws / credentials.

[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 для справки:

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

person Josiah Choi    schedule 22.12.2015    source источник
comment
Привет, Джозия, не могли бы вы взглянуть на мой вопрос? Я не понимаю, как найти accessKeyId stackoverflow.com/questions/35823058/   -  person Mona Jalal    schedule 06.03.2016
comment
Привет, Джозия, у тебя все еще есть эта проблема? Подтвердили ли вы, что тема принадлежит учетной записи, с которой отправляется ваш запрос, и что используемый регион правильный. Помогает ли использование API плоскости управления IoT.DescribeEndpoint для получения адреса конечной точки вместо его жесткого кодирования?   -  person Jason D.    schedule 26.05.2016
comment
У вас когда-нибудь это работало на Голанге? Поскольку у меня такая же проблема.   -  person jsgoecke    schedule 31.05.2016
comment
Это сработало для меня, как написано, я смог отправить сообщение MQTT в тему, однако я понял, что мне нужно использовать свой открытый ключ вещи в качестве учетных данных, а НЕ свои учетные данные AWS. Я пока ничего не вижу в структуре Config.Credentials для указания ключей. Совет: добавьте в aws.Config {} LogLevel: aws.LogLevel (aws.LogDebug), чтобы узнать, что происходит, и используйте клиент MQTT в консоли AWS для просмотра входящего сообщения.   -  person lazieburd    schedule 02.06.2016
comment
Также обратите внимание, что со временем вы столкнетесь с этой проблемой github.com/aws/aws -sdk-go / issues / 706, где вы не можете авторизоваться с помощью сертификатов устройств.   -  person lazieburd    schedule 14.06.2016
comment
У меня такая же проблема, есть обновления?   -  person okmttdhr    schedule 27.09.2017
comment
У меня есть рабочий пример, и единственная разница, которую я вижу между моим и тем, что вы опубликовали, - моя конечная точка передается в конфигурацию без http: // (как в вашем рабочем примере node.js)   -  person Craig Swank    schedule 01.11.2019


Ответы (1)


Если все еще актуально для кого-то ... используйте Credentials * credentials.Credentials в aws.Config

см. документы по адресу: https://godoc.org/github.com/aws/aws-sdk-go/aws#Config

person Itamar Lavender    schedule 21.08.2019