[BE/3주차] EC2 auto stop, start

Rare·2020년 8월 4일
0

backend

목록 보기
5/6
post-thumbnail
post-custom-banner

💡 AWS Lambda와 CloudWatch를 이용해서, 정해진 시간에 EC2를 stop , start 할 수 있도록

Content

1. IAM for Lambda


  • 람다에서 요구 기능을 수행하기 위해서는 2가지 Role을 가진 역할 필요함

  • AmazonEC2ReadOnlyAccess

  • AWSLambdaBasicExecutionRole

  • 람다를 사용할 IAM 유저도 3가지 Role을 가지고 있어야함.

    • AWSLambdaFullAccess
    • AWSLambdaReadOnlyAccess
    • AWSLambdaRole
    • 이 Role들은 최대 수치를 허용한듯. 기본적으로 최소 권한만 할당해줘야 하지만.. 여러모로 찾기 어려워서 쉬운 방법을 택했음..

2. Create Lambda Function


1) 새로 작성 (Author from scratch)

2) 기본 정보

  • 함수이름 (함수의 특징을 나타낼 수 있도록 , ex) StopEC2Instances)...
  • 런타임 (Python 3.7 script를 사용할 것이므로..)

3) 권한

  • 윗 단계 IAM For Lambda에서 생성한 람다를 위한 역할을 선택한다.

3. Script 작성


EC2 중지

import boto3
region = 'us-west-1'
instances = ['i-12345cb6de4f78g9h', 'i-08ce9b2d7eccf6d26']
ec2 = boto3.client('ec2', region_name=region)

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

EC2 시작

import boto3
region = 'us-west-1' 
instances = ['i-12345cb6de4f78g9h', 'i-08ce9b2d7eccf6d26']
ec2 = boto3.client('ec2', region_name=region)

def lambda_handler(event, context):
    ec2.start_instances(InstanceIds=instances)
    print('started your instances: ' + str(instances))
  • 위 두 스크립트에서 바꿀 것은 2가지
    • region, instances

4. 테스트


  • 상단의 테스트 버튼 클릭

  • 이미 지정된 hello-world 템플릿에서 이벤트 이름 작성, 내부 json값을 변경하지 않아도 됨.

  • 작성 후 , 하단에 생성을 클릭

  • 이 후에 다시 테스트 버튼을 클릭해서 테스트 실행 혹은 함수코드에 Test 버튼으로도 실행 가능함.


  • 성공 하면, Response null에 Request Id가 같이 나옴

5. CloudWatch Rule


규칙 설정

이벤트 —> 규칙으로 들어감

  • 일정에서 cron 으로 설정

    • crontab 설정 참고

      • ❗ 주의!! Cron basic time은 UTC! 한국시간이랑 9시간 차이 난다..
      • 예시 ('마우스 우클릭' -> '이미지 새탭에서 보기' 를 누르면 크게 볼 수 있습니다)
      • UTC 16:00 → KST 01:00 , 즉 한국시간으로 1시에 StopEC2Instances 람다 함수를 실행하도록 만들어준다. (참고) UTC 시간 계산 사이트
      • 같은 방법으로 StartEC2Instances 람다에 대한 규칙도 만들어주면 된다!!

Summary


  • 생각보다 오래 걸렸음.
  • 이유는 Role 문제, Lambda 를 실행하기 위한 IAM Role 필요하다는 것도 생소한 개념이었지만,
  • 현재 로그인한 계정에도 Role이 필요해서 어떤 것이 필요한 지 찾아보는데 많은 시간이 걸린듯 함.
  • 그렇지만 굉장히 간단하고 간편하게, 자동화 작업을 할 수 있음에 신기함을 느꼈음.
  • AWS Lambda의 경우 월별 무료 요청 1백만 건 및 월별 400,000GB-초 컴퓨팅 시간 이 프리티어라고 하니, 앞으로 프로젝트 진행하는 데 무리 없을 듯함.

Reference


profile
블로그 서비스 ‘레어’ 기술 블로그
post-custom-banner

0개의 댓글