bref/extra-php-extensions

为您的lambda应用程序提供额外的PHP扩展。

安装次数: 2,419,042

依赖关系: 5

建议者: 0

安全性: 0

星标: 213

关注者: 8

分支: 110

开放问题: 25

语言:Dockerfile


README

此存储库通过AWS Lambda层为Bref应用程序提供PHP扩展。

当您需要“现成的”东西时非常有用。如果您需要超过2-3层,则应考虑创建自己的层。这是因为AWS为每个Lambda限制为5层。您还可以利用提供的Docker镜像进行本地开发。

注意

如果您使用Bref v2,您需要使用bref/extra-php-extensions包的1.x版本。

如果您使用Bref v1,您需要使用bref/extra-php-extensions包的0.x版本。

警告

Bref v2尚不支持ARM64。

我们很高兴接受其他扩展的贡献。只有天空是极限!(以及您的Docker知识...)

安装和配置

composer require bref/extra-php-extensions
# serverless.yml
service: app

provider:
    name: aws
    region: us-east-1

plugins:
    - ./vendor/bref/bref
    - ./vendor/bref/extra-php-extensions # <----- Add the extra Serverless plugin

functions:
    console:
        handler: bin/console
        runtime: php-81
        layers:
            - ${bref-extra:amqp-php-81} # <----- Example for AMQP layer

可用层

Blackfire安装

Blackfire层只安装了探针。

您仍然需要安装代理。代理安装在不同的服务器上(不是Lambda函数)。微型EC2实例足以运行Blackfire代理。

php/conf.d/中创建一个blackfire.ini文件,用于您的lambda函数,其中加载扩展并修改agent_socket以指向Blackfire代理。

;php/conf.d/blackfire.ini
blackfire.agent_socket = tcp://ip-172-40-40-40.eu-central-1.compute.internal:8307
blackfire.agent_timeout = 0.25

您可能需要调整其他Blackfire参数。有关这些参数的更多信息,请参阅Blackfire文档

然后修改您的代理配置,确保您正在监听tcp://0.0.0.0:8307

这篇博客文章可能很有帮助,因为它描述了如何安装Blackfire代理。

ODBC Snowflake设置

您需要在您的serverless.yaml中设置环境变量ODBCSYSINI: /opt/snowflake_odbc/conf/,以便告诉unixODBC加载Snowflake客户端的ini文件。

然后您可以像这样使用Snowflake:odbc_connect('DRIVER=SnowflakeDSIIDriver;Server=[name].snowflakecomputing.com;Account=;Schema=;Warehouse=;Database=;Role=', 'username', 'password')

有关驱动器ini配置的更多信息,请参阅Snowflake客户端文档,但默认配置在大多数情况下已足够。查看这些的最简单方法是下载snowflake_odbc目录

Symfony运行时

请参阅runtime/bref文档。

SQL Server设置

SQL Server层包括SQLSRV扩展和PDO_SQLSRV扩展(源代码)。如果您不确定使用哪个扩展,这篇Stackoverflow帖子可能很有帮助。您需要在您的serverless.yaml中设置环境变量ODBCSYSINI: /opt/microsoft/conf/,以便告诉unixODBC加载所需的ini文件。

新 relic

阅读 新 relic 教程

datadog

阅读 datadog 教程

Docker 镜像

每个层都有 Docker 镜像。每次向 master 推送以及每个 tag 都会更新。镜像的名称是 bref/extra-[name]-php-[version]。在 Docker 仓库 中找到所有镜像。

这些是与创建层的相同 Docker 镜像。所有层文件都位于镜像中的 /opt 目录下。

本地开发

在本地开发时,您可以使用所需扩展构建自己的镜像。以下是用 PHP 8.2 和 MongoDB 扩展的示例

docker-compose.yml

  php:
    build:
      context: .
      dockerfile: Dockerfile-phpFpm
    volumes:
      - .:/var/task:ro

Dockerfile-phpFpm

FROM bref/php-82-fpm-dev:2
COPY --from=bref/extra-mongodb-php-82:1 /opt /opt

对于贡献者和维护者

创建新的层

思路是从 bref/build-php-XX 开始,安装所有想要的库和扩展,然后将所有相关文件移动到 /opt。这些文件将在 Lambda 的相同位置可用。

注意,不能随意移动文件/库。其中大多数都期望在它们的“标准”位置。

  1. layers 中创建一个新的文件夹,并以您的扩展名称命名。
  2. 添加您的 Dockerfile
  3. 在层目录的根目录下创建一个 config.json 文件,指定构建的 PHP 版本
  4. 创建一个 test.php 文件,其中包含一个小测试来确保扩展被加载
  5. 更新 README 中的表格

有关更多详细信息,请参阅 此处

测试层

# Test all layers and PHP versions
make test

# Test only a single layer
layer=imagick make test

# Test a single layer on a single PHP version
layer=imagick php_versions=81 make test

您可以将层发布到您的 AWS 账户中,以在 AWS Lambda 中进行测试

# Publish a single layer on a single PHP version in a single region
layer=imagick php_versions=81 only_region=us-east-1 make publish

部署新版本

使用 Github actions

准备变更日志,包括一些发布说明。然后推送您的更改到 prepare-release 分支。Github Action 将构建和发布层,然后将 layers.json 提交到您的 PR。

现在您只需合并并创建一个标签。

手动方式

export AWS_PROFILE=my_profile
make publish
git add layers.json
git commit -m "New version of layers"
git push

配置

您还可以通过向 make 提供 layer=blackfire 来仅构建一个特定的层。同样,对于某些特定的 PHP 版本,您可以通过向 make 提供 php_versions="80 81" 来完成。您可以以两种方式调用它们。

# First way: make with named arguments
make layer=gd php_versions=81
# Second way: environment variables passed to make
layer=blackfire php_versions=81 make

Lambda 层的详细信息

注意:本节仅适用于您想了解更多信息的情况。

lambda 层遵循以下模式

arn:aws:lambda:<region>:403367587399:layer:<layer-name>:<layer-version>

查看 最新层版本