如何配置 ECS 以允许访问 Kinesis Stream

How do you configure ECS to allow access to Kinesis Stream

我有一个用 c# (.net core) 编写的套接字服务器,它通过 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 的传出规则。我最初认为我可能需要向 docker 文件添加一些内容,但本地测试表明这也不是问题所在。

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

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

云初始化试图根据 Kinesis 流名称确定 AWS 区域,但它无法做到,因此以后的调用失败。