일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Vision
- EC2
- JavaScript
- CVAT
- Kafka
- OS
- Packet
- zookeeper
- Python
- AWS
- aws s3
- grafana
- ip
- Operating System
- CSV
- Spring
- kubeadm
- log
- airflow
- kubectl
- jvm
- MAC address
- helm
- tcp
- docker
- Trino
- java
- kubernetes
- Network
- PostgreSQL
- Today
- Total
JUST WRITE
[AWS] 비용 절감을 위한 EC2 Scheduling 본문
비용 절감을 위한 EC2 Scheduling
AWS에서 가장 많이 사용하는 것이 EC2입니다.
EC2는 기본적으로 사용하는 시간에 따라 비용을 부과합니다.
사용할 시간에만 사용하고 그 외 시간에는 중지하는 게 좋습니다.
비용 절감을 위해 EC2 인스턴스 Scheduling은 필수입니다.
이번 포스팅에서는 자동으로 EC2 인스턴스를 시작/중지할 수 있도록 Scheduling 하는 방법을 소개합니다.
IAM 설정
EC2 Scheduling에서 먼저 해야할 것은 IAM 설정입니다.
EC2를 시작하고 중지할 수 있는 권한을 만들어 AWS Lambda에서 EC2를 제어할 수 있게 해줘야 합니다.
IAM에서 역할을 생성합니다.
Lambda을 통해서 EC2를 시작/중지할 것이기 때문에 사용 사례를 Lambda로 선택합니다.
권한을 따로 추가하지 않고 역할명을 짓고 생성합니다.
생성한 역할에서 인라인 정책을 생성합니다.
JSON Tab에서 아래 내용을 입력한 뒤 인라인 정책을 생성합니다.
CloudWatch에서 Log를 확인할 수 있는 권한과 EC2 인스턴스를 시작하고 중지할 수 있는 권한입니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*"
},
{
"Sid": "StartStopAllResource",
"Action": [
"ec2:DescribeInstances",
"ec2:StartInstances",
"ec2:StopInstances"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
역할에 정책을 통해 권한까지 부여하면 IAM 설정은 완료됩니다.
Lambda 생성
IAM 설정이 완료되면 EC2를 시작하고 중지할 Lambda를 생성합니다.
Python 코드를 통해 EC2를 시작/중지합니다.
그리고 위에서 만든 IAM 역할을 사용합니다.
Lambda를 생성한 후에 아래 Python 코드를 넣어줍니다.
EC2 인스턴스 중에 [AutoSchedulig : True]라는 Tag를 가진 인스턴스를 시작하는 코드입니다.
Scheduling이 필요한 인스턴스를 컨트롤할 수 있게 Tag를 통해서 관리하였습니다.
import boto3
region_name = 'ap-northeast-2'
instances = []
ec2 = boto3.client('ec2', region_name=region_name)
response = ec2.describe_instances(
Filters=[{
'Name':'tag:AutoScheduling',
'Values': ['True']
}]
)
for reservation in (response["Reservations"]):
for instance in reservation["Instances"]:
instances.append(instance["InstanceId"])
def lambda_handler(event, context):
ec2.start_instances(InstanceIds=instances)
print(f'start instances: {instances}')
EC2를 시작하는 Lambda를 생성하고 같은 방식으로 중지하는 Lambda도 생성합니다.
EventBridge 설정
EC2를 시작하고 중지하는 Lambda를 생성하였으면 원하는 시간에 Lambda를 자동으로 실행해야 합니다.
자동으로 Event를 실행할 수 있도록 하는 것이 EventBridge입니다.
EventBridge를 통해 규칙을 생성하고 해당 규칙을 Lambda에 적용하면 규칙대로 실행이 됩니다.
규칙 유형이 일정인 규칙을 생성합니다.
Cron 식을 통하여 일정을 설정할 수 있습니다.
UTC 기준으로 세팅하므로 [현지시간대]로 변경하여 헷갈리지 않게 설정하도록 합니다.
마지막으로 해당 규칙을 AWS 어떤 리소스에 적용할 것인지 세팅합니다.
위에서 생성한 Lambda에 적용하도록 세팅합니다.
EC2 시작하는 규칙을 생성하면 종료 일정에 맞는 규칙 생성 후 해당 Lambda에 적용해 줍니다.
[참고사이트]
'Cloud' 카테고리의 다른 글
credentials 설정 안해도 되네?! - AWS EC2 IAM 연결 (0) | 2023.08.03 |
---|---|
늘렸는데 늘어나지 않았습니다?! - AWS EBS 용량 늘리기 (0) | 2023.08.01 |
따릉이 대여소 정보 Dashboard 구성(5) - Parquet 형식으로 Data 변환 (0) | 2022.03.02 |
따릉이 대여소 정보 Dashboard 구성(4) - Grafana로 Dashboard 구성 (0) | 2022.02.23 |
따릉이 대여소 정보 Dashboard 구성(3) - Redshift Table Data 적재 (0) | 2022.02.19 |