Я настраиваю интеграционный тест, чтобы определить, работает ли программа, которая публикует сообщение для SNS, правильно. Опубликованное сообщение содержит несколько критических атрибутов сообщения, которые мне нужно проверить, чтобы определить правильность.
Пока что я настроил простой HTTP-сервер, который действует как подписчик SNS. Сервер правильно подтверждает свою подписку и даже получает сообщения из темы, однако я не знаю, как получить доступ к атрибутам этих сообщений.
Следует отметить, что я использую ngrok, чтобы выставить свой хост SNS. Для этого я использую команду:
ngrok http 8080
Когда я создавал подписку, я обязательно включил сырую доставку сообщений:
subOut, err := snsCli.Subscribe(&sns.SubscribeInput{
Endpoint: &ngrokURL,
Attributes: map[string]*string{
"RawMessageDelivery": aws.String("True"),
},
Protocol: aws.String("https"),
TopicArn: aws.String(topicArn),
})
Примечание. Я также попытался установить для параметра "RawMessageDelivery" значение "true" вместо "True". Это, похоже, не вызывает каких-либо изменений.
Я также пытался использовать протокол http
вместо https
, но добился тех же результатов.
Ниже приведен запрос отправления уведомления, полученный конечной точкой (я заменил ARN звездочками):
POST / HTTP/1.1
x-amz-sns-message-type: Notification
x-amz-sns-message-id: c8bce1ed-3766-5a04-a9ad-b4afc662cc31
x-amz-sns-topic-arn: ****
x-amz-sns-subscription-arn: ****
x-amz-sns-rawdelivery: true
Content-Length: 1
Content-Type: text/plain; charset=UTF-8
Host: ****.ngrok.io
User-Agent: Amazon Simple Notification Service Agent
Accept-Encoding: gzip,deflate
X-Forwarded-Proto: https
X-Forwarded-For: 54.240.230.176
Сообщения, публикуемые в SNS, имеют в своем теле только один байт (один пробел) - поэтому я предполагаю, что длина содержимого равна 1.
Один из атрибутов сообщения имеет двоичный формат и содержит символы, которые не допускаются в теле сообщения SNS, в противном случае я просто поместил бы закодированные атрибуты в тело сообщения.
Кажется, что в запросе отсутствуют какие-либо атрибуты, и я полностью озадачен, почему. Я ожидаю, что они будут частью тела необработанного запроса, но, похоже, это не так. Есть идеи?
РЕДАКТИРОВАТЬ: Я, вероятно, должен добавить, что я добавил подписчика SQS в эту же тему и что подписчик SQS получает атрибуты сообщения, как и следовало ожидать.