首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >触发PHP脚本以在ECS服务中的每个Fargate任务上运行

问触发PHP脚本以在ECS服务中的每个Fargate任务上运行
EN

Stack Overflow用户
提问于 2022-07-30 09:26:39
回答 1查看 185关注 0票数 0

在ECS服务的所有正在运行的Fargate任务上触发PHP脚本的最佳方法是什么?我需要从ECS任务的另一个PHP脚本中触发这一点。我需要这样做的原因是,我在这些单独的ECS任务上有NGINX FastCGI缓存,并且当管理员在CMS中进行更新时,需要清除所有任务的缓存。

我的NGINX配置有一个/ purge /path端点,它将使用fastcgi_cache_purge清除缓存,而且我目前确实有一个工作有点麻烦的解决方案,它看起来如下所示:

  1. Admin保存在CMS
  2. PHP代码段中,运行如下:

( a)使用AWS确定运行ECS任务的数量

)为运行的ECS任务数运行for循环。

( c)使用cURL调用/purge/path URL (多次尝试,因为它有时会碰到相同的ECS任务)

上面的工作,但不是最佳的。

这里有一些其他的解决方案,但我在网上找不到很多关于如何实现的信息:

  • 是否可能将fastcgi_cache_path更改为像AWS这样的共享文件系统,或者这是否会影响性能而不是tmpfs?我看到了tmpfs对ECS的支持,但是一旦安装,它是跨多个ECS任务共享还是单独用于每个ECS任务?
  • 使用AWS /SQS(编写一个订阅的PHP脚本和另一个发布事件的脚本)
  • 使用Redis /sub(也不确定ECS任务启动时如何实现和如何启动长时间运行的订阅服务器)
  • 使用ECS Exec和AWS PHP (几乎有一个工作解决方案来获取所有ECS任务并循环它们,并执行"ECS Exec“命令,但是“--非交互式的”还没有,所以它不起作用。仅“--交互式”模式目前起作用)

是否有更简单/更好的解决方案?如果使用上述实现中的任何一种,是否有人能让我在如何使用PHP实现此实现方面走上正确的方向?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2022-07-30 12:16:27

老实说,这似乎是你上一个问题的重复,但我会回答:

  • 是否可能将fastcgi_cache_path更改为像AWS这样的共享文件系统,或者这是否会影响性能而不是tmpfs?我看到了tmpfs对ECS的支持,但是一旦挂载,它是在多个ECS任务之间共享还是每个ECS任务单独共享呢?

EFS不是一个很好的选择,因为EFS是的慢速。它会扼杀缓存的任何性能好处。

Fargate上的tmpfs不会在实例之间共享。

使用AWS /SQS的

  • (编写一个订阅的PHP脚本,另一个发布事件的脚本)

SNS可以工作,正如您在前面的问题中讨论过的那样。SQS根本不起作用,因为SQS消息只传递给一个使用者,您希望它被传递到所有实例。

  • 使用与上面类似的Redis发布/sub(也不确定在ECS任务启动时如何实现以及如何启动长期运行的订阅服务器)

。

是的,正如你在上一个问题中所讨论的那样,这是可行的。当然,这需要大量的定制编码。

  • 使用Exec和AWS (几乎有一个工作解决方案来获取所有ECS任务并循环它们,并执行一个“Exec”命令,但是“-非交互式”还不可用,因此它无法工作。仅“--交互式”模式目前起作用)

这应该能行。为什么说--non-interactive还不可用?如果您只是关闭了--interactive参数,那么该命令将以非交互方式执行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73174394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档