【问题标题】:run a php script in aws EC2 server using lambda使用 lambda 在 aws EC2 服务器中运行 php 脚本
【发布时间】:2025-12-20 12:25:07
【问题描述】:

我已经为一个应用程序设置了 EC2 和 RDS,现在我想每天调用 EC2 服务器上的脚本(运行 ubuntu,Apache)(这是另一种服务的触发器)在 EC2 中运行,或者在 Lambda 本身上运行该 PHP 脚本的方法,从中删除 EC2。

我确实找到了关于 python 脚本的内容:Serverless PHP on AWS Lambda – Rob Allen's DevNotes

【问题讨论】:

    标签: php amazon-web-services amazon-ec2 aws-lambda amazon-cloudwatch


    【解决方案1】:

    选项 1:AWS Lambda 上的 PHP

    如果您可以让 PHP 在 Lambda 上运行,那么您的问题就解决了一半。然后,您可以使用 Amazon CloudWatch Events 安排它。简单地创建一个带有时间表的规则来触发 Lambda 函数。

    选项 2:在 Amazon EC2 实例上触发脚本

    如果您只想在 Amazon EC2 实例上触发脚本,可以使用本地 cron 定义。

    如果您的意图是只为脚本运行 EC2 实例然后关闭,那么:

    • 配置脚本在实例启动时运行(配置操作系统运行脚本)
    • 配置 Amazon CloudWatch Events 规则以每天运行一次 AWS Lambda 函数
    • Lambda 函数应该启动实例
    • 当实例上的脚本完成其工作时,它应该调用操作系统来关闭实例。这将导致 EC2 停止它。

    您可以启动和终止实例,而不是启动和停止实例。在这种情况下,将脚本作为用户数据提供,它会在启动后自动运行。将实例关闭行为配置为终止

    【讨论】:

    • 我不想停止 EC2 实例,EC2 是我运行 apache 的主服务器,其他脚本也存在,我只想运行一个特定的脚本,它是一种“触发器” ,在我的情况下,该脚本在 php.ini 中。引用的链接也不是解决方案,但似乎是一个,它太复杂了,我无法理解。
    • 另外指出如果以这种方式处理它的方向不正确,或者补充说根本不可能实现,我正在通过学​​习和理解事物的工作原理和内容来努力可能。
    • 如果您有一个现有的 EC2 实例并且您想按计划在该实例上运行脚本,那么您可以使用cron
    • Cron 是进行调度的最佳方式(无需了解有关您的应用程序的更多上下文)
    • 为了后代:如果你实现了bref.sh,PHP 可以毫不费力地在 lambda 中运行
    【解决方案2】:

    我目前这样做的方式是使用 Node 通过 HTTP 调用脚本。

    首先,我设置了一个这样的 AWS Lambda 函数:

    exports.handler = (event, context, callback) => {
        const https = require('https');
    
        https.get('https://www.example.com/myscript?secret-token', (resp) => {});
    };
    

    秘密令牌只是为了让我是唯一可以通过转到该 URL 来执行此脚本的人。

    接下来,我安排它在 EventBridge 触发器上运行,调度表达式类似于以下内容:

    cron(0 8 * * ? *)
    

    这使得 AWS Lambda 每天当地时间早上 5 点(UTC 时间早上 8 点)调用该 URL。

    【讨论】: