【问题标题】:Why is the Node.js AWS-SDK returning the wrong SQS queue URL when creating a local queue为什么 Node.js AWS-SDK 在创建本地队列时返回错误的 SQS 队列 URL
【发布时间】:2018-07-10 12:55:49
【问题描述】:

我正在使用 ElasticMQ 在我的本地开发机器上模拟 AWS SQS。我在 Docker 容器中运行 ElasticMQ,使用 docker-osx-dev 在 Linux VM 上托管 Docker 容器。这意味着我通过 VM 的 IP 访问本地 ElasticMQ 实例,而不是我的本地 IP。

当我尝试使用下面的代码在 EMQ 中创建队列时,它会返回 localhost 的队列 URL,而不是托管 docker 容器的 VM 的 IP。

var AWS = require('aws-sdk');
var config = {
  endpoint: new AWS.Endpoint('http://192.168.59.103:9324'),
  accessKeyId: 'na',
  secretAccessKey: 'na',
  region: 'us-west-2'
}
var sqs = new AWS.SQS(config);
var params = {
  QueueName: 'test_queue'
};
sqs.createQueue(params, function(err, data) {
  if (err) {
    console.log(err);
  } else {
    console.log(data.QueueUrl);
  }
});

目前此代码返回:http://localhost:9324/queue/test_queue,但它应该返回 http://192.168.59.103:9324/queue/test_queue。如果我将 URL 中的 'localhost' 替换为实际的 IP 地址,我可以使用该 URL 成功访问队列,表明它确实已创建,但这是一个非常讨厌的 hack。我需要在上面的代码中进行哪些更改才能更正此问题?

更新:端点无效 在使用 ElasticMQ 模拟容器出现另一个问题后,我回到了这个问题。这次它是 docker-compose 文件的一部分,另一个容器通过它的 docker 主机名访问它。 SQS 不接受带有下划线的主机名。这会弄乱大多数人的 docker-compose 文件,因为下划线很常见。如果您收到有关无效端点的错误消息,请尝试在撰写文件中使用连字符而不是下划线重命名您的容器(即http://sqs_local:9324 会失败,http://sqs-local:9324 会很好)。

【问题讨论】:

  • 谢谢。今天真的很需要这个。

标签: node.js amazon-web-services docker amazon-sqs elastic-mq


【解决方案1】:

您面临的问题是 ElasticMq 暴露了它正在运行的容器的主机和端口。这是我以前遇到过的问题,并通过创建一个自定义 Docker 容器来解决它,该容器允许您设置主机和以编程方式移植。

我已经写了一个blog post 来说明如何修复它,但本质上你需要做的是:

  • 使用我的自定义图片tddmonkey/elasticmq
  • 在创建容器时设置NODE_HOSTNODE_PORT 环境变量。

最终你的命令行是:

$ docker run -e NODE_HOST=`docker-machine ip default` -e NODE_PORT=8000 -p 8000:9324 tddmonkey/elasticmq

【讨论】:

  • 非常感谢您的快速回答!现在这似乎工作得很好。就此主题而言;你知道是否有一种简单的方法可以将所有 VM 机器的端口转发到 localhost,以避免在设置端点等时需要查找 VM 的 IP 地址?
  • 我猜您是在谈论能够使用localhost 而不是VM IP 地址?如果是这样,它不像端口转发 VM 端口那么简单,您还需要 localhost 来转发这些端口上的所有通信。老实说,我怀疑这是否值得,因为您的生产代码应该可以配置为接受不同的目标 IP
  • 酷,我通过环境变量/配置文件设置端点等,因此很容易根据需要进行更改。只是想知道是否有“银弹”。
猜你喜欢
  • 2016-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-21
相关资源
最近更新 更多