Amazon EFS 볼륨을 Elastic Beanstalk 환경의 애플리케이션 디렉터리에 마운트하려면 어떻게 해야 하나요?

3분 분량
0

Amazon Elastic File System(Amazon EFS) 볼륨을 AWS Elastic Beanstalk 환경의 애플리케이션 디렉터리에 마운트하려고 합니다.

간략한 설명

다음의 해결 방법은 Amazon Linux 1 기반의 플랫폼에 Amazon EFS 볼륨을 마운트하기 위한 일반적인 지침을 제공합니다. 이 해결 방법은 PHP 솔루션 스택을 사용합니다.
다른 솔루션 스택을 사용하는 경우, 다음의 옵션 중 해당 솔루션 스택에 적합한 애플리케이션 디렉터리와 스테이징 디렉터리를 선택하세요.

-----------------------------------------------------
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
-----------------------------------------------------

**중요:**Elastic Beanstalk 애플리케이션을 배포하면 /var/app/current의 콘텐츠가 /var/app/current.old로 이동합니다. Amazon EFS 볼륨을 애플리케이션 디렉터리에 직접 마운트할 수는 없습니다. 현재 배포된 소스 번들이 애플리케이션 디렉터리로 이동합니다. Amazon EFS 볼륨을 /var/app/current에 마운트하면 배포가 완료된 후 해당 볼륨이 /var/app/current.old로 이동합니다.

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
===============================

해결 방법

Amazon EFS 볼륨을 Elastic Beanstalk 환경의 애플리케이션 디렉터리에 마운트하려면 다음 단계를 완료하세요.

  1. 스테이징 디렉터리에서 소스 번들의 압축이 풀렸는지 확인합니다. 자세한 내용은 Elastic Beanstalk 환경에서 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스의 로그 보기를 참조합니다.
    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
    ===============================
    참고:****/opt/elasticbeanstalk/hooks/appdeploy/pre/.ebextensions의 모든 appdeploy pre 후크는 스테이징 디렉터리에서 실행됩니다.
  2. 소스 번들의 루트 디렉터리에 .ebextensions 폴더를 생성하세요.
  3. Amazon EFS 볼륨을 특정 디렉터리에 마운트(예: /efs에 마운트)하려면 디렉터리에 형식이 지정된 구성 파일(YAML 또는 JSON)을 추가하세요.
  4. Amazon EFS 볼륨을 애플리케이션 디렉터리에 마운트하려면 스테이징 디렉터리에 대한 symlink를 생성하세요. /efs에서 스테이징 디렉터리를 가리키는 symlink를 생성하려면 container_commands를 사용하여 .ebextensions 폴더에 .config 파일을 생성하세요.
    예:
    container_commands:
      01_symlink:
        command: ln -s /efs /var/app/ondeck/
    **참고:**Elastic Beanstalk 환경에서 배포하는 동안 appdeploy enact 후크를 실행하면 스테이징 디렉터리 콘텐츠가 애플리케이션 디렉터리로 이동합니다. 예를 들어, PHP 솔루션에서 flip.sh 스크립트는 스테이징 디렉터리의 내용을 애플리케이션 디렉터리로 이동합니다. flip.sh 스크립트는 **/opt/elasticbeanstalk/hooks/appdeploy/enact/**에 있는 AppDeployEnactHook의 첫 번째 스크립트입니다.
AWS 공식
AWS 공식업데이트됨 3달 전