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

3 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 usa una pila de soluciones diferente, elija el directorio de aplicaciones y el directorio provisional correctos para su 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, consulte Viewing logs from Amazon Elastic Compute Cloud (Amazon EC2) instances in your Elastic Beanstalk environment.
    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. Cree 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ñada un archivo de configuración formateado (YAML o JSON) al directorio.
  4. Para montar el volumen de Amazon EFS en un directorio de aplicaciones, cree un enlace simbólico al directorio provisional. Para crear un enlace simbólico desde /efs que apunte al directorio provisional, use 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 3 meses