EC2 시작(Launch) 시 사용자 데이터(User Data)를 이용하여 Script 실행
EC2에서 맨 처음 생성되었을때 수행할 동작을 사용자 데이터(User Data) 에 정의할수 있는데요, 원하는 스크립트를 기입하면 EC2가 맨 처음 Launch 된 직후에 기입한 명령어들이 수행됩니다.
#!/bin/bash
# Node.js 설치
curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
sudo apt-get install -y nodejs
# pm2 설치
sudo npm install -g pm2
# Git 설치 (필요한 경우)
sudo apt-get install -y git
# 애플리케이션 코드 클론
git clone https://github.com/test/app /var/www/app
# 애플리케이션 코드 디렉토리로 이동
cd /var/www/app
# 애플리케이션 종속성 설치 (package.json에 정의된 종속성)
npm install
# app.js 파일 실행
pm2 start app.js
위와 같이 필요한 패키지들과 소스코드를 Clone후에 PM2를 실행시키는 간단한 스크립트를 작성할 수 있습니다.
사용자 데이터는 기본적으로 root 권한으로 실행되며 맨 처음 Launch 될때만 수행됩니다.
따라서 EC2가 재부팅되었을때는 사용자 데이터가 적용되지 않습니다.
EC2 중지(stop) 이후 사용자 데이터 수정하기
위와 같이 인스턴스를 중지시키고 EC2의 사용자 데이터(User Data) 를 변경할 수도 있는데요, 이때 인스턴스를 중지시켰다가 다시 시작 시킬때 사용자 데이터가 실행되도록 하려면 추가적인 작업이 필요합니다.
EC2가 재시작(reload) 될때 사용자 데이터(User Data) 실행되도록 구성하기
EC2 인스턴스가 초기 설정을 할 때 cloud-init 이라는 오픈소스를 패키지를 통해 수행되는데요, cloud-init 기본 설정에서 사용자 데이터는 기본적으로 EC2 인스턴스가 맨 처음 수행될때만 수행되도록 선언되어 있습니다. 아래 경로를 확인해보면 config_scripts_user.once 파일이 기본적으로 구성되어있는것을 확인할 수 있습니다.
/var/lib/cloud/sem/config_scripts_user.once
아래 스크립트를 User Data에 입력하여 EC2 재시작시 사용자 데이터가 수행되도록 설정할 수 있습니다.
Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0
--// ##--------------- ①
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"
#cloud-config
cloud_final_modules:
- [scripts-user, always]
--// ##--------------- ②
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"
#!/bin/bash
/bin/echo "Hello World" >> /tmp/testfile.txt
--//-- ##--------------- final
- multipart/mixed : 파일과 텍스트가 혼합되어 있는 형태.
- boundary : multipart의 구분을 '//' 를 통해 수행
(즉, --// 첫 부분은 멀티 파트 1번 --// 두번째 부분은 멀티 파트 2번 --//-- 은 끝남을 의미) - cloud_final_modules : 여기서 always 로 설정하여 재부팅시에도 User Data를 실행 할 수 있음.
- #!/bin/bash : 이후에 실행될 스크립트를 입력
EC2가 재시작(reload) 될때 사용자 데이터(User Data) 다시 한번만 수행되도록 돌려놓기
만약 원래대로 EC2에 한번만 User Data를 동작하고 싶도록 하려면, EC2에 접속하여 아래와 같이 명령어를 입력하여 user-data.txt와 cloud-config.txt를 초기화하고, config_scripts_user.once 파일을 삭제하고 UserData도 원래대로 돌려놓으면 됩니다.
# cat /dev/null > /var/lib/cloud/instances/i-*/user-data.txt
# cat /dev/null > /var/lib/cloud/instances/i-*/cloud-config.txt
# rm -rf /var/lib/cloud/sem/config_scripts_user.once
마치며
이번에는 사용자 데이터를 통해 EC2의 시작시에 원하는 스크립트를 동작시키는 법을 알아보았습니다. 사용자 데이터는 추후에 Auto-Scaling Group과 같은 AWS의 강력한 기능을 사용할때에도 꼭 필요한 개념이기 때문에 미리 정리를 한번 해보았습니다.
앞으로 기회가 되면 ASG 구성 및 Launch Template과 같은 기능도 한번 스터디하여 포스팅해보도록 하겠습니다.
감사합니다.
참고
EC2시작할-때-스크립트-자동실행하여-서버-배포하기feat.-pm2
https://blog.naver.com/mogulist/221661370156
https://repost.aws/ko/knowledge-center/execute-user-data-ec2
'서버 인프라, 백엔드 > 아마존 (AWS)' 카테고리의 다른 글
AWS : SES 에서 554 message reject 에러 발생 원인 및 해결방법 (sandbox 환경 Production으로 전환하기) (1) | 2024.02.27 |
---|---|
AWS : Cloudfront + S3로 mpeg-dash 영상 업로드 후 테스트해보기 (with FFmpeg) (0) | 2023.10.18 |
AWS : 정적 사이트 배포 하는 4가지 방법 (feat: cloudfront / nginx /amplify / netlify) (1) | 2023.04.25 |
AWS : EBS란? EBS 요금 분석 (0) | 2023.03.03 |
AWS : 계정들간의 Route53 도메인 공유하기 (0) | 2022.08.10 |