이번 포스팅에서는 AWS로 인스턴스 생성 및 웹서버를 작성하는 방법에 대해서 다룬다.
(이번 포스팅 내용을 직접 해보시려면 이전 포스팅인 AWS CLI를 진행하셔야 합니다.)
2021.04.19 - [클라우드 컴퓨팅 & NoSQL] - [AWS] Command Line Interface(CLI) 설치 방법 (Mac)
1. 보안 그룹 설정
보안 그룹은 방화벽과 유사하게 동작한다.
예제에서는 tcp/3000 포트와 tcp/22 포트를 이용하여 웹 애플리케이션을 생성한다.
1.1. 기본 VPC(virtual private cloud) ID 찾기
보안그룹 설정을 위해서 기본 가상 사설 클라우드(VPC) ID를 찾는다.
# VPC ID 찾기
$ aws ec2 describe-vpcs
1.2. 보안 그룹 생성하기
VPC ID가 vpc-e66e48b인 것을 확인하고, 새로운 보안 그룹을 생성한다.
# 보안그룹 생성
$ aws ec2 create-security-group \
--group-name HelloWorld \
--description "Hello World Demo" \
--vpc-id vpc-e066e48b
1.3. 보안 그룹의 인바운드 트래픽 허용
SSH 접속용 포트 22와 웹페이지 포트 3000을 인바운드 트래픽으로 연다.
아웃바운드 트래픽은 기본적으로 모두 허용되어있다.
# 22번 포트 인바운드 트래픽 열기
$ aws ec2 authorize-security-group-ingress \
--group-name HelloWorld \
--protocol tcp \
--port 22 \
--cidr 0.0.0.0/0
# 3000번 포트 인바운드 트래픽 열기
$ aws ec2 authorize-security-group-ingress \
--group-name HelloWorld \
--protocol tcp \
--port 3000 \
--cidr 0.0.0.0/0
# 보안 그룹 변경사항 확인
aws ec2 describe-security-groups \
--group-name HelloWorld \
--output text
2. SSH 키 생성하기
EC2 인스턴스에 접근하기 위한 키를 만든다.
필자는 devlos.pem이라는 키를 만들었다.
aws ec2 create-key-pair --key-name TestKeyPair --query 'KeyMaterial' --output text > devlos.pem
그다음 개인 키 파일을 읽기 전용 권한으로 설정한다.
chmod 400 ~/.ssh/devlos.pem
3. 인스턴스 생성
3.1. 인스턴스 이미지 찾기
다음의 명령어를 이용하여 이미지를 찾는다.
aws ec2 describe-images --filters "Name=description,Values=Amazon Linux AMI * x86_64 HVM GP2" --query 'Images[*].[CreationDate, Description, ImageId]' --output text | sort -k 1 | tail
3.2. 인스턴스 생성
$ aws ec2 run-instances \ INT ✘ 29s 11:49:19 PM ▓▒░
--instance-type t2.micro \
--key-name devlos \
--security-group-ids sg-0d493bcd4a7193e36 \
--image-id ami-863090e8
3.3. 인스턴스 정상 실행 확인
$ aws ec2 describe-instance-status --instance-ids i-058a6b6209646ceaa
InstanceState.Name이 "running" 상태이면 인스턴스가 준비된 것이다.
4. 인스턴스 접속
4.1. DNS 명 찾기
인스턴스에 SSH로 접속하기 위해서는 DNS 명을 찾아야한다.
aws ec2 describe-instances \
--instance-ids i-058a6b6209646ceaa \
--query "Reservations[*].Instances[*].PublicDnsName"
4.2. 인스턴스 접속
생성해놓은 키를 이용하여 인스턴스에 접속한다.
$ ssh -i ~/.ssh/devlos.pem ec2-user@ec2-3-34-46-249.ap-northeast-2.compute.amazonaws.com
5. NodeJS 설치 및 서버 실행
5.1. NodeJS 설치
# NodeJS 설치
$ sudo yum install --enablerepo=epel -y nodejs
# NodeJS 실행결과 확인
$ node -v
5.2. 서버 코드 작성
$ vi index.js
#### index.js 에 작성 ####
const http = require("http");
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello devlos~\n');
}).listen(3000);
console.log('Server running');
5.3 서버 실행
$ node index.js
ssh에서 접속했던 url을 이용하여 크롬에서 접속해 보면 다음과 같이 응답에 작성해둔 "Hello devlos~"라는 문구를 확인할 수 있다.
6. 코드를 서비스로 전환
5단계에서 진행한 node 서버는 ssh를 나가거나 프로세스 종료 시 꺼져버리게 된다.
upstart 구성을 추가하여 이 코드를 항상 실행돼 도독 변경한다.
# 환경설정 파일 생성
$ sudo vi /etc/init/helloworld.config
#### helloworld.conf 내부 ####
# 인스턴스의 네트워크가 준비되면 시작
Start on started elastic-network-interfaces
# 시스템이 다운되면 중지
Stop on shutdown
respawn script
exec su --session-command="/usr/bin/node /home/ec2-user/index.js" ec2-user
end script
이번 포스팅에서는 AWS ec2 서버를 생성해 보았다.
명령어로 ec2 서버를 생성하는 것이 어색하기도 하고, VPC에 대한 내용을 이해하기 위해 학창시절에 배웠던 CIDR와 IP Class 개념도 다시 한번 살펴보면서 시간이 좀 걸렸던 것 같다. 하지만 NodeJS 부분에 들어가면서부터는 JS를 만나 아주 신나게 작업을 했던 것 같다.
이제 명령어로도 ec2서버를 만들 수 있다 :)
(뿌듯 뿌듯)
다음 포스팅에는 클라우드 포메이션을 다룰 예정이다.
참고자료
[1] AWS를 통한 효과적인 데브옵스 구축 | 2020 | 요게쉬 라헤자.. | 링크
'클라우드 컴퓨팅 & NoSQL' 카테고리의 다른 글
[AWS] Command Line Interface(CLI) 설치 방법 (Mac) (0) | 2021.04.19 |
---|---|
도커, 쿠버네티스 Cheat Sheet (0) | 2021.04.11 |
DevOps란? (0) | 2021.04.06 |
컨테이너 오케스트레이션(Container Orchestration)이란? (0) | 2021.04.05 |
CI/CD 란? (2) | 2021.03.22 |