RUDE

Как запустить функцию AWS Lambda на базе PHP

CoderStudio, 05.05.2022 19:09
Как запустить функцию AWS Lambda на базе PHP

В этом посте я собираюсь создать лямбда-функцию AWS, работающую на PHP. Процесс упрощен с помощью Bref.

Bref - это проект с открытым исходным кодом, который обеспечивает полную поддержку AWS Lambda для PHP и фреймворков на нем.

Предварительные условия: установите composer локально и сгенерируйте ключи доступа к AWS.

Шаги:

  1. Установите и настройте Serverless Framework
npm i -g serverlessserverless config credentials - provider aws - key <key> - secret <secret>

2. Composer install Bref

mdkir serverless-php-lambdacd serverless-php-lambda
composer require bref/bref

3. Инициализировать проект Bref

vendor/bin/bref initSelect Event-
driven function belowWhat kind of lambda do you want to create? (you will be able to add more functions later by editing `serverless.yml`) [Web application]:
  [0] Web application
  [1] Event-driven function

На этом этапе создается файл serverless.yml, как показано ниже.

service: app

provider:
    name: aws
    region: eu-west-2
    runtime: provided.al2

plugins:
    - ./vendor/bref/bref

functions:
    php-lambda:
        handler: index.php
        description: ''
        layers:
            - ${bref:layer.php-73}

# Exclude files from deployment
package:
    patterns:
        - '!tests/**'

Приведенный выше serverless yml показывает, что я развертываю лямбда-функцию с именем php-lambda, работающую на PHP 7.3, на машине Amazon Linux 2(provided.al2) на AWS Lambda.

Обратите внимание, что имя функции лямбда, версии PHP и регион AWS могут быть обновлены перед развертыванием. Более подробную информацию о поддерживаемых версиях PHP можно найти на сайте bref-runtimes.

Кроме того, при инициализации был создан файл index.php. Измените файл index.php для конкретного случая использования.

4. Развертывание на AWS и тестирование

serverless deploy

На изображении ниже показан пример PHP-кода, запущенного в AWS Lambda.

5. Добавьте PHP-расширения (необязательно)

Для этого примера мы добавим расширение Imagick PHP в следующих подшагах;

RUN composer require bref/extra-php-extensions
UPDATE plugins in serverless
.yml file and add - ./vendor/bref/extra-php-extensions
UPDATE layers in serverless
.yml file and add ${bref-extra:imagick-php-73}
save and redeploy and retest

Новый serverless.yml выглядит так, как показано ниже.

service: app

provider:
    name: aws
    region: eu-west-2
    runtime: provided.al2

plugins:
    - ./vendor/bref/bref
    - ./vendor/bref/extra-php-extensions

functions:
    php-lambda:
        handler: index.php
        description: ''
        layers:
            - ${bref:layer.php-73}
            - ${bref-extra:imagick-php-73}

# Exclude files from deployment
package:
    patterns:
        - '!tests/**'

Bref также поддерживает и многие другие PHP-расширения. Более подробную информацию можно найти здесь.

Если вы выполнили все шаги, у вас должна быть лямбда-функция AWS, которая работает на PHP.