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

3분 분량
0

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

간략한 설명

다음 해결 방법은 PHP 솔루션 스택을 예로 들어 Amazon Linux 1 기반 플랫폼에 Amazon EFS 볼륨을 마운트하기 위한 일반적인 지침을 제공합니다.

다른 솔루션 스택을 사용하는 경우 동일한 단계를 따르되, 다음 옵션 중에서 솔루션 스택에 대한 올바른 애플리케이션 디렉터리 및 스테이징 디렉터리를 선택합니다.

-----------------------------------------------------
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의 첫 번째 스크립트입니다.


AWS 공식
AWS 공식업데이트됨 2년 전