¿Cómo puedo montar un volumen de Amazon EFS en un directorio de aplicaciones en un entorno de Elastic Beanstalk?

4 minutos de lectura
0

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:

  1. 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.
  2. Crea una carpeta .ebextensions en el directorio raíz del paquete fuente.
  3. 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.
  4. 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/.
OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 meses