AWS Elastic Compute Cloud (EC2)
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 옵션.
다음과 같은 특징들이 있다.
- Flexible: 미리 돈을 지불하지 않으며, 장기간 사용해야하는 등의 제약이 없음.
- Short-term: short-term, spiky, unpredictable application 에 적절함.
- Testing the water: 만들어진 application 을 처음 테스트하기에 적절하다.
Reserved Instances
1년 혹은 3년 동안 사용할 것이라고 예약하고 쓰는 EC2.
때문에 다른 EC2 에 비해 가격이 저렴하다.
다음과 같은 특징들이 있다.
- Predictable usage: 안정적이고 예측 가능한 application 에 적절함.
- Specific capacity requirements: 예약된 capacity 가 필요한 application 에 적절함.
- Pay up front: 미리 돈을 지불해 추후의 계산 비용을 줄일 수 있음.
- 다음과 같은 종류의 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
다음 단계들로 이루어진다.
- Amazone Machine Image (AMI) 선택
- Instance Type 선택
- Configure instance details
- Storage 추가하기
- Tag 추가하기: 원하는 만큼 tag key-value 를 추가할 수 있다.
- Configure security group: security group 을 설정해서 접근을 제한할 수 있다. 같은 security group 을 사용한 EC2 는 같은 접근성을 가지게 된다.
- Review instance launch: 리뷰가 끝나면 key pair 를 생성/선택할 수 있다.
AWS Command line
GUI 가 아닌 command line 으로 AWS 와 통신하는 방법.
ex) aws s3 ls : s3 의 모든 bucket 목록 보기
commandline 을 통해서 진행할 내용들:
- Launch an EC2 Instance
- Create an IAM user
- 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 을 부여하는 과정이다.
- Create an IAM role: ensure it has S3 access
- Create an EC2 instance: attach the role we just created
- Create S3 bucket: create a buckte in S3
- 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 는 다음 세 가지가 있다.
- Elastic Network Interface (ENI)
- Enhanced Networking (EN)
- 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 이 존재한다.
- Clustered placement groups
- Spread placement groups
- 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 에 대해 공부한 내용을 정리해봤습니다.
그럼 다음 시간에 만나요!