【问题标题】:How do you configure ECS to allow access to Kinesis Stream如何配置 ECS 以允许访问 Kinesis Stream
【发布时间】:2020-02-25 15:05:53
【问题描述】:

我有一个套接字服务器,用 c#(.net 核心)编写,它通过 TCP 连接从设备接收数据。然后我将其部署到 Amazon ECS。

最初,我使用 Amazon SQS 对接收到的数据进行排队,但我重新设计了我的应用程序以使用 Kinesis 流。

如果我在我的开发机器上运行 .net 核心应用程序,一切都很好。如果我在本地的 docker 容器中运行它,它也可以正常运行。问题是当我部署为 ECS 任务时,当我在 Kinesis SDK 调用 PutRecords 时收到以下错误:

System.Net.Http.HttpRequestException: No such device or address ---> System.Net.Sockets.SocketException: No such device or address

安全组显示我没有可能阻止访问 Kinesis 的传出规则。我最初认为我可能需要在 dockerfile 中添加一些内容,但本地测试表明这也不是问题所在。

我已经检查并重新检查了 Kinesis 端点是否正确,所以我不确定我缺少什么?

【问题讨论】:

  • 你能分享你的ECS权限角色吗?
  • 感谢您的评论,我会回到我的办公桌前。我不怀疑这个角色,因为我使用 cloudformation 来生成一个角色和一个附加了相同策略的 IAM 用户。我使用 IAM 用户的密钥进行本地测试没有问题,所以角色应该执行相同的操作。
  • 我做过类似的事情,但它是使用 Java + Python KCL。你觉得跟客户端代码有关吗?
  • 目前,我正在考虑在 linux 上运行的 docker 中启动应用程序。我的开发机器正在运行 windows,所以我想知道操作系统之间的行为是否存在差异(我过去看到过差异)

标签: docker .net-core amazon-ecs amazon-kinesis


【解决方案1】:

这最终是一个愚蠢的错误。我有不同的设置机制来初始化AmazonKinesisClient,具体取决于客户端是在云中运行(使用 IAM 角色)还是在服务器上运行(使用 IAM 用户)。

云初始化试图从 Kinesis 流名称中确定 AWS 区域,但它无法做到这一点,因此未来的调用失败。

【讨论】:

    猜你喜欢
    • 2017-01-17
    • 2020-10-26
    • 1970-01-01
    • 2017-10-15
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 2017-11-11
    • 1970-01-01
    相关资源
    最近更新 更多