- Launch Template이란?
- Launch Template 생성
- Auto Scaling?
- Auto Scaling Group 생성
이전 포스팅 - 2022.03.08 - [AWS] - Amazon EC2 - UserData & AWS CLI - 에서 User Data를 통해서 HISTSIZE와 HISTTIMEFORMAT을 변경하고 Node.js를 설치하는 스크립트를 인스턴스 생성과 동시에 실행하는 방법을 알아봤고 또 AWS CLI를 사용해서 명령어 한 줄로 간단하게 인스턴스를 생성하는 것까지 확인했어요. 오늘은 Launch Templates와 Auto Scaling (Group)에 대하여 알아볼게요.
Launch Template이란?
간단하게 이야기하자면 시작 템플릿은 인스턴스 구성 정보를 저장하는 '템플릿'이에요. Amazon Machine Image(AMI)의 ID, 인스턴스 유형, 키 페어, 보안 그룹 등 EC2 인스턴스를 생성하는데 필요한 여러 가지 정보를 가지고 있어요. 시작 템플릿은 기존 템플릿에서 몇몇 파라미터를 변경해서 다른 버전의 시작 템플릿을 만들 수 있고 템플릿을 사용해서 인스턴스를 생성할 때 버전을 정해서 원하는 버전으로 인스턴스를 생성할 수도 있어요.
Launch Template 생성
그럼 시작 템플릿을 만들어보면서 어떤 설정들을 할 수 있는지 확인해볼게요. 메뉴 위치는 EC2 콘솔에서 Instances > Launch Templates 위치에 있어요.
Launch Template 메뉴 또한 지난번 EC2 인스턴스를 생성할 때의 메뉴 구성과 크게 다르지 않아요.
먼저 템플릿 이름과 설명을 넣어주세요.
그리고 어떤 AMI를 사용해서 인스턴스를 만들 건지 선택해주세요.
다음으로 인스턴스 타입과 키 페어를 선택해주세요.
다음으로 저장소를 설정할 거예요. 8 긱은 너무 커서 4 긱으로 해봤는데 스냅숏보다 작은 크기로 저장소 크기를 지정할 수 없다고 해서 그냥 반대로 10 긱으로 늘려봤어요.
태그는 건너뛰고 마지막으로 Advanced 메뉴를 열고 가장 하단에 보면 User data를 넣는 곳이 있어요. 여기에 지난번에 만들었던 스크립트를 조금 수정해서 넣어주었어요.
스크립트를 아래와 같이 조금 변경해서 인스턴스가 생성될 때 express-generator를 통해서 express 앱을 하나 만들어서 바로 실행시키고 접속했을 때 Express라는 글자 대신 호스트 이름을 보여주도록 변경하고 80 포트로 들어오는 패킷을 3000번 포트로 프리 라우팅 하도록 했어요. user-data와 shell script로만 하려다 보니 조금 복잡하게 됐어요. 뒤에서 볼 Auto Scaling과 Load Balancing을 위해서 조금 억지로 넣었어요.
#!/bin/bash
yum update -y
sed -i 's/HISTSIZE=1000/HISTSIZE=10000\nHISTTIMEFORMAT="%d-%m-%y %T "/g' /etc/profile
curl -fsSL https://rpm.nodesource.com/setup_lts.x | bash -
yum install -y nodejs
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3000
RUN y | npx express-generator --pug /home/ec2-user/WebServer
cd /home/ec2-user/WebServer/
npm i
chown -R ec2-user:ec2-user /home/ec2-user/WebServer/
sed -i "1s/^/const os = require('os')\n/" /home/ec2-user/WebServer/routes/index.js
sed -i "s/'Express'/os.hostname\(\)/" routes/index.js
runuser -l ec2-user -c 'node /home/ec2-user/WebServer/bin/www'
그리고 네트워크는 Default VPC에 Default Subnet으로 설정했어요. Default Security group의 incoming 설정은 ssh(22)와 http(80) 포트가 0.0.0.0/0으로부터 열려있어요.
이제 우측에 떠 있는 요약 정보를 보고 Create Launch Template 버튼을 눌러주면 템플릿이 완성돼요.
자 그럼 여기에서 Actions > Launch instance from template 버튼을 눌러주세요.
그러면 템플릿을 고르는 화면에서 템플릿과 버전을 고를 수 있고 아래로 스크롤해서 다른 설정들을 변경할 수도 있고 우측 상단에서 인스턴스 개수를 변경하는 것도 가능해요. 변경할 내용이 없다면 옆에 Launch Instance 버튼을 눌러주세요.
물론 AWS CLI를 통해서도 시작 템플릿을 사용할 수 있어요. aws ec2 run-instances help 명령어로 찾아보면 아래와 같은 내용이 있네요.
--launch-template (structure)
The launch template to use to launch the instances. Any parameters
that you specify in RunInstances override the same parameters in
the launch template. You can specify either the name or ID of a
launch template, but not both.
LaunchTemplateId -> (string)
The ID of the launch template.
LaunchTemplateName -> (string)
The name of the launch template.
Version -> (string)
The version number of the launch template.
Default: The default version for the launch template.
Shorthand Syntax:
LaunchTemplateId=string,LaunchTemplateName=string,Version=string
JSON Syntax:
{
"LaunchTemplateId": "string",
"LaunchTemplateName": "string",
"Version": "string"
}
aws ec2 run-instances --launch-template LaunchTemplateId=LAUNCHTEMPLATEID
위 명령어로 aws 명령을 써서 시작 템플릿을 통해 인스턴스를 생성할 수 있어요. 그러면 이렇게 인스턴스가 잘 생성된 것을 아래와 같이 확인할 수 있어요.
여기서 끊고 Auto Scaling은 2부에서 볼게요.