【发布时间】:2018-06-21 11:39:51
【问题描述】:
有没有办法完全自动删除 SQS 队列。我有一个解决方案,其中服务器在启动时创建一个 SQS 并订阅 SNS 主题。
但是,可能存在服务器崩溃且无法恢复的情况。在这种情况下,我会用另一台服务器替换服务器,它会在启动时创建自己的队列。现在不再使用之前的队列了。
有没有办法让队列自动删除,我会明确地删除它(也许如果队列保持空 5 天,它会自动删除或其他替代方法)?
【问题讨论】:
-
考虑使用 CloudFormation 部署您的 SQS 队列、SNS 主题、EC2 实例以及此工作负载所需的任何其他内容。当您决定启动新服务器时,因为您检测到旧服务器存在问题,只需删除旧 CloudFormation 堆栈并创建一个新堆栈即可。
-
如果我正确理解您的答案:即使在这种情况下,我是否也不需要手动删除旧的 CloudFormation 堆栈。
-
您已表明必须更换现有服务器。这大概是人工干预的明确决定。我是说用一个删除旧堆栈并创建一个新堆栈的进程替换该进程(一步)。如果您真的不想这样做,那么您可以在新的 EC2 实例上放置一个启动时脚本(在 userdata 中),它可以删除旧部署的残余(基于标签或其他方式来识别它需要删除)。
-
另一种选择是使用 Auto Scaling 来确保您始终拥有一个并且只有一个健康的服务器。正确设置健康检查,Auto Scaling 将杀死不健康的服务器,并启动一个新服务器(使用相同的 SQS 队列和 SNS 主题)。将其包装在 CloudFormation 模板中以便于部署。不知道为什么要在每次启动 EC2 实例时创建一个新队列——您不会冒丢失消息的风险吗?
-
自动集成测试是队列自我清理有用的一个例子。我的测试想在自己的沙箱中工作,但由于各种原因,测试结束时的清理代码并不总是运行。理想情况下,队列的配置会导致它们在合理的时间后过期,正如 OP 所建议的那样。
标签: amazon-web-services amazon-sqs