AWS SNS HTTP 订阅未调用端点
AWS SNS HTTP subscription is not calling endpoint
我已经在我的开发机器中使用 Localstack 部署了 AWS SNS,现在我正在尝试使用我从 awslocal
CLI 发出的消息(基本上它是一个 aws
反对我本地的 Localstack infra)
首先,我创建了一个话题:
$ awslocal sns create-topic --name my-topic
然后,我针对 http://localhost:8080/sns/publish
创建了一个 HTTP 订阅:
$ awslocal sns subscribe --topic-arn "arn:aws:sns:us-east-1:123456789012:my-topic" --protocol http --notification-endpoint http://localhost:8080/sns/publish
我在端口 8080
的 localhost
有一台服务器 运行,有一个 POST /sns/publish
端点。它应该被调用以确认订阅。但它从未被调用过。
我有一些线索。我已经使用 Docker 部署了 Localstack。检查容器日志后,我看到了这个错误:
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 错误,所以它可能正在尝试调用容器端点而不是我主机的端点。
我该如何解决这个问题?
已解决。这是一个 IP 解析问题,因为 Docker 网络。
我已经创建了一个子网:
docker network create -d bridge --subnet 192.168.0.0/24 --gateway 192.168.0.1 mynet
并根据 192.168.9.1
而不是 localhost
订阅 SNS:
$ 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
完成!
我已经在我的开发机器中使用 Localstack 部署了 AWS SNS,现在我正在尝试使用我从 awslocal
CLI 发出的消息(基本上它是一个 aws
反对我本地的 Localstack infra)
首先,我创建了一个话题:
$ awslocal sns create-topic --name my-topic
然后,我针对 http://localhost:8080/sns/publish
创建了一个 HTTP 订阅:
$ awslocal sns subscribe --topic-arn "arn:aws:sns:us-east-1:123456789012:my-topic" --protocol http --notification-endpoint http://localhost:8080/sns/publish
我在端口 8080
的 localhost
有一台服务器 运行,有一个 POST /sns/publish
端点。它应该被调用以确认订阅。但它从未被调用过。
我有一些线索。我已经使用 Docker 部署了 Localstack。检查容器日志后,我看到了这个错误:
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 错误,所以它可能正在尝试调用容器端点而不是我主机的端点。
我该如何解决这个问题?
已解决。这是一个 IP 解析问题,因为 Docker 网络。
我已经创建了一个子网:
docker network create -d bridge --subnet 192.168.0.0/24 --gateway 192.168.0.1 mynet
并根据 192.168.9.1
而不是 localhost
订阅 SNS:
$ 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
完成!