【问题标题】:Fargate Use Case Question — Listen to Websocket (Client Side)Fargate 用例问题——监听 Websocket(客户端)
【发布时间】:2020-01-22 16:43:51
【问题描述】:

我正在研究 Fargate 的一个用例,其中我有一些外部触发器(可能是 CloudWatch 事件)触发 Fargate 任务,该任务打开一个 websocket 连接,监听几个小时并将数据写入 S3,然后最终关闭几个小时后的 websocket。

websocket 可以在一定的小时数(通用计时器)之后被某些外部触发器关闭,或者当它从套接字接收到特定消息时它会关闭。

这是 Fargate 的正确用例吗?外部触发器将传入 websocket 连接字符串,并且用于身份验证的秘密身份验证令牌可以存储在 AWS KMS 中。

外部触发器 -> 打开 ws:// 连接(通过 Fargate)-> 写入 S3

如果这是正确的用例,有什么建议可以解决这个问题吗?如果这不是正确的用例,是否还有其他服务更适合仅几个小时的持久连接?

【问题讨论】:

    标签: amazon-web-services websocket amazon-ecs aws-fargate amazon-eks


    【解决方案1】:

    Fargate 只是一个运行容器的托管服务。任务将运行多长时间没有限制。如果您计划仅部署 docker 映像,则可以将其视为 AWS 管理的 EC2 实例。检查 common use cases 以获取 Fargate。从您的问题来看,尚不清楚您是否需要偶尔爆发的不同工作负载。您需要快速扩展或一次只运行一项任务。

    另一方面,EC2 实例具有various types,例如,与Fargate pricing 相比,t3.small 会更便宜。此外,请注意免费层 EC2 实例类型和预留实例。 Compute Savings Plan 适用于 Fargate 和 EC2。您可以启动并喊停 EC2 实例on schedule as well

    总之,如果您不想花时间进行维护并且需要开箱即用的可扩展解决方案,请选择 Fargate;如果您只需要一个 websocket 连接并且希望更便宜,请选择 EC2。除非您使用现场实例,否则这两种方法都可以很好地处理长 websocket 连接。

    【讨论】:

    • 你可以将动态参数传递给 Fargate 任务吗?
    • 抱歉,我不确定我理解动态参数的含义,但 Fargate 中的任务具有相同的 docker run。您可以通过commanddocs.aws.amazon.com/AmazonECS/latest/developerguide/…查看此答案以获取代码示例*.com/a/57616235/6628583
    • 明白了,最后一个问题,我不确定你是否知道——如果不知道,不用担心。如果我听了几个小时的 websocket,在 EC2 实例上使用 Fargate 启动它,你会建议写入 S3 还是流式传输到 kinesis/S3?在这种情况下,我不确定运动部件能给我带来什么。
    • 您可以使用分段上传docs.aws.amazon.com/AmazonS3/latest/dev/uploadobjusingmpu.html将数据流直接放到S3对象中@一个部分的最小大小为5MB