1

我正在使用 Bref(使用无服务器)在 AWS Lambda 上运行 Symfony 4 (PHP) 应用程序。

Bref 为 Symfony 的 bin/console 二进制文件提供了一层。Lambda 函数的无服务器配置如下所示:

functions:
    console:
        handler: bin/console
        name: 'mm-console'
        description: 'Symfony 4 console'
        timeout: 120 # in seconds
        layers:
            - ${bref:layer.php-73} # PHP
            - ${bref:layer.console} # The "console" layer

使用上述内容,我可以在 Lambdavendor/bin/bref cli mm-console -- mm:find-matches上运行。bin/console mm:find-matches

如果我想mm:find-matches在 Lambda 上按计划运行控制台命令怎么办?我试过这个:

functions:
    mm-find-matches:
        handler: "bin/console mm:find-matches"
        name: 'mm-find-matches'
        description: 'Find mentor matches'
        timeout: 120
        layers:
            - ${bref:layer.php-73} # PHP
            - ${bref:layer.console} # The "console" layer
        schedule:
            rate: rate(2 hours)

但是“ bin/console mm:find-matches”不是有效的处理程序。如何按计划将mm:find-matches命令传递给bin/console函数?

4

1 回答 1

2

您可以通过调度事件输入传递命令行参数,如下所示:

functions:
    console:
        handler: bin/console
        name: 'mm-console'
        description: 'Symfony 4 console'
        timeout: 120 # in seconds
        layers:
            - ${bref:layer.php-73} # PHP
            - ${bref:layer.console} # The "console" layer
        events:
            - schedule:
                input:
                    cli: "mm:find-matches --env=test"
                rate: rate(2 hours)
                enabled: true

尽管在这个 bref github 问题上有一些讨论,关于使用 cli 控制台应用程序是否是最佳解决方案,而不是编写引导内核并执行您希望命令执行的特定操作的 PHP 函数。

于 2019-08-13T16:03:48.047 回答