Come posso montare un volume Amazon EFS in una directory dell'applicazione di un ambiente Elastic Beanstalk?

3 minuti di lettura
0

Desidero montare un volume Amazon Elastic File System (Amazon EFS) in una directory dell'applicazione di un ambiente AWS Elastic Beanstalk.

Breve descrizione

La seguente risoluzione fornisce istruzioni generali per montare un volume Amazon EFS in piattaforme basate su Amazon Linux 1. Per questa risoluzione viene utilizzato lo stack di soluzioni PHP.
Se si utilizza uno stack di soluzioni diverso, occorre scegliere la directory dell'applicazione e la directory di staging corrette per lo stack di soluzioni tra le seguenti opzioni:

-----------------------------------------------------
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: quando implementi un'applicazione Elastic Beanstalk, il contenuto di /var/app/current viene spostato in /var/app/current.old. Non è possibile montare un volume Amazon EFS direttamente nella directory dell'applicazione. Il pacchetto sorgente attualmente implementato viene spostato nella directory dell'applicazione. Se monti il volume Amazon EFS in /var/app/current, terminata l’implementazione tale volume viene spostato in /var/app/current.old.

Esempio di output di 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
===============================

Risoluzione

Per montare un volume Amazon EFS in una directory dell'applicazione di un ambiente Elastic Beanstalk, completa i seguenti passaggi:

  1. Verifica che il pacchetto sorgente sia stato decompresso nella directory di staging. Per ulteriori informazioni, consulta Viewing logs from Amazon Elastic Compute Cloud (Amazon EC2) instances in your Elastic Beanstalk environment.
    Esempio di output 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: tutti gli hook appdeploy pre in /opt/elasticbeanstalk/hooks/appdeploy/pre/ e .ebextensions vengono eseguiti nella directory di staging.
  2. Crea una cartella .ebextensions nella directory principale del pacchetto sorgente.
  3. Per montare un volume Amazon EFS in una directory specifica, ad esempio /efs, aggiungi alla directory un file di configurazione formattato (YAML o JSON).
  4. Per montare il volume Amazon EFS in una directory dell'applicazione, crea un collegamento simbolico alla directory di staging. Per creare un collegamento simbolico da /efs che punti alla directory di staging, usa container_commands per creare un file .config nella cartella .ebextensions.
    Esempio:
    container_commands:
      01_symlink:
        command: ln -s /efs /var/app/ondeck/
    Nota: quando vengono eseguiti gli hook appdeploy enact durante un’implementazione in un ambiente Elastic Beanstalk, il contenuto della directory di staging viene spostato nella directory dell'applicazione. Ad esempio, in una soluzione PHP, lo script flip.sh sposta il contenuto della directory di staging nella directory dell'applicazione. Lo script flip.sh è il primo script di AppDeployEnactHook in /opt/elasticbeanstalk/hooks/appdeploy/enact/.
AWS UFFICIALE
AWS UFFICIALEAggiornata 3 mesi fa