Почему бы просто не смонтировать EFS в качестве общего ресурса на вашем экземпляре EC2, на котором выполняется код Тогда EFS - это обычный путь, в который может писать ваше PHP-приложение. Это то, что мы делаем на наших веб-серверах Elastic Beanstalk для постоянной загрузки пользовательских файлов и т. Д.
Необходимо установить соединение из экземпляра EB / EC2, используя механизм AWS EBExtensions при развертывании кода. Примерный фрагмент конфигурации для этого:
# config.yml file:
files:
"/opt/elasticbeanstalk/hooks/appdeploy/post/my_config_job.sh":
mode: "000755"
owner: root
group: root
content: |
#!/usr/bin/env bash
# Load the EFS path from the EB environment settings
# (The variables are set in the "Configuration" section in the AWS
# Console under the "Environment properties" area. That area takes
# Name and Value pairs, so in our example below, the value
# "WHERE_TO_MOUNT_EFS" is the Name of the variable, and it contains
# a path on the EC2, for example "/efs". That would mount the EFS
# volume at the path /efs on the filesystem.
WHERE_TO_MOUNT_EFS=$(/opt/elasticbeanstalk/bin/get-config environment -k WHERE_TO_MOUNT_EFS)
# This is the actual AWS EFS volume name that has been set up
EFS_VOLUME_NAME=$(/opt/elasticbeanstalk/bin/get-config environment -k EFS_VOLUME_NAME)
# Now create the path for the mount on the filesystem (again, in
# our example "/efs" as specified in the WHERE_TO_MOUNT_EFS variable)
mkdir ${WHERE_TO_MOUNT_EFS}
# Now actually mount the EFS to the "/efs" folder created above
mount -t nfs4 -o nfsvers=4.1 ${EFS_VOLUME_NAME}-$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone).mydomain.com:/ ${WHERE_TO_MOUNT_EFS}
Это всего лишь образец, конечно.
Команды "curl" используются для запроса информации, предоставляемой AWS по специальному IP 169.254.169.154. Ваш домен и путь будут другими.
Кроме того, это скрипт Bash, работающий в Linux. Если вы используете Windows на вашем EB, вам придется адаптировать этот процесс.
Наконец, после монтирования, приведенного выше, в наших скриптах мы фактически создаем символическую ссылку из подпапки нашего веб-сайта в присоединенную папку EFS. Мы также управляем разрешениями с помощью команд Bash, которые назначают пользователю «webapp» необходимые ему разрешения. Эти шаги не являются обязательными, конечно.
Теперь PHP увидит эту папку как путь в файловой системе, но на самом деле она находится в вашей общей папке EFS. Когда среда (-ы) EB восстанавливается, этот сценарий автоматически перезапускается, а EFS повторно подключается, поэтому данные, по-видимому, сохраняются в приложении на EC2.
Надеюсь, это поможет