PHP-контейнер bref.sh для AWS Lambda с Neos CMS

Я изо всех сил пытаюсь запустить Neos (cms на основе php) в контейнере докеров для AWS Lambda. Думаю, у меня где-то недоразумение, и надеюсь, что кто-нибудь может помочь.

Что я сделал до сих пор:

  1. Настроил Neos так, чтобы все файлы кеша записывались в папку tmp
  2. Я добавил пакет bref и extra-php-extensions в composer.json
  3. Я создал файл докера, довольно простой, как показано в статье блога Мэтью Наплоли: https://mnapoli.fr/aws-lambda-php-docker-containers/
  4. Я создал шаблон облачной информации для использования

Dockerfile:

      FROM bref/php-74-fpm

COPY . /var/task

# Start Bref's runtime client
CMD _HANDLER=Web/index.php /opt/bootstrap

template.yml

      AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
  neos-demo-lambda

  Sample SAM Template for neos-demo-lambda

# More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst
Globals:
  Function:
    Timeout: 3

Resources:
  Neos:
    Type: AWS::Serverless::Function
    Properties:
      Description: Show neos demo
      PackageType: Image
      ImageUri: neos7.demo.lambda.php74:latest
      #Handler: "Web/index.php /opt/bootstrap"
      #Handler: "Web/index.php"
      MemorySize: 1024
      Timeout: 360
      Environment:
        Variables:
          FLOW_CONTEXT: 'Production'
          FLOW_PATH_TEMPORARY_BASE: '/tmp/neos'
          FLOW_PATH_DATA_BASE: '/tmp/Data'
          BREF_AUTOLOAD_PATH: '/var/task/Packages/Libraries/autoload.php'
          AWS_S3_BUCKET_STORAGE: 'neos-lambda-demo-private'
          AWS_S3_BUCKET_TARGET: 'neos-lambda-demo-public'
          AWS_CLOUDFRONT_BASE_URI: ''
          AWS_REDIS_HOST: ''

      Events:
        htmlHttpApi:
          Type: HttpApi
          TimeoutInMillis: 28000

    Metadata:
      DockerTag: neos7.lambda.demo
      DockerContext: ./Web/index.php
      Dockerfile: Dockerfile

Ответ sam local start-api:

      entrypoint requires the handler name to be the first argument
time="2021-04-14T22:11:48.093" level=error msg="Init failed" InvokeID= error="Runtime exited with error: exit status 142"
time="2021-04-14T22:11:48.093" level=error msg="INIT DONE failed: Runtime.ExitError"
Invalid lambda response received: Lambda response must be valid json
2021-04-15 00:11:48 127.0.0.1 - - [15/Apr/2021 00:11:48] "GET / HTTP/1.1" 502 -

Чего я не понимаю, я ожидал, что всегда будет возвращен действительный json, даже если php выдает ошибку 5xx. Я заблудился ... даже если это не так, как я могу отладить проблему?

В конце концов, мне нужно создать свой собственный образ докера, так как Neos слишком велик для использования слоев bref, и мне нужно довольно много расширений php. Если бы я мог понять текущую проблему, я мог бы решить ее и предоставить рабочий контейнер для всех.

В этом сценарии у меня есть еще несколько вопросов: если у меня есть веб-приложение и я использую контейнер, нужно ли мне устанавливать пакеты bref с помощью composer? Это не было ясно из сообщения в блоге. Также мне нужно установить обработчик в serverless / sam, и если да, то какая строка будет правильной, учитывая, что Web/index.php это путь в Неосе?

В общем, Neos отлично работал бы в AWS. Моя установка была бы такой:

  1. CloudFront с поведением для статических файлов от S3 и всего остального до лямбда
  2. Redis для хранения файлов кеша от Neos
  3. ElasticSearch для поиска по веб-сайтам и повышения производительности на крупных сайтах

Как только это заработает, я бесплатно опубликую всю информацию для сообщества Neos, чтобы все заработало.

Надеюсь, кто-то может помочь ...

Спасибо!

1 ответ

Не могли бы вы попробовать это:

      FROM bref/php-74-fpm

# Include any extension you want, for example:
#COPY --from=bref/extra-gd-php-74:0.9.5 /opt /opt

ADD . $LAMBDA_TASK_ROOT

CMD [ "index.php" ]

Формат был упрощен после публикации статьи (см. Https://gist.github.com/mnapoli/f911a50c7aab77690e6cdde157812265).

Другие вопросы по тегам