[AWS Cloud9]EC2 자동 정지를 감지하고 다른 처리를 시작

소개



AWS Cloud9는 IDE 브라우저를 닫을 때 자동으로 EC2 인스턴스를 중지할 수 있습니다.
몇 분 후에 자동 정지 여부는 설정에서 변경이 가능합니다.


AWS Cloud9를 1주일 사용하면 EC2 인스턴스가 자동 중지하는 것이 "편리한 → 당연"이라는 느낌이 들었습니다. 그리고 생각했습니다. 자동 정지를 감지하여 더 즐겁게 할 수 없을까.

하고 싶은 일



AWS Cloud9 기능으로
  • 검지한 정보를 트리거에 다른 처리를 동작시켜 보자.
  • 이번은, 샘플에 이하를 동작 확인
  • 자동 정지 알림 메일
  • RDS의 자동 정지 (IDE와 세트로 사용했기 때문에, 멈추는 것을 없애고 매우 편리하게 되었다)


  • 자동 정지되었음을 감지



    CloudWatch 규칙을 만듭니다.
  • 이벤트 패턴 선택
  • 서비스명: EC2
  • 이벤트 유형: EC2 Instance Status-change Notification
  • 특정 상태: 인스턴스 중지 설정
  • Specific instance Id(s): AWS Cloud9 인스턴스 ID 설정

  • {
      "source": [
        "aws.ec2"
      ],
      "detail-type": [
        "EC2 Instance State-change Notification"
      ],
      "detail": {
        "state": [
          "running",
          "stopped"
        ],
        "instance-id": [
          "AWS Cloud9のインスタンスID"
        ]
      }
    }
    

    감지한 정보를 트리거로 다른 처리를 동작



    타겟에 이번은 2개(SNS(메일 송신)와 Lambda(rds정지)를 설정했습니다.)
    SNS는 용도를 생각하지 못했기 때문에 이메일을 설정했을 뿐. json이 그대로 메일로 날아온다.



    Lambda는 드디어 IDE 기동했을 때의 동작도 기술.
  • IDE 시작 → EC2 시작 → RDS 시작
  • IDE 종료 → 30 분 후 EC2 정지 → RDS 정지

  • IAM 역할
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Action": [
                    "logs:CreateLogGroup",
                    "logs:CreateLogStream",
                    "logs:PutLogEvents",
                    "rds:StartDBInstance",
                    "rds:StopDBInstance"
                ],
                "Effect": "Allow",
                "Resource": "*"
            }
        ]
    }
    

    lambda_function.py
    import boto3
    
    def lambda_handler(event, context):
        dbinstance = 'RDSインスタンス名'
        rds = boto3.client('rds')
        instanceState = event['detail']['state']
        if instanceState == 'stopped':
            result = rds.stop_db_instance(DBInstanceIdentifier = dbinstance)
        else:
            result = rds.start_db_instance(DBInstanceIdentifier = dbinstance)
        print(result)    
    
  • 시작 상태의 RDS


  • EC2가 중지되는 이벤트 발생


  • RDS가 자동으로 정지


  • 요약


  • CloudWatch를 사용하여 IDE 종료 후 EC2 자동 정지를 감지할 수 있었습니다.
  • 후속 처리를 자동화할 수 있는 것을 알았으므로, 하루의 작업 종료를 브라우저를 닫는 것만으로 할 수 있을 것 같습니다.

  • 관련


  • AWS Cloud9를 실행해 보았습니다.
  • 좋은 웹페이지 즐겨찾기