1. What's Amazon EC2?
E2C in AWS stands for Amazon Elastic Compute Cloud = Infrastructure as a Service
โถ EC2 is one of the most popular of AWS's offering
โถ EC2 is not a single service.
โถ mainly consists in the capability of :
- Renting virtual machines (EC2) ๊ฐ์๋จธ์ ์๋ ํ ์ ์๋๋ฐ ์ด๊ฑธ EC2 Instance ๋ผ๊ณ ํจ
- Storing data on virtual drives (EBS) ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ๋๋ผ์ด๋ธ or EBS Volume์ ์ ์ฅ ํ ์ ์๋ค
- Distrubuting load across machines (ELB) Elestic Load Balancer ๋ก ๋ก๋ ๋ถ์ฐ ๊ฐ๋ฅ
- Scaling the services using an auto-scaling group (ASG) ์คํ ์ค์ผ์ผ๋ง ๊ทธ๋ฃน(ASG)์ ํตํด์ ์๋น์ค ํ์ฅ ๊ฐ๋ฅ
Knowing EC2 is fundamental to understand how the Cloud works.
ํด๋ผ์ฐ๋ ํ์ํ ๋๋ง๋ค ์ธ์ ๋ ์ง ์ปดํจํ
์ ๋์ฌํ ์ ์๊ณ , EC2 ๊ฐ ๊ทธ ์์์ด๋ค.
์ฐ๋ฆฌ๊ฐ ์ํ๋ ๋๋ก ๊ฐ์ ๋จธ์ ์ ์ ํํด์ AWS์์ ๋น๋ฆด ์ ์๋ค -> ํด๋ผ์ฐ๋์ ํ
2. EC2 sizing & configuration options
EC2 ํฌ๊ธฐ ๋ฐ ๊ตฌ์ฑ ์ต์
โถ OS: Linux, Windows or Mac OS
โถ How much compute power & cores (CPU) - ์ปดํจํฐ ์ฑ๋ฅ์ด๋ ์ฝ์ด์ ์ (CPU์ ๊ฐ์)
โถ How much random-access memory (RAM)
โถ How much storage spaces:
- Network-attached (EBS & EFS) ๋คํธ์ํฌ๋ฅผ ํตํด ์ฐ๊ฒฐํ ์คํ ๋ฆฌ์ง
- hardware (EC2 Instance Store) ํ๋์จ์ด ์ฐ๊ฒฐ
โถ Network card: speed of the card, Public IP address ๋คํธ์ํฌ ์ข
๋ฅ
โถ Firewall rules: security group ๋ฐฉํ๋ฒฝ ๊ท์น(๋ณด์ ๊ทธ๋ฃน)
โถ Bootstrap script (configure at first laungh): EC2 User Data
3. EC2 User Data
โถ It's possible to bootstrap our instances u sing an EC2 User data script.
โถ bootstrapping means launching commands when a machine starts.
๋จธ์ ์ด ์๋๋ ๋ ๋ช
๋ น์ ์์ํ๋ ๊ฒ, ๋ถํ
์์
์ ์๋ํํ๊ธฐ ๋๋ฌธ์ ๋ถํธ์คํธ๋ํ
โถ That script is only run once at the instance first start
โถ EC2 user data is used to automate boot tasks such as:
๊ทธ๋ ๋ค๋ฉด ์ธ์คํดํธ๋ฅผ ๋ถํ
ํ ๋ ์๋ํํ๊ณ ์ถ์ ์์
๋ค์ ์ด๋ค๊ฒ ์์๊น?
- Installing updates
- Installing software
- Downloading common files from the internet
- Anything you can think of
โถ The EC2 User Data Script runs with the root user
โญ EC2 ์ฌ์ฉ์ ๋ฐ์ดํฐ ์คํฌ๋ฆฝํธ๋ ๋ฃจํธ ๊ณ์ ์์ ์คํ๋จ
โถ So any command you have will have sudo
โญ ๋ฐ๋ผ์ ๋ชจ๋ ๋ช
๋ น๋ฌธ์ sudo๋ก ์คํ๋จ
4. EC2 instance types: example
t2.micro is part of the AWS free tier (up to 750 hours per month)
ํ๋ฌ์ 750์๊ฐ๊น์ง ์ฌ์ฉ๊ฐ๋ฅํจ. ์ธ์คํดํธ๋ฅผ ํ ๋ฌ๋์ ๊ณ์ ์คํํด๋ ๋จ
5. ์ค์ต(Hands-On): Launching an EC2 Instance running Lunix
5-1. ๊ฐ์ ์๋ฒ์ธ ์ฒซ ๋ฒ์ฌ EC2 ์ธ์คํด์ค ์์ฑํด๋ณด์
5-2. user data๋ฅผ ์ด์ฉํด์ EC2 ์ธ์คํด์ค์์ ์ง์ ์น ์๋ฒ ์์ฑํ๊ธฐ
5-3. ์ธ์คํด์ค๋ฅผ ์์, ์ค์ง, ์ข ๋ฃํ๋ ๋ฐฉ๋ฒ
5-1. ์ฒซ๋ฒ์งธ EC2 Instance ์์ฑํ๊ธฐ
EC2 Dashboard > (Side bar) Instances > Launch Instances
โถ Name and tags
- tags are optional
โถ Application and OS Images (Amazon Machine Image)
- ์ธ์คํด์ค ์ด์์ฒด์ ์ ํ
- ์) Amazon Linux aws
- Quick Start ์์ ์ ํํ๋ฉด ์ฌ์
- ์์ ๋ง์ AMI ์์ฑํ๊ณ ์ถ์ผ๋ฉด Browse more AMIs
โถ Instance type
- CPU ๊ฐ์๋ ๋ฉ๋ชจ๋ฆฌ ์ฉ๋, ๋น์ฉ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค.
- ์) t2.micro
โถ Key pair (login)
- ์ธ์คํด์ค์ ์ ๊ทผํ๊ธฐ ์ํด SSH ์ ํธ๋ฆฌํฐ ์ฌ์ฉํ ๊ฒฝ์ฐ์๋ ํ์
- Create key pair์์ Private key file format์ Mac/Linux/Window10์ด์์ .pem
- Window7์ด๋ Window8์ .ppk + puTTY
โถ Network settings
- ์์ฑ๋๋ ์ฒซ ๋ฒ์งธ ๋ณด์ ๊ทธ๋ฃน์ launch-wizard-1 ์ด๊ณ ์ฝ์์ ์ํด ์ง์ ์์ฑ๋๋ค.
- ๊ท์น ์ ์ ๊ฐ๋ฅ
- Allow SSH traffic form: ๋ชจ๋ ๊ณณ์์ ์ค๋ SSH ํธ๋ํฝ ํ์ฉ
- Allow HTTP traffic from the internet: ์ธํฐ๋ท์์ ์ค๋ HTTP ํธ๋ํฝ๋ ํ์ฉ
โถ Configure storage
- Default: 8GIB gp2 Root volume
- Free tier eligible customers can get up to 30GB of EBS General Purpose(SSD) or Magnetic storage.
โญ ์ฃผ์ ํ ์
Delete on termination์ Yes๋ก ์ฒดํฌํ๋ฉด, EC2 ์ธ์คํดํธ๋ฅผ ์ข ๋ฃํ ๋ ๊ทธ ๋ณผ๋ฅจ๋ ์ญ์ ๋๋ค๋ ์๋ฏธ์ด๋ค.
5-2. user data๋ฅผ ์ด์ฉํด์ EC2 ์ธ์คํด์ค์์ ์ง์ ์น ์๋ฒ ์์ฑํ๊ธฐ
โถ Advanced details
- User data๋ ์คํฌ๋ฆฝํธ ๋ช
๋ น์ EC2 ์ธ์คํดํธ์ ์ ๊ณตํ๋ ๊ฒ์ธ๋ฐ ์ธ์คํด์ค๋ฅผ ์ฒ์ ์์ฑํ ๋๋ง ์คํํ๋ค.
์์ ์คํฌ๋ฆฝํธ
#!/bin/bash
# ์ด ์คํฌ๋ฆฝํธ๋ EC2 ์ธ์คํด์ค ์์ฑ ์ '์ฌ์ฉ์ ๋ฐ์ดํฐ(User Data)'๋ก ์คํ๋ฉ๋๋ค.
# ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ EC2 ์ธ์คํด์ค ์์ ์ ์๋์ผ๋ก ์คํ๋๋ฉฐ ์๋ฒ๋ฅผ ์ด๊ธฐํํ๊ฑฐ๋ ์ํํธ์จ์ด๋ฅผ ์ค์นํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
# Use this for your user data (script from top to bottom)
# ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ก ์ฌ์ฉํ ์คํฌ๋ฆฝํธ. ์์์ ์๋๋ก ์์ฐจ์ ์ผ๋ก ์คํ๋ฉ๋๋ค.
# install httpd (Linux 2 version)
# Amazon Linux 2์์ Apache HTTP ์๋ฒ(httpd)๋ฅผ ์ค์นํ๋ ์คํฌ๋ฆฝํธ์
๋๋ค.
yum update -y
# ํจํค์ง ๊ด๋ฆฌ์(yum)๋ฅผ ์ฌ์ฉํ์ฌ ์์คํ
์ ๋ชจ๋ ํจํค์ง๋ฅผ ์ต์ ๋ฒ์ ์ผ๋ก ์
๋ฐ์ดํธํฉ๋๋ค.
# `-y` ์ต์
์ ๋ชจ๋ ์ง๋ฌธ์ ์๋์ผ๋ก "Yes"๋ผ๊ณ ์๋ตํ์ฌ ์
๋ฐ์ดํธ๋ฅผ ์๋์ผ๋ก ์งํํฉ๋๋ค.
yum install -y httpd
# Apache HTTP ์๋ฒ(httpd)๋ฅผ ์ค์นํฉ๋๋ค. `-y` ์ต์
์ ์ค์น ํ์ธ์ ์๋์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค.
systemctl start httpd
# Apache HTTP ์๋ฒ๋ฅผ ์์ํฉ๋๋ค.
systemctl enable httpd
# Apache HTTP ์๋ฒ๊ฐ ์์คํ
๋ถํ
์ ์๋์ผ๋ก ์์๋๋๋ก ์ค์ ํฉ๋๋ค.
echo "<h1>Hello World from $(hostname -f)</h1>" > /var/www/html/index.html
# EC2 ์ธ์คํด์ค์ ํธ์คํธ ์ด๋ฆ(ํ๋ฆฌ ํ๋ฆฌํ์ด๋ ๋๋ฉ์ธ ์ด๋ฆ, FQDN)์ ํฌํจํ์ฌ HTML ํ์ด์ง๋ฅผ ์์ฑํฉ๋๋ค.
# ์์ฑ๋ HTML ํ์ผ์ `/var/www/html/index.html`์ ์ ์ฅ๋๋ฉฐ, ์ด๋ Apache์ ๊ธฐ๋ณธ ๋ฌธ์ ๋ฃจํธ ๋๋ ํฐ๋ฆฌ์
๋๋ค.
# ๊ฒฐ๊ณผ์ ์ผ๋ก, ์น ๋ธ๋ผ์ฐ์ ์์ ์๋ฒ์ IP ์ฃผ์๋ฅผ ์
๋ ฅํ๋ฉด "Hello World from [hostname]" ๋ฉ์์ง๊ฐ ํ์๋ฉ๋๋ค.
โถ Summary
- ์ฌ๊ธฐ์ ๋ชจ๋ ๊ฑธ ๊ฒํ ํ ์ ์๋ค.
- ๋ฐ์นํ๊ณ ์ ํ๋ ์ธ์คํด์ค๋ฅผ ๊ฒํ ํ ํ Launch instance ๋ฒํผ ํด๋ฆญํ๋ฉด ์ธ์คํด์ค ์์ฑ์ด ์๋ฃ ๋๋ค.
์๋ก๊ณ ์นจ ํ๋ฉด ์ธ์คํด์ค๊ฐ ์์ฑ๋จ!
์ฒ์์๋ Instance state ๊ฐ pending ์ผ ์ ์๋๋ฐ 10์ด์ ๋ ๊ธฐ๋ค๋ฆฌ๋ฉด Running ์ผ๋ก ๋ฐ๋๋ค.
์ธ์คํด์ค Details
- Instance ID: ๊ณ ์ ์๋ณ์
- Public IPv4 address: ๊ณต์ฉIP, EC2 ์ธ์คํด์ค ์ ๊ทผ ์ํด ์ฌ์ฉํ ์ฃผ์
- Private IPv4 address: ์ฌ์ค IP์ฃผ์๋ ๋คํธ์ํฌ์์ ๋ด๋ถ์ ์ผ๋ก ์ธ์คํด์ค์ ์ ๊ทผํ ๋ ์ฌ์ฉ
โญ ์์ฑํ EC2 ์ธ์คํด์ค๋ก ์น ์๋ฒ๊ตฌ๋ํ๊ธฐ
๋ธ๋ผ์ฐ์ ์ ์ฃผ์์ฐฝ์ ์๋ ๋ด์ฉ์ ์ ๋ ฅํ๋ฉด ์น์๋ฒ๊ฐ ๊ตฌ๋๋๋ค.
http://๊ณต์ฉIP์ฃผ์
http://13.211.78.75/
๊ทธ๋ฅ IP์ฃผ์๋ง ๋ณต์ฌ ๋ถ์ฌ๋ฃ๊ธฐ ํ๋ฉด ์ ๋ ์ ์์
๊ธฐ๋ณธ์ ์ผ๋ก ๋ธ๋ผ์ฐ์ ์์๋ https:// ๊ฐ ํธ์ถ๋๋ฏ๋ก EC2 ์ธ์คํด์ค ์์ฑํ ๋ https ์ต์
์ ์ฒดํฌ ์ํ๋ค๋ฉด
https:// ๋ก๋ ์๋ ํ์ง ์๋๋ค. ๊ทธ๋์ ๋ฐ๋์ http:// ๋ฅผ ์จ ์ฃผ๊ณ ๋ค์ ๊ณต์ฉIP์ฃผ์๋ฅผ ๋ถ์ฌ๋ฃ๊ธฐ ํด ์ฃผ์.๊ทธ๋ผ ์๋์ ๊ฐ์ด ์นํ๋ฉด์ ๊ธ์๊ฐ ์ถ๋ ฅ๋๋ค.
ํ๋ฉด์ `Hello World from ip-172-31-7-68.ap-southeast-2.compute.internal` ๋ฌธ์์ด์ด ์ถ๋ ฅ๋๋ ์ด์ ๋ ์๊น์ ์ ์์ฑํ user data script ๋๋ฌธ์ด๋ค. ์ด ์คํฌ๋ฆฝํธ ์ฝ๋์ ํ๋ฆ์ ์ดํด ๋ณด์.
#!/bin/bash
yum update -y
yum install -y httpd
systemctl start httpd
systemctl enable httpd
echo "<h1>Hello World from $(hostname -f)</h1>" > /var/www/html/index.html
1. Apache HTTP ์๋ฒ ์ค์น ๋ฐ ์คํ
์คํฌ๋ฆฝํธ์์ yum install -y httpd ๋ช
๋ น์ผ๋ก Apache HTTP ์๋ฒ๊ฐ ์ค์น๋๊ณ ,
systemctl start httpd๋ก ์๋ฒ๊ฐ ์คํ๋๋ค.
systemctl enable httpd๋ก ์๋ฒ๊ฐ ๋ถํ
์ ์๋์ผ๋ก ์คํ๋๋๋ก ์ค์ ๋๋ค.
2. HTML ํ์ผ ์ ๊ณต
/var/www/html/index.html์ ์์ฑ๋ Hello World HTML ํ์ด์ง๊ฐ Apache ์๋ฒ๋ฅผ ํตํด ์ ๊ณต๋๋ค.
์ด ๊ฒฝ๋ก๋ Apache์ ๊ธฐ๋ณธ ๋ฌธ์ ๋ฃจํธ(๋๋ ํฐ๋ฆฌ)์ด๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์๊ฐ EC2 ์ธ์คํด์ค์ ๊ณต์ฉ IP ์ฃผ์์ ์ ์ํ๋ฉด ์ด ๊ฒฝ๋ก์ ์ ์ฅ๋ ํ์ผ์ ๋ธ๋ผ์ฐ์ ๋ก ์ ๋ฌํ๋ค.
3. ๊ฒฐ๊ณผํ๋ฉด
์ฌ์ฉ์๊ฐ ๋ธ๋ผ์ฐ์ ์์ http://<๊ณต์ฉIP>๋ฅผ ์
๋ ฅํ๋ฉด EC2 ์ธ์คํด์ค์ ์ค์น๋ Apache ์๋ฒ๊ฐ ์์ฒญ์ ๋ฐ๊ณ ,
/var/www/html/index.html ํ์ผ์ ๋ด์ฉ์ ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ )๋ก ๋ฐํํ๋ค.
๊ทธ๋์ ์นํ์ด์ง์๋ ์๋ ํ๊ทธ๊ฐ ์ถ๋ ฅ๋๋ค.
โญ ํธ์คํธ์ด๋ฆ๊ณผ ์ฌ์คIP์ ๊ด๊ณ
ip์ดํ `ip-172-31-7-68.ap-southeast-2.compute.internal`๋ EC2 ์ธ์คํด์ค์ ํธ์คํธ ์ด๋ฆ(Host Name)์ด๋ค.
์ด๋ฅผ ์ดํดํ๋ ค๋ฉด ํธ์คํธ ์ด๋ฆ๊ณผ ์ฌ์ค IP์ ๊ด๊ณ๋ฅผ ์ดํด๋ด์ผ ํ๋ค.
์ฌ๊ธฐ์ <ํธ์คํธ ์ด๋ฆ>์ $(hostname -f) ๋ช
๋ น์ด๋ก ์์ฑ๋ EC2 ์ธ์คํด์ค์ ๋๋ฉ์ธ ์ด๋ฆ์ด๋ค.
<h1>Hello World from <ํธ์คํธ ์ด๋ฆ></h1>
AWS์์ EC2 ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ฉด, ๊ฐ ์ธ์คํด์ค๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ด๋ถ ๋คํธ์ํฌ(ํ๋ผ์ด๋น ๋คํธ์ํฌ)์์ ์ฌ์ฉ๋๋ ์ฌ์ค IP ์ฃผ์๋ฅผ ํ ๋น๋ฐ๋๋ค. AWS๋ ์ด ์ฌ์ค IP๋ฅผ ๊ธฐ๋ฐ์ผ๋ก EC2 ์ธ์คํด์ค์ ํธ์คํธ ์ด๋ฆ์ ์์ฑํ๋ค.
ํ์: ip-<์ฌ์ค-IP>.<๋ฆฌ์ >.compute.internal
์: ip-172-31-7-68.ap-southeast-2.compute.internal
- 172.31.7.68: ์ฌ์ค IP ์ฃผ์
- ap-southeast-2: EC2 ์ธ์คํด์ค๊ฐ ๋ฐฐํฌ๋ AWS ๋ฆฌ์
- ์คํฌ๋ฆฝํธ์์ $(hostname -f) ๋ช
๋ น์ ์ธ์คํด์ค์ ์ ์ฒด ํธ์คํธ ์ด๋ฆ(Fully Qualified Domain Name, FQDN)์ ๋ฐํํ๋ค.
์์ฝํ์๋ฉด ์๋ ๋ช
๋ น์ด๊ฐ ํ๋จ์ html ํ์ผ์ ์์ฑํด์ ๋ธ๋ผ์ฐ์ ์ ๋์ฐ๋ ๊ฒ์ด๋ค.
echo "<h1>Hello World from $(hostname -f)</h1>" > /var/www/html/index.html
<h1>Hello World from ip-172-31-7-68.ap-southeast-2.compute.internal</h1>
5-3. ์ธ์คํด์ค๋ฅผ ์์, ์ค์ง, ์ข ๋ฃํ๋ ๋ฐฉ๋ฒ
- ์ธ์คํด์ค๋ฅผ ์ผ ๋๋ ๋์์ ์์น์ ์ผ๋ก ๋น์ฉ์ด ๋ถ๊ณผ๋๋ค.
- ๊บผ ๋์์ผ ๋น์ฉ์ด ๋ถ๊ณผ๋์ง ์์ผ๋ ์ ๋์.
- ๊ทธ๋ฆฌ๊ณ ์ธ์คํด์ค์๋ volume ์ด ์ฐ๊ฒฐ๋์ด ์์ผ๋ ์ธ์คํด์ค๋ฅผ ๊บผ๋ ์ธ์คํด์ค๋ ์ ์ง๊ฐ ๋๋ค.
์ธ์คํด์ค๋ฅผ ์ค์งํ๊ณ ์ฌ์์ํ๋ฉด AWS์์ ๊ณต์ฉ IPv4๋ฅผ ๋ณ๊ฒฝํ๋ค.
์ฆ, ์ฌ์ค IP๋ ํญ์ ๊ฐ์ ์ํ๋ก ์ ์ง๋์ง๋ง ๊ณต์ฉ IPv4๋ ๋ณ๊ฒฝ ๋ ์ ์๋ค.
6. EC2 Instance Types
6-1. ์๋ง์กด AWS ๊ณตํ์์ ์ธ์คํด์ค ์ ํ ํ์ธ
6-2. ์ ์ฒด EC2 ์ธ์คํด์ค ๋น๊ต ์ฌ์ดํธ(์ถ์ฒ)
์ฌ๊ธฐ ๊ฐ๋ฉด AWS์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ ์ธ์คํด์ค ๋ชฉ๋ก์ด ์ ๊ณต๋จ
https://instances.vantage.sh/
6-3. ์ธ์คํด์ค ๋ค์ด๋ฐ ๊ตฌ์กฐ
Instance types
m5.2xlarge
- m: instance class
- 5: generation (AWS improves them over time)
- 2xlarge: size within the instance class