Amazon Linux 2에서 Elastic Beanstalk 인스턴스의 환경 속성에 액세스해야 하는 스크립트를 수동으로 실행하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2021년 5월 28일

Amazon Linux 2 기반 AWS Elastic Beanstalk 인스턴스의 환경 속성에 액세스해야 하는 스크립트를 수동으로 실행하려고 합니다.

간략한 설명

플랫폼 후크를 사용하여 Amazon Linux 2 플랫폼에서 스크립트를 수동으로 실행할 수 있습니다. 스크립트를 사용하려면 Elastic Beanstalk 인스턴스의 환경 속성에 액세스해야 합니다. 플랫폼 후크를 사용하여 인스턴스 프로비저닝 중에 환경 인스턴스에서 사용자 지정 코드를 구성하고 실행하는 것이 좋습니다. 구성 파일(.ebextensions)에 파일 및 명령을 제공하는 대신 플랫폼 후크를 사용하세요.

참고: 다음 해결 방법에는 PHP, Python, Ruby, Amazon Corretto, Tomcat, Node.js 등의 여러 플랫폼에서 사용할 수 있는 스크립트가 두 개 포함되어 있습니다. 이러한 스크립트를 사용하여 /opt/elasticbeanstalk/deployment/env 파일에 정의된 환경 속성을 소싱할 수 있습니다.

경고: 사용 사례에서 스크립트를 수동으로 실행해야 하는 경우 다음 단계를 완료할 수 있습니다. 그러나 SSH를 통해 수행된 변경 사항은 지속되지 않으므로 스크립트를 수동으로 즉, Elastic Beanstalk에서 SSH를 통해 실행하는 것은 모범 사례가 아닙니다.

해결 방법

1.    애플리케이션 소스 번들에서 .platform/hooks/postdeploy.platform/confighooks/postdeploy 디렉터리 모두에 01_set_env.sh라는 파일을 생성합니다. 예를 들면 다음과 같습니다.

~/workspace/my-app/
├── .platform
│   ├── hooks
│   │   ├── postdeploy
│   │   │   ├── 01_set_env.sh
│   ├── confighooks
│   │   ├── postdeploy
│   │   │   ├── 01_set_env.sh
|-- helloworld

2.    Bash 스크립트를 사용하여 인스턴스의 모든 사용자가 환경 변수 파일에 액세스할 수 있도록 허용합니다. Bash 스크립트에는 /opt/elasticbeanstalk/deployment/env 파일을 복사하고 644 권한을 설정하는 논리가 포함되어 있습니다. 예를 들면 다음과 같습니다.

.platform/hooks/postdeploy/01_set_env.sh AND .platform/confighooks/postdeploy/01_set_env.sh
-----
#!/bin/bash

#Create a copy of the environment variable file.
cp /opt/elasticbeanstalk/deployment/env /opt/elasticbeanstalk/deployment/custom_env_var

#Set permissions to the custom_env_var file so this file can be accessed by any user on the instance. You can restrict permissions based on your requirements.
chmod 644 /opt/elasticbeanstalk/deployment/custom_env_var

#Remove duplicate files upon deployment.
rm -f /opt/elasticbeanstalk/deployment/*.bak

# Add the following code to the 'ec2-user' bash profile to avoid manually sourcing the file on the instance.
source_cmd="source <(sed -E -n 's/[^#]+/export &/ p' /opt/elasticbeanstalk/deployment/custom_env_var)"
bash_profile_path=/home/ec2-user/.bash_profile
grep -qxF -- "$source_cmd" "$bash_profile_path" || echo $source_cmd >> $bash_profile_path

3.    .platform/hooks/postdeploy/01_set_env.sh..platform/confighooks/postdeploy/01_set_env.sh 파일 모두에 권한을 설정합니다.

chmod +x .platform/hooks/postdeploy/01_set_env.sh
chmod +x .platform/confighooks/postdeploy/01_set_env.sh

중요: 애플리케이션 소스 번들에 3단계의 파일을 추가하기 전에 로컬 시스템에 644 권한을 설정해야 합니다.

4.    .platform 후크 스크립트를 배포합니다.

참고: 공백 또는 특수 문자가 포함된 환경 속성은 Bash 셸에서 해석되어 다른 값이 될 수 있습니다.

중요: Amazon Linux 2에서는 모든 환경 속성이 /opt/elasticbeanstalk/deployment/env라는 단일 파일로 결합됩니다. 이 파일은 Elastic Beanstalk 애플리케이션 배포 프로세스 중에만 사용해야 합니다. /opt/elasticbeanstalk/deployment/env에 정의된 속성은 운영 체제 수준에서 사용할 수 없습니다. 인스턴스에서 실행되는 수동 스크립트를 통해 이러한 변수에 액세스할 경우 사용할 수 없는 속성은 “권한 거부” 문제를 유발할 수 있습니다. /opt/elasticbeanstalk/deployment/env 파일은 사용 권한이 제한되어 있으므로 루트가 아닌 사용자(예: ec2-user)가 소싱하기 어려울 수 있습니다. 예를 들어 다음과 같습니다.

[root@ip-X-X-X-X deployment]# ls -latr /opt/elasticbeanstalk/deployment/env

-r-------- 1 root root 147 Jun 17 06:23 /opt/elasticbeanstalk/deployment/env


이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?