AWS EC2 에 대해 공부하고 정리한 내용입니다.

  • EC2 란 무엇인가?
  • EC2 pricing options
  • Launching an EC2 instance
  • AWS Command line
  • IAM role
  • Security groups & Bootstrap scripts
  • EC2 Metadata and User Data
  • Networking with EC2
  • Optimizing with EC2 placement groups

EC2 란 무엇인가?

Elastic Compute Cloud 의 약자로, Amazon 에서 제공하는 secure, resizable compute capacity in the cloud 이다.

EC2 pricing options

Amazon 에서는 다음 네 가지 옵션의 EC2 를 제공하는데, 필요에 따라 적절한 항목을 선택할 수 있다.

  • On-demand
  • Reserved instances
  • Spot instances
  • Dedicated hosts

On-demand

사용하는 만큼 가격을 지불하는 가장 일반적인 형태의 EC2 옵션.
다음과 같은 특징들이 있다.

  1. Flexible: 미리 돈을 지불하지 않으며, 장기간 사용해야하는 등의 제약이 없음.
  2. Short-term: short-term, spiky, unpredictable application 에 적절함.
  3. Testing the water: 만들어진 application 을 처음 테스트하기에 적절하다.

Reserved Instances

1년 혹은 3년 동안 사용할 것이라고 예약하고 쓰는 EC2.
때문에 다른 EC2 에 비해 가격이 저렴하다.
다음과 같은 특징들이 있다.

  1. Predictable usage: 안정적이고 예측 가능한 application 에 적절함.
  2. Specific capacity requirements: 예약된 capacity 가 필요한 application 에 적절함.
  3. Pay up front: 미리 돈을 지불해 추후의 계산 비용을 줄일 수 있음.
  4. 다음과 같은 종류의 RI 중 하나를 선택할 수 있다.
    • Standard RIs: on-demand 보다 72% 저렴한 가격에 사용 가능.
    • Convertible RIs: 사용하던 중에 다른 종류의 EC2 로 바꿀 수 있도록 해주는 옵션.
    • Scheduled RIs: 사용량을 시간에 따라 예측할 수 있을 때 적절한 옵션. ex) 아침 9시에 사용량이 많은 경우 이때에만 capacity 를 늘릴 수 있도록 해준다.

Spot instances

자원 사용 가격이 시간에 따라 바뀌는데, 자신이 지정한 특정 가격 이하로 내려갔을 때에만 사용할 수 있도록 설정한 EC2.
이에 따라 instance 가격이 높아지면 사용하던 instance 를 쓸 수 없게 된다.
start-end time 이 유연한 application 의 경우에 적절하다.
예를 들어 사용량이 적은 밤중에 많은 계산을 해야하는 경우, 밤중에는 available capacity 가 많으므로 가격이 내려가기 때문에 해당 가격이 될 때 EC2 로 계산하도록 설정할 수 있다.
가격이 올라가면 해당 EC2 를 잃게 되므로, 안정적인 서비스를 필요로 하는 웹사이트에는 적절하지 않다.
Spot instances 는 다음 task 를 할 때 유용하다:

  • Big data and analytics
  • Containerized workloads
  • CI/CD and testing
  • Image and media rendering
  • High-performance computing

Spot blocks
지정한 최대 가격보다 spot prices 가 높아졌을 때 spot instance 가 종료되는 것을 막아주는 것.
현재 1~6시간 동안 이를 막아줄 수 있다.

Spot Fleets
A collection of Spot Instances and (optionally) On-demand instances.
고객의 Spot Fleet request 에 설정되어 있는 target capacity 에 맞춘 spot instance + on-demand instance 를 구동하려 시도한다.
현재 spot price 보다 request 에 적힌 maximum price 를 넘어가면 해당 요청이 수행된다.
Spot fleet 은 또한 spot instances 가 방해받았을 때도 target capacity fleet 을 유지하려 한다.

Dedicated hosts

AWS 에서 사용하는 하위 hardware 는 고객들간에 공유되어 있다. (multi-tenant virtualization)
고객끼리 서로의 EC2 를 침범할 수는 없지만, 같은 RAM, 같은 processor, 같은 가상 hard disk 를 공유하고 있는 것이다.
그런데 banking, government regulation 과 같은 서비스는 다른 고객이 데이터에 접근할 수도 있는 위험을 배제해야 한다.
이런 경우 dedicated hosts 를 사용해 위험을 배제할 수 있다.
Licensing 을 해야하는 경우 등에 유용하다.
On-demand 의 70% 가격으로 사용 가능하며, 더 오랜 기간 사용하고자 할 때는 할인률이 높아진다.


Launching an EC2 instance

다음 단계들로 이루어진다.

  1. Amazone Machine Image (AMI) 선택
  2. Instance Type 선택
  3. Configure instance details
  4. Storage 추가하기
  5. Tag 추가하기: 원하는 만큼 tag key-value 를 추가할 수 있다.
  6. Configure security group: security group 을 설정해서 접근을 제한할 수 있다. 같은 security group 을 사용한 EC2 는 같은 접근성을 가지게 된다.
  7. Review instance launch: 리뷰가 끝나면 key pair 를 생성/선택할 수 있다.

AWS Command line

GUI 가 아닌 command line 으로 AWS 와 통신하는 방법.
ex) aws s3 ls : s3 의 모든 bucket 목록 보기

commandline 을 통해서 진행할 내용들:

  1. Launch an EC2 Instance
  2. Create an IAM user
  3. Configure the AWS CLI

접근 방법은 다음과 같다

ssh ec2-user@xxx.xxx.xxx.xxx -i xxxx.pem
aws configure # AWS console -> security 에서 IAM 을 생성해야 함.
aws s3 ls # configure 가 선행되어야 함.

IAM role

A role is an identity you can create in IAM that has specific permissions.
role 은 AWS identity 로써 AWS 에서 할 수 있는 일들에 대한 permission policies 를 가진다는 점에서 user 와 비슷하다.
그러나 user 와 달리 role 은 ‘자원’ 에 부여되는 권한이라는 차이점이 있다.
role 은 일시적인 것이며, 특정 role 을 가정 (assume) 하는 경우 해당 role session 에 대한 일시적인 security credential 을 제공한다.

아래 예시는 특정 EC2 instance 에 대해 S3 권한을 가진 role 을 부여하는 과정이다.

  1. Create an IAM role: ensure it has S3 access
  2. Create an EC2 instance: attach the role we just created
  3. Create S3 bucket: create a buckte in S3
  4. Access S3: Try to access s3 from our EC2 instance
-
AWS console 에서 Security, Identity, & Compliance 에서 IAM 을 선택하고,
-
Dashboard 에서 Users 를 선택한다.
-
Create role 을 사용해 새로운 role 을 만들어낸다.
-
entity 를 선택한다. 이 때 자주 사용되는 항목들 중 EC2 가 있으니 이를 사용할 수 있다.
-
이후 Permission policies 를 선택한다. 항목이 너무 많으니 검색창에 원하는 서비스를 검색할 수 있다. 여기서는 S3 full access 선택.
-
이후 원하는 Role name 을 지정하고 Role 생성을 마친다.
-
이후 EC2 를 생성하는 과정. 원래 default 로 설정하던 부분 중 “IAM role” 에서 방금 만든 role 을 선택해주면 된다.

Security groups & Bootstrap scripts

Security groups 은 EC2 instance 를 위한 가상의 방화벽이다.
기본적으로 모든 작업이 막혀 있다.
접속을 가능하게 하려면 각 포트에 대해 0.0.0.0/0 등으로 허용해주면 된다.

Bootstrap script

bootstrap script 란 instance 가 처음 작동할 때 실행되는 script 를 말한다.
이는 root level 로 작동한다.
부팅시간을 늘릴 수도 있지만, application 설치를 자동으로 할 수 있다는 장점이 있다.

예시:

#!/bin/bash
yum install httpd -y # installs apache
yum service httpd start # starts apache

아래의 예시는 security group 및 bootstrap script 를 활용해 EC2 instance 가 자동으로 web site 를 만들고 접근 가능하도록 하는 과정을 보여준다.

-
EC2 생성 과정에서, configure 화면 아래쪽 User data 에 원하는 bootstrap script 를 작성한다.
-
이후 Step 6 security group 설정에서 원하는 종류의 type 을 선택한다. 이러면 port 는 자동으로 설정된다.
-
위의 두 가지 설정을 마치고 생성된 EC2 의 IP 로 접근하면, 위와 같은 웹페이지가 자동으로 만들어졌으며 이를 접근 가능하다는 것을 알 수 있다.

EC2 Metadata and User Data

EC2 Metadata:
simply data about the EC2 instance.
(private IP address, public IP address, hostname, security groups, etc.)

다음 명령어를 통해 EC2 instance 의 metadata 를 받아올 수 있다:

$ curl http://169.254.169.254/latest/meta-data/
ami-id
ami-launch-index
ami-manifest-path
block-device-mapping/
...
$ curl http://169.254.169.254/latest/meta-data/local-ipv4 > myIP.txt # metadata 중 IPv4 adress 를 가져오도로 ㄱ한다.

같은 방식으로 user data 도 가져올 수 있다. 그러면 작성한 bootstrap script 를 볼 수 있다.

$ curl http://169.254.169.254/latest/user-data/
#!/bin/bash
yum update -y
yum install httpd -y
service httpd start
...

Networking with EC2

EC2 에 붙일 수 있는 networking cards 는 다음 세 가지가 있다.

  1. Elastic Network Interface (ENI)
  2. Enhanced Networking (EN)
  3. Elastic Fabric Adapter (EFA)

-

ENI: a virtual network card

  • Private IPv4 Addresses
  • Public IPv4 Addresses
  • Many IPv6 Addresses
  • MAC Address
  • 1 or more security groups

Common ENI use cases:

  • Create a management network
  • Use network and security appliances in your VPC
  • Create dual-homed instances with workloads/roles on distinct subnets
  • Create a low-budget, high-availability solutions

EN: for high-performance networking

  • higher bandwidths
  • higher packet per seconds (PPS) performance
  • consistently lower inter-instance latencies

Instance type 에 따라 다음 방법을 사용해 EN 을 활용할 수 있다:

  • Elastic Network Adapter (ENA): supports network speeds of up to 100 Gbps for supported instance types
  • Intel 82599 virtual function (VF) interface: Supports network speeds of up to 10 Gbps for supported instance types. Typically used on older instances.

EFA: Elastic fabric adapter

High performance computing (HPC) 및 machine learning application 을 가속하기 위해 EC2 에 붙일 수 있는 장치이다.
TCP transport 에 비해 lower & more consistent latency 및 higher throughput 을 제공한다.


Optimizing with EC2 placement groups

다음 세 가지 placement groups 이 존재한다.

  1. Clustered placement groups
  2. Spread placement groups
  3. Partitioned placement groups

Cluster placement groups

  • Grouping of instances within a single availability zone.
  • Recommended for apps that need low network latency, high network throughput, or both.
  • Only certain instance types can be launched into a cluster placement groups.

Spread placement groups

  • A group of instances that are each placed on distinct underlying hardware.
  • Recommended for apps that have a small number of critical instances that should be kept separate from each other.

Partitioned placement groups

  • Each partition placement group has its own set of racks.
  • Each rack has its own network and power source.
  • Allows isolation of the impact of hardware failure within your applications.

알아둬야 할 사항들:

  • cluster placement group 은 여러 availability zone 에 걸쳐있을 수 없지만, spread placement group 과 partition placement group 은 가능하다.
  • 특정 종류의 instance 만이 placement group 으로 실행 가능하다 (compute optimized, GPU, memory optimized, storage optimized)
  • AWS recommends homogenous instances within cluster placement groups.
  • Placement groups 는 합칠 수 없다.
  • 이미 존재하는 instance 를 특정 placement group 으로 옮길 수 있다.

오늘은 EC2 에 대해 공부한 내용을 정리해봤습니다.
그럼 다음 시간에 만나요!