Cloud/AWS

AWS Console에 들어가지 않고 EC2 Instance 기동시키기

chronosa 2021. 1. 26. 18:00

목차

     

    개발을 위해서 EC2 위에 인스턴스를 두고 매일 Stop, Start를 하고 있는데, 이 시간이 일정치 않아 매번 AWS Console에 들어가서 서버를 수동으로 실행시켜야 하는 번거로움이 있었다. 이번에는 그런 번거로움을 해소하기 위해 AWS의 서비스인 Lambda와 API Gateway를 활용하여 EC2 기동을 자동화해보고자 한다.

     

    1. Lambda 생성

    # IAM Role

    최초 Lambda 환경 생성 시 "기본 Lambda 권한을 가진 새 역할 생성"으로 역할을 생성한 후 Statement에 아래 문구를 추가해준다.

            {
                "Sid": "VisualEditor0",
                "Effect": "Allow",
                "Action": "ec2:StartInstances",
                "Resource": "*"
            },

     

    # Lambda Code

    import os, json
    import boto3
    
    def lambda_handler(event, context) -> dict:
        REGION:str = os.environ.get('region')
        TARGET:list = os.environ.get('instance_id').split(",")
        
        ec2 = boto3.client("ec2", region_name=REGION)
        response = ec2.start_instances(
            InstanceIds=TARGET
        )
        status_code = response["ResponseMetadata"].get("HTTPStatusCode")
        results = []
        for instance in response["StartingInstances"]:
            prev = instance["PreviousState"]["Name"]
            curr = instance["CurrentState"]["Name"]
            i_id = instance["InstanceId"]
            results.append(f"{i_id} : {prev} -> {curr}")
    
        return {
            'statusCode': status_code,
            'body': json.dumps(results)
        }
    

     

    # 환경 변수

    instance_id는 코드 상에서 ','를 통해 split하여 사용한다.

     

    # 실행 시 결과

    Response:
    {
      "statusCode": 200,
      "body": "[\"i-12345 : running -> running\"]"
    }

    2. API Gateway 연동

    Lambda Console의 디자이너 목록에서 "+ 트리거 추가"를 클릭한다.

     

    HTTP API > 보안 : "열기" > 추가 클릭

     

    추가가 정상적으로 완료되면 아래와 같이 추가된 트리거의 상세정보를 확인할 수 있다.

    API 엔드포인트를 클릭하면, 정상적으로 Lambda 함수가 실행됨을 확인할 수 있다.

     

    URI가 너무 길어서 불편하면, API Gateway의 경로에서 이를 변경해줄 수 있다. 경로 변경 시 아래와 같이 (X) 표시를 하면서 라우팅을 포함하지 않는다고 하는데, 이미 API Gateway에서 통합되었기 때문에 발생하는 것으로 이 경우에는 API GW Console에서 경로를 별도로 생성하고(예 : /ec2/start) 동일한 통합을 적용하면 된다.

     

     

    정상적으로 연동되었음이 확인되면 방금전의 Lambda 콘솔에서 API 게이트웨이 트리거를 보면 트리거가 2개가 표시될 것이다. 기존 것은 삭제하면 된다.