UserData(이하 UD) 스크립트는 EC2 인스턴스가 시작될 때 실행된다. UD를 이용해 필요한 패키지를 설치하거나 EC2 내부에서 스크립트를 실행할 수 있다. 

 

실제로 작업할 때 EC2를 만들면 환경 변수랑 실행할 스크립트 때문에 UD의 최대 크기인 16KB를 넘기는 경우가 생겨서 에러가 발생한 적이 있었다. 이러한 문제를 해결 방법에 대해서 알아보려고 한다. 

 

1. Machine Image 만들기

EC2에 필요한 패키지를 미리 설치한 Machine Image를 준비하면, 패키지 설치 스크립트를 빼고도 되니까 UD 크기를 줄일 수 있다.

 

2. 실행할 스크립트 외부에 저장하기

AWS S3 같은 외부 저장소에 실행할 스크립트를 저장해 놓고, 인스턴스에서 다운로드해서 실행하는 방법이다. 이렇게 하면 UD 크기를 효과적으로 관리할 수 있다. 이 두 가지 방법으로 UD 크기 문제를 해결할 수 있고, 하나씩 테스트를 해보자.

 

Machine Image 활용하는 방법

 

아마존 리눅스 2023에는 Docker가 처음에 설치되있지 않기 때문에 도커를 미리 설치한 인스턴스를 머신 이미지로 만들면 된다. 

 

완성이 되면 아래와 같고 아마존 리눅스 2023 기본 이미지가 아닌 해당 이미지로 시작하면 된다. 

 

인스턴스를 실행시키면 아래와 같이 바로 docker가 설치된 모습을 볼 수 있다.

 

 

실행할 스크립트 외부에 저장하는 방법

 

S3라는 훌륭한 스토리지가 있으므로 S3에 스크립트를 넣고 활용해 보자. 스크립트는 아래와 같이 도커를 설치하고 실행할 수 있게 세팅해 준다. 

#!/bin/sh
sudo yum install docker -y
sudo systemctl start docker
sudo usermod -aG docker ec2-user

 

이제 EC2의 UD에 위의 스크립트를 가져와서 실행해주는 것을 작성해 주면 완료된다.

#!/bin/sh
sudo yum update -y
sudo yum install -y aws-cli
sudo aws s3 cp s3://ec2-user-data-test/test.sh /home/ec2-user/test.sh
sudo chmod +x /home/ec2-user/test.sh
sudo /home/ec2-user/test.sh

 

이제 EC2를 실행시켜보자. 

 

UD가 S3에서 다운로드한 스크립트를 실행하여 Docker가 실행되는 것을 볼 수 있다.

 

내가 느끼기에는 Machine Image를 만들어서 하는 것이 성능이나 확장성 면에서 좋지만 불가피하게 사이즈가 큰 스크립트를 사용해야 한다면, S3에 저장해서 다운로드하는 방식도 좋은 거 같다.