Como montar um volume do Amazon EFS em um diretório de aplicações de um ambiente do Elastic Beanstalk?

3 minuto de leitura
0

Quero montar um volume do Amazon Elastic File System (Amazon EFS) em um diretório de aplicação em um ambiente do AWS Elastic Beanstalk.

Breve descrição

A resolução a seguir fornece instruções gerais para montar um volume do Amazon EFS em plataformas baseadas na Amazon Linux 1. A resolução usa a pilha de soluções PHP.
Se você usar uma pilha de soluções diferente, escolha o diretório da aplicação e o diretório de teste corretos para sua pilha de soluções entre as seguintes opções:

-----------------------------------------------------
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 você implanta uma aplicação Elastic Beanstalk, o conteúdo de /var/app/current é movido para /var/app/current.old. Não é possível montar diretamente um volume do Amazon EFS no diretório da aplicação. O pacote de origem implantado atualmente é movido para o diretório da aplicação. Se você montar o volume do Amazon EFS em /var/app/current, esse volume será movido para /var/app/current.old após a conclusão da implantação.

Exemplo de saída 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
===============================

Resolução

Para montar um volume do Amazon EFS em um diretório de aplicação em um ambiente do Elastic Beanstalk, conclua as seguintes etapas:

  1. Confirme se seu pacote de origem está descompactado no diretório de teste. Para obter mais informações, consulte Visualizar logs de instâncias do Amazon Elastic Compute Cloud (Amazon EC2) no seu ambiente do Elastic Beanstalk.
    Exemplo de saída 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
    ===============================
    Observação: todos os ganhos appdeploy pre em /opt/elasticbeanstalk/hooks/appdeploy/pre/ e .ebextensions são executados no diretório de teste.
  2. Crie uma pasta .ebextensions no diretório raiz do pacote de origem.
  3. Para montar um volume do Amazon EFS em um diretório específico, como /efs, adicione um arquivo de configuração formatado (YAML ou JSON) ao seu diretório.
  4. Para montar seu volume do Amazon EFS em um diretório de aplicação, crie um link simbólico para o diretório de teste. Para criar um link simbólico de /efs que aponte para o diretório de teste, use container_commands para criar um arquivo .config na pasta .ebextensions.
    Exemplo:
    container_commands:
      01_symlink:
        command: ln -s /efs /var/app/ondeck/
    Observação: quando ganchos appdeploy enact são executados durante uma implantação em um ambiente do Elastic Beanstalk, o conteúdo do diretório de teste é movido para o diretório da aplicação. Por exemplo, em uma solução PHP, o script flip.sh move o conteúdo do diretório de teste para o diretório da aplicação. O script flip.sh é o primeiro script de AppDeployEnactHook em /opt/elasticbeanstalk/hooks/appdeploy/enact/.
AWS OFICIAL
AWS OFICIALAtualizada há 2 meses