EC2 인스턴스를 스케줄로 시작 및 중지

10045 단어 EC2람다CloudWatchAWS

EC2 인스턴스를 예약으로 시작 및 중지



목적


  • lamdba에 대해 공부하고 싶습니다
  • 인스턴스 중지를 잊지 않으려면
  • 파이썬에 대해 알고 싶습니다

  • 함수 만들기 1



    함수 이름과 역할을 설정합니다.
  • 이름
  • myStartStopEC2Instances


  • 사용자 지정 역할 만들기


  • 사용자 지정 역할 만들기를 선택하면 사용자 지정 역할 만들기의 새 화면이 열립니다.



    사용자 지정 역할 만들기


  • 역할명
  • myStartStop_EC2_Instances

  • 정책 문서
  • EC2 시작, 중지 허용


  • 정책 문서
    {
      "Version": "2012-10-17",
      "Statement": [![Screenshot 2017-10-28_20-38-06.png](https://qiita-image-store.s3.amazonaws.com/0/88753/6aee1997-0196-ebb1-303b-d52803d52427.png)
    
        {
          "Effect": "Allow",
          "Action": [
            "logs:CreateLogGroup",
            "logs:CreateLogStream",
            "logs:PutLogEvents"
          ],
          "Resource": "arn:aws:logs:*:*:*"
        },
        {
          "Effect": "Allow",
          "Action": [
            "ec2:Start*",
            "ec2:Stop*"
          ],
          "Resource": "*"
        }
      ]
    }    
    



    함수 생성 2



    작성한 롤이 기존의 롤로서 읽혀지기 때문에, [함수의 작성]을 실시한다.


  • 런타임
  • Python 2.7

  • 코드
  • lambda_function.py

  • 핸들러
  • lambda_function.lamdbda_handler


  • lambda_handler.py
    import boto3
    
    def lambda_handler(event, context):
        region = event['Region']
        instances = event['Instances']
        ec2 = boto3.client('ec2', region_name=region)
        if event['Action'] == 'start':
            ec2.start_instances(InstanceIds=instances)
            print 'started your instances: ' + ", ".join(instances)
        elif event['Action'] == 'stop':
            ec2.stop_instances(InstanceIds=instances)
            print 'stopped your instances: ' + ", ".join(instances)
    

    동작 테스트



    임의의 파라미터를 설정하여 동작을 확인한다.
    세 개의 인스턴스에 대해 시작을 지시합니다.



    인스턴스 ID를 임의의 ID로 변경
    대상을 3개 정의하고 있지만, 당연히 증감시켜도 좋다
  • 이벤트명
  • TestStartEC2


  • test.json
    {
     "Action": "start",
     "Region": "ap-northeast-1", 
     "Instances":
      [
       "i-xxxxxxxxxxxxxxxxx",
       "i-yyyyyyyyyyyyyyyyyy",
       "i-zzzzzzzzzzzzzzzzz"
      ]
    }
    



    동작 테스트



    EC2 인스턴스가 시작되거나 동작을 확인합니다.
    실행 결과가 성공하고 EC2가 시작되면 OK입니다.





    CloudWatch


  • 이름
  • DailyStopEC2

  • 이벤트 소스
  • Cron 식
  • 매일 23:30
  • 이미지는 JST에서 23:30을 지정하지만 GMT로 변환해야합니다.
  • 30 14 * * ? *


  • 타겟
  • 기능
  • myStartStop_EC2_instances

  • 입력
  • 상수 (JSON 텍스트)
  • Action, Region, Instances는 대상에 맞게 설정됩니다.
  • {"Action": "stop", "Region": "ap-northeast-1", "Instances": ["i-xxxxxxxxxxxxxxxxx","i-yyyyyyyyyyyyyyyyyy","i-zzzzzzzzzzzzzzzzz"]}






  • 참고


  • 슈퍼 참고로...라고 할까 하고 있는 것 그대로
  • 가능한 한 심플한 구조로 간단하게 EC2의 자동 기동・정지를 실현하고 싶다! | Developers.IO

  • 좋은 웹페이지 즐겨찾기