[AWS] EC2 인스턴스 생성 및 User Data를 이용한 설정 자동화

janeljs·2021년 7월 22일
6

AWS

목록 보기
8/8
post-thumbnail

인스턴스를 새로 만들 때마다 매번 필요한 프로그램을 설치하고 nginx 등을 설정하는 과정이 번거로워 해당 과정을 자동화 해보았다. 인스턴스 생성 시 인스턴스의 user data에 스크립트를 작성해 놓으면, 인스턴스 시작 버튼을 누르는 동시에 스크립트의 명령이 순차적으로 실행되어 jdk 설치부터 nginx 설정까지 한 번에 할 수 있다.

먼저 사용하고 싶은 AMI(Amazon Machine Image)를 선택한다.

인스턴스 유형을 선택한다. JVM과 elasticsearch를 함께 돌리기에 t2.micro는 너무 빈약하지만, 돈이 없기 때문에 검색 기능을 추가하기 전까지는 t2.micro를 사용해야 한다.

만들어 두었던 vpc와 서브넷을 설정해준다. 평소라면 퍼블릭 IP 자동 할당을 꺼두고, 추후에 Elastic IP를 붙여주면 되지만, user data를 이용할 때는 활성화해두는 것이 좋다. 비활성화해두었다가 IP 할당이 늦게되면 스크립트가 정상적으로 실행되지 않기 때문이다.

쭈욱 내려가면 고급 세부 정보 탭에 사용자 데이터라는게 보이는데 매번 귀찮게 설치해줬던 부분들을 스크립트로 만들고 user data 안에 넣어줄 것이다.

아래의 스크립트 중 필요한 부분을 user data에 넣어준다.
(저는 매번 설치하고 nginx 설정하는 일이 귀찮았기에 jdk 설치부터 nginx 설정까지 제가 평소에 쓰는 설정들을 user data 안에 다 넣어줬어요!😂)

#!/bin/bash
apt-get update -y
apt-get install openjdk-11-jdk -y
apt-get install mysql-server -y
apt-get install awscli -y
apt-get install nginx -y
service nginx start
cd /etc/nginx/sites-available
echo "
server {
  listen 80;
  listen [::]:80;
  server_name localhost;
  location /api {
    proxy_pass http://localhost:8080;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
  }
  location / {
    root /home/ubuntu/build;
    index index.html;
    try_files $uri /index.html;
  }
}
" > airbnb.conf
ln -s /etc/nginx/sites-available/airbnb.conf /etc/nginx/sites-enabled
rm /etc/nginx/sites-enabled/default
service nginx restart

root user가 기본값으로 설정되어 있으므로 sudo 명령어는 적지 않아도 된다.

스토리지 설정은 바꾸지 말고 태그는 원하는대로 설정해준 뒤, 기존에 만들어 두었던 public sg를 보안그룹으로 설정하자.

키 페어를 다운로드 한 뒤 인스턴스 시작 버튼을 누르면 완료!🙂

IP주소가 매번 바뀌는 걸 원하지 않는다면 탄력적 IP도 설정해주자.

이제 ec2 인스턴스에 접속하여 java -version 명령어를 실행해보면

이미 java가 설치되어 있는 것을 확인할 수 있다.

mysql도 잘 깔려있고 nginx 설정까지 잘 되어있다!😆

추가 TIP!

새로운 인스턴스를 생성할 때 기존에 사용했던 Elastic IP를 그대로 사용한다면 REMOTE HOST IDENTIFICATION HAS CHANGED!라는 에러를 마주할 수 있다.

ssh-keygen -R <hostname>

이럴 땐 위의 명령어를 통해 hostname에 속하는 모든 키를 삭제하고 재접속하면 된다.


Source

0개의 댓글