发布的Edd曼2022年2月8日

将Lambda Bref运行时从项目Composer依赖项中分离出来

在我们的保险产品中使用AWS Lambda取得了巨大成功(MyBuilder +去年年底,我们决定搬家所有我们的网站请求流量到平台!然而,我们注意到,当试图迁移到一个特定的应用程序时,我们不能使用的最新版本Bref(PHP运行时)由于所需的Symfony之间的冲突流程组件版本。

感谢响应迅速的企业支持我们讨论了一个可能的解决方案,包括使用独立的自定义自动装卸机与Bref运行时一起使用。通过浏览Bref代码库,我们注意到,由于我们只使用FPM和控制台运行时,这两个变体生成单独的PHP进程来处理实际的请求。这意味着项目自动加载器不需要知道Bref,因此,我们可以将这个运行时问题从项目中完全分离出来。

所讨论的项目将该版本打包为容器的形象。因此,我们能够创建一个多阶段的Docker构建(如下所示)来处理我们想要的结果。

作曲家:经过2.2.5作为运行时运行mkdir- p/ tmp /运行时& &作曲家要求- d/ tmp /运行时bref / bref: 1.5.3。更正bref / php - 81 fpm: 1.5.3。更正复制——从=运行时/ tmp /运行/供应商/ opt /运行/供应商ENVBREF_AUTOLOAD_PATH / opt /运行/供应商/ autoload.php复制。LAMBDA_TASK_ROOT美元

使用Composer Docker映像作为基础,我们能够构建一个供应商目录,其中只包含所需的Bref依赖项。然后,我们能够将这个目录复制到Lambda容器映像中,使Bref引导脚本通过BREF_AUTOLOAD_PATH环境变量。

结论

尽管我们只是为自己的用例(使用容器图像)演示了这一点,但同样的思想也可以应用于基于层的Lambda函数。遗憾的是,这种方法并不适用PHP函数由于在引导脚本中引入处理程序的方法不同。然而,多亏了FPM和控制台层抽象,我们能够从我们的项目中删除这些运行时关注点。这使我们能够分别维护运行时和项目需求,允许我们在有依赖冲突的项目中使用最新的Bref版本。

工作MyBuilder

我们需要一个有经验的软件工程师,他热爱他们的手艺,并愿意分享他们来之不易的知识。

查看职位空缺
评论的Disqus
Baidu
map