본문 바로가기

개인 공부

9/18 일_EC2 Timezone, EC2 Scheduler(Lambda, EventBridge)

728x90

1. AWS EC2_Ubuntu 서버의 Timezone 한국 시간으로 설정

sudo hwclock --show # EC2 Timezone 확인

# 한국시간으로 변경 **재시작 필요
sudo rm /etc/localtime && sudo ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime

 

2. Lambda를 사용하여 Amazon EC2 인스턴스를 정기적으로 시작하고 중지

어제부터 유튭, 블로그 검색하면서 인스턴스 스케줄러를 만드려고 했는데,

다들 너무 간략하게 설명해서 엄청 헤맸다..


AWS 튜토리얼을 참고, 아래에 절차를 정리했다. 테스트도 잘 돼서 만족스럽다.

 

cf. 아마존에서 이를 위한 Instance Scheduler on AWS이라는 솔루션도 제공하는 모양!

(EC2, RDS 인스턴스의 시작 및 중지 일정을 구성하여 AWS 리소스 비용을 제어하는 데 도움을 줌)

 

1) Lambda 함수에 대한 AWS Identity and Access Management(IAM) 정책 및 실행 역할을 생성합니다.

- JSON 정책 편집기를 사용하여 IAM 정책을 생성

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
      ],
      "Resource": "arn:aws:logs:*:*:*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "ec2:Start*",
        "ec2:Stop*"
      ],
      "Resource": "*"
    }
  ]
}

- Lambda의 IAM 역할을 생성

: 신뢰할 수 있는 엔터티 유형: AWS 서비스,
사용 사례: Lambda,
권한 정책: 방금 생성한 IAM 정책(필자의 경우 'StartStopEC2')


2) EC2 인스턴스를 중지 및 시작하는 Lambda 함수를 생성합니다.

- Lambda 콘솔에서 [함수 생성]을 선택 → [새로 작성(Author from scratch)]을 선택

- 함수 이름, 런타임(Runtime): Python 3.9

- 권한(Permissions)에서 기본 실행 역할 변경(Change default execution role)을 확장

- 실행 역할(Execution role) 아래에서 기존 역할 사용(Use an existing role)을 선택

- [기존 역할] 아래에서 이미 생성한 IAM 역할을 선택

- [함수 생성]을 선택

- 코드(Code)의 코드 소스(Code source)에서 다음 코드(EC2 인스턴스 중지)를 복사하여 코드 편집기의 편집기 창에 붙여 넣기

import boto3
region = 'ap-northeast-2'
instances = ['인스턴스 ID']
ec2 = boto3.client('ec2', region_name=region)

def lambda_handler(event, context):
    ec2.stop_instances(InstanceIds=instances)
    print('stopped your instances: ' + str(instances))

- 배포(Deploy)를 선택

- 구성(Configuration) 탭에서 일반 구성(General configuration), 편집(Edit)을 선택합니다. 제한 시간(Timeout)을 10초로 설정한 다음 저장(Save)을 선택

- 위의 단계를 반복하여 다른 함수(EC2 인스턴스 시작)를 생성

import boto3
region = 'ap-northeast-2'
instances = ['인스턴스 ID']
ec2 = boto3.client('ec2', region_name=region)

def lambda_handler(event, context):
    ec2.start_instances(InstanceIds=instances)
    print('started your instances: ' + str(instances))

 

3) Lambda 함수를 테스트합니다.

- 코드(Code) 탭을 선택

- 코드 소스(Code source) 섹션에서 테스트(Test)를 선택

- 테스트 이벤트 구성(Configure test event) 대화 상자에서 새 테스트 이벤트 생성(Create new test event)을 선택

- 이벤트 이름(Event name)을 입력합니다. 그런 다음 [생성]을 선택
(참고: 테스트 이벤트의 JSON 코드는 함수가 사용하지 않기 때문에 변경할 필요가 없음)

- 테스트(Test)를 선택하여 함수를 실행

 

4) 일정에 따라 함수를 트리거하는 EventBridge 규칙을 생성합니다.

-  EventBridge 콘솔을 열기

- [규칙 생성]을 선택

- 규칙의 이름(Name, 예: 'StopEC2Instances'), 설명(Description)을 입력

- 패턴 정의(Define pattern)에서 일정(Schedule)을 선택

- 다음 중 하나를 수행

: 정액 요금 기준에서는 시간 간격을 분, 시간 또는 일 단위로 입력 / [Cron 표현식]에는 인스턴스를 중지할 시간(UTC 기준)을 Lambda에 알리는 표현식을 입력

- 대상 선택(Select targets)의 대상(Target) 드롭다운 메뉴에서 Lambda 함수를 선택

- 함수(Function)에서 EC2 인스턴스를 중지하는 함수를 선택

- 아래로 스크롤하고 생성(Create)을 선택

- 위의 단계를 반복하여 EC2 인스턴스를 시작할 규칙을 생성

 

출처

728x90