본문 바로가기

AWS

[AWS] EC2 인스턴스 자동 종료 및 실행

IAM 정책 생성

AWS Lambda 서비스를 사용하기 위해서 다음과 같이 정책을 설정한다.

  • 검색 창에 IAM을 입력하고 정책을 클릭한다.

  • 정책 생성하기 버튼을 클릭한다.

  • Json 버튼을 클릭한 후 다음과 같은 코드를 작성한다.
{
  "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를 선택한 후, 다음 버튼을 클릭한다.
  • 이후, 이전에 생성한 정책을 연결한다.
  • 역할 이름을 설정한 후, 역할을 생성한다.

AWS Lambda 사용하기

  • 검색 창에 Lambda를 입력하고 이동한 후, 함수 생성 버튼을 클릭한다.

인스턴스 종료, 실행 함수를 생성한다.

  • 함수 이름을 설정한다.
  • 런타임을 Python으로 설정한다.
  • 기본 상태 역할 변경을 클릭한 후, 기존 역할 사용 -> 이전에 생성한 역할을 연결한다.
  • 만들어진 함수에 다음과 같은 코드를 입력한다. 
    • instances에는 ec2 인스턴스 ID를 입력한다.
    • region에는 ec2 Region ID를 입력한다.

// 인스턴스 종료 코드

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))
// 인스턴스 실행 코드

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))

AWS CloudWatch 사용하기

  • 검색 창에 CloudWatch를 입력 후, 이벤트 - 규칙 버튼을 클릭한다.

  • 규칙 생성을 클릭한다.

  • 이름, 설명, 이벤트 버스, 일정을 설정한 후, 다음 버튼을 클릭한다.

  • 함수를 실행시킬 cron 식을 입력한다. UTC를 사용하므로 -9 시간을 해주어야 한다.
  • 위에 적힌 cron 식은 매일 19시를 의미한다.

  •  AWS 서비스 - Lambda 함수 - ec2-turn-off 선택 후, 다음 버튼을 클릭한다.
  • 이후, 쭉 다음 버튼을 클릭한 뒤, 규칙 생성 버튼을 클릭한다.

해당 방법으로 ec2-생성/종료 함수를 등록하면 된다.