Elastic Beanstalk 환경의 애플리케이션 디렉터리에 Amazon EFS 볼륨을 탑재하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 10월 15일

AWS Elastic Beanstalk 환경의 애플리케이션 디렉터리에 Amazon Elastic File System(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
-----------------------------------------------------

중요: Amazon EFS 볼륨을 애플리케이션 디렉터리에 직접 마운트할 수는 없습니다. Elastic Beanstalk 애플리케이션을 배포할 때마다 /var/app/current의 콘텐츠가 /var/app/current.old로 이동하기 때문입니다. 현재 배포된 소스 번들이 애플리케이션 디렉터리로 이동합니다. 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
===============================

해결 방법

1.    스테이징 디렉터리에서 소스 번들의 압축이 해제되었는지 확인합니다. 다음 예제 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/의 모든 appdeploy pre 후크와 .ebextensions는 스테이징 디렉터리에서 실행됩니다.

2.    소스 번들의 루트 디렉터리에 .ebextensions 폴더를 생성합니다.

3.    특정 디렉터리(예: /efs)에 Amazon EFS 볼륨을 마운트하려면 형식이 지정된 구성 파일(YAML 또는 JSON)을 디렉터리에 추가합니다.

4.    Amazon EFS 볼륨을 애플리케이션 디렉터리에 마운트하려면 스테이징 디렉터리에 대한 심볼릭 링크를 생성해야 합니다. /efs에서 스테이징 디렉터리를 가리키는 심볼릭 링크를 생성하려면 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의 첫 번째 스크립트입니다.</p


이 문서가 도움이 되었습니까?


결제 또는 기술 지원이 필요합니까?