JUST WRITE

[AWS] 비용 절감을 위한 EC2 Scheduling 본문

Cloud

[AWS] 비용 절감을 위한 EC2 Scheduling

천재보단범재 2023. 3. 17. 17:44

비용 절감을 위한 EC2 Schedulig

비용 절감을 위한 EC2 Scheduling

AWS에서 가장 많이 사용하는 것이 EC2입니다.

EC2는 기본적으로 사용하는 시간에 따라 비용을 부과합니다.

AWS EC2 온디멘드 요금

사용할 시간에만 사용하고 그 외 시간에는 중지하는 게 좋습니다.

비용 절감을 위해 EC2 인스턴스 Scheduling은 필수입니다.

이번 포스팅에서는 자동으로 EC2 인스턴스를 시작/중지할 수 있도록 Scheduling 하는 방법을 소개합니다.

IAM 설정

EC2 Scheduling에서 먼저 해야할 것은 IAM 설정입니다.

EC2를 시작하고 중지할 수 있는 권한을 만들어 AWS Lambda에서 EC2를 제어할 수 있게 해줘야 합니다.

IAM에서 역할을 생성합니다.

AWS 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 세팅(1)

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에 적용하면 규칙대로 실행이 됩니다.

규칙 유형이 일정인 규칙을 생성합니다.

EventBridge 규칙 생성(1)

Cron 식을 통하여 일정을 설정할 수 있습니다.

UTC 기준으로 세팅하므로 [현지시간대]로 변경하여 헷갈리지 않게 설정하도록 합니다.

EventBridge 규칙 생성(2)

마지막으로 해당 규칙을 AWS 어떤 리소스에 적용할 것인지 세팅합니다.

위에서 생성한 Lambda에 적용하도록 세팅합니다.

EventBridge 규칙 생성(3)

EC2 시작하는 규칙을 생성하면 종료 일정에 맞는 규칙 생성 후 해당 Lambda에 적용해 줍니다.

[참고사이트]

728x90
반응형
Comments