Quiero montar un volumen de Amazon Elastic File System (Amazon EFS) en un directorio de aplicaciones en un entorno de AWS Elastic Beanstalk.
Breve descripción
La siguiente resolución proporciona instrucciones generales para montar un volumen de Amazon EFS en plataformas basadas en Amazon Linux 1. Para la resolución se usa la pila de soluciones de PHP. Si usas una pila de soluciones diferente, selecciona el directorio de aplicaciones y el directorio provisional correctos para tu pila de soluciones entre las siguientes opciones:
-----------------------------------------------------
Solution stack Application directory Staging directory
Nodejs /var/app/current /tmp/deployment/application
PHP /var/app/current /var/app/ondeck
Ruby (Passenger) /var/app/current /var/app/ondeck
Ruby (Puma) /var/app/current /var/app/ondeck
Java with Tomcat /usr/share/tomcat*/webapps/ROOT /tmp/deployment/application/ROOT
Java SE /var/app/current /var/app/staging
Python /opt/python/current/app /opt/python/ondeck/app
Go /var/app/current /var/app/staging
Single Container Docker /var/app/current /var/app/staging
Multi-Container Docker /var/app/current /var/app/staging
-----------------------------------------------------
Importante: Al implementar una aplicación de Elastic Beanstalk, el contenido de /var/app/current se mueve a /var/app/current.old. No puede montar directamente un volumen de Amazon EFS en el directorio de aplicaciones. El paquete fuente actualmente implementado se mueve al directorio de aplicaciones. Si monta el volumen de Amazon EFS en /var/app/current, ese volumen se mueve a /var/app/current.old una vez finalizada la implementación.
Ejemplo de salida de eb-activity.log:
===============================
[2020-02-12T02:28:18.237Z] INFO [3159] - [Application deployment Sample Application@1/StartupStage1/AppDeployEnactHook/01_flip.sh] : Starting activity...
[2020-02-12T02:28:18.431Z] INFO [3159] - [Application deployment Sample Application@1/StartupStage1/AppDeployEnactHook/01_flip.sh] : Completed activity. Result:
++ /opt/elasticbeanstalk/bin/get-config container -k app_staging_dir
+ EB_APP_STAGING_DIR=/var/app/ondeck
++ /opt/elasticbeanstalk/bin/get-config container -k app_deploy_dir
+ EB_APP_DEPLOY_DIR=/var/app/current
+ '[' -d /var/app/current ']'
+ mv /var/app/current /var/app/current.old
+ mv /var/app/ondeck /var/app/current
+ nohup rm -rf /var/app/current.old
===============================
Solución
Para montar un volumen de Amazon EFS en un directorio de aplicaciones en un entorno de Elastic Beanstalk, siga estos pasos:
- Confirme que el paquete fuente esté descomprimido en el directorio provisional. Para obtener más información, consulta Viewing logs from Amazon Elastic Compute Cloud (Amazon EC2) instances in your Elastic Beanstalk environment (Visualización de los registros de instancias de Amazon Elastic Compute Cloud (Amazon EC2) en tu entorno de Elastic Beanstalk).
Ejemplo de salida de eb-activity.log:
===============================
[2020-02-12T02:28:16.336Z] INFO [3159] - [Application deployment Sample Application@1/StartupStage0/AppDeployPreHook/01_unzip.sh] : Starting activity...
[2020-02-12T02:28:16.631Z] INFO [3159] - [Application deployment Sample Application@1/StartupStage0/AppDeployPreHook/01_unzip.sh] : Completed activity. Result:
++ /opt/elasticbeanstalk/bin/get-config container -k app_user
+ EB_APP_USER=webapp
++ /opt/elasticbeanstalk/bin/get-config container -k app_staging_dir
+ EB_APP_STAGING_DIR=/var/app/ondeck
++ /opt/elasticbeanstalk/bin/get-config container -k source_bundle
+ EB_SOURCE_BUNDLE=/opt/elasticbeanstalk/deploy/appsource/source_bundle
+ rm -rf /var/app/ondeck
+ /usr/bin/unzip -d /var/app/ondeck /opt/elasticbeanstalk/deploy/appsource/source_bundle
Archive: /opt/elasticbeanstalk/deploy/appsource/source_bundle
creating: /var/app/ondeck/.ebextensions/
inflating: /var/app/ondeck/.ebextensions/logging.config
inflating: /var/app/ondeck/scheduled.php
inflating: /var/app/ondeck/index.php
inflating: /var/app/ondeck/cron.yaml
inflating: /var/app/ondeck/styles.css
extracting: /var/app/ondeck/logo_aws_reduced.gif
+ chown -R webapp:webapp /var/app/ondeck
+ chmod 775 /var/app/ondeck
===============================
Nota: Todos los enlaces appdeploy pre de /opt/elasticbeanstalk/hooks/appdeploy/pre/ y .ebextensions se ejecutan en el directorio provisional.
- Crea una carpeta .ebextensions en el directorio raíz del paquete fuente.
- Para montar un volumen de Amazon EFS en un directorio específico, como /efs, añade un archivo de configuración formateado (YAML o JSON) al directorio.
- Para montar el volumen de Amazon EFS en un directorio de aplicaciones, crea un enlace simbólico al directorio provisional. Para crear un enlace simbólico desde /efs que apunte al directorio provisional, usa container_commands para crear un archivo .config en la carpeta .ebextensions.
Ejemplo:
container_commands:
01_symlink:
command: ln -s /efs /var/app/ondeck/
Nota: Cuando los enlaces appdeploy enact se ejecutan durante una implementación en un entorno de Elastic Beanstalk, el contenido del directorio provisional se mueve al directorio de aplicaciones. Por ejemplo, en una solución de PHP, el script flip.sh mueve el contenido del directorio provisional al directorio de aplicaciones. El script flip.sh es el primer script de AppDeployEnactHook en /opt/elasticbeanstalk/hooks/appdeploy/enact/.