Подписка AWS SNS HTTP не вызывает конечную точку
Я развернул AWS SNS, используя Localstack, на своем компьютере разработчика, и теперь я пытаюсь использовать сообщения, отправляемые из awslocal
CLI (в основном это aws
против моего местного Localstack ниже)
Сначала я создал тему:
$ awslocal sns create-topic --name my-topic
Затем я создал HTTP-подписку против http://localhost:8080/sns/publish
:
$ awslocal sns subscribe --topic-arn "arn:aws:sns:us-east-1:123456789012:my-topic" --protocol http --notification-endpoint http://localhost:8080/sns/publish
У меня работает сервер на localhost
в порту 8080
с постом /sns/publish
конечная точка. Он должен быть вызван для подтверждения подписки. Но это никогда не называется.
У меня есть некоторые подсказки. Я развернул Localstack с помощью Docker. После проверки журналов контейнера я увидел эту ошибку:
2018-07-02T10:20:03:INFO:werkzeug: 127.0.0.1 - - [02/Jul/2018 10:20:03] "POST /sns/publish HTTP/1.1" 405 -
HTTP ERROR 405 соответствует ошибке Method Not Allowed, поэтому, возможно, он пытается вызвать конечную точку контейнера вместо конечной точки моего хост-компьютера.
Как я могу решить это?
1 ответ
Решаемые. Это была проблема IP-решения из-за Docker-сетей.
Я создал подсеть:
docker network create -d bridge --subnet 192.168.0.0/24 --gateway 192.168.0.1 mynet
И подписаться на SNS против 192.168.9.1
вместо localhost
:
$ awslocal sns subscribe --topic-arn "arn:aws:sns:us-east-1:123456789012:my-topic" --protocol http --notification-endpoint http://192.168.0.1:8080/sns/publish
Готово!