Lambda를 사용해서 Amazon EC2 인스턴스를 정기적으로 중지 및 시작하려면 어떻게 해야 합니까?

4분 분량
0

Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 자동으로 중지 및 시작하여 Amazon EC2 사용량을 줄이려고 합니다.

간략한 설명

AWS Lambda와 Amazon EventBridge를 사용하여 EC2 인스턴스를 자동으로 중지하고 시작할 수 있습니다.

참고: 다음 해결 방법은 간단한 예시 솔루션입니다. 고급 솔루션이 필요하면 AWS의 Instance Scheduler를 사용하십시오. 자세한 내용은 AWS 인스턴스 시작 및 중지 자동화를 참조하십시오.

Lambda를 사용하여 정기적으로 EC2 인스턴스를 중지 및 시작하려면 다음 단계를 완료하십시오.

  1. Lambda 함수에 대한 사용자 지정 AWS Identity and Access Management(IAM) 정책 및 IAM 역할을 생성합니다.
  2. EC2 인스턴스를 중지 및 시작하는 Lambda 함수를 생성합니다.
  3. Lambda 함수를 테스트합니다.
  4. 일정에 따라 함수를 실행하는 EventBridge 일정을 생성합니다.

Lambda 함수가 인스턴스를 중지 및 다시 시작할 수 없는 경우가 가끔 있습니다. 이는 Amazon Elastic Block Store(Amazon EBS) 볼륨이 암호화되어 있고 Lambda 역할이 암호화 키를 사용할 권한이 없는 경우에 발생합니다. 자세한 내용은 암호화된 볼륨에 사용하기 위한 필수 AWS KMS 키 정책을 참조하십시오.

해결 방법

사전 요구 사항: 중지 및 시작하려는 EC2 인스턴스의 ID를 가져옵니다.

Lambda 함수에 대한 IAM 정책 및 역할 생성

다음 단계를 완료하십시오.

  1. JSON 정책 편집기를 사용하여 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": "*"
            }
        ]
    }
  2. Lambda에 대한 IAM 역할을 생성합니다.

  3. IAM 정책을 IAM 역할에 연결합니다.

참고: Amazon Elastic Block Store(Amazon EBS) 볼륨을 사용하는 경우 추가 구성이 필요할 수 있습니다. Amazon EBS 볼륨이 고객 관리형 AWS Key Management Service(AWS KMS) 키로 암호화된 경우 kms:CreateGrant를 IAM 정책에 추가하십시오.

인스턴스를 중지 및 시작하는 Lambda 함수 생성

다음 단계를 완료하십시오.

  1. Lambda 콘솔을 연 다음, 함수 생성을 선택합니다.

  2. 새로 작성을 선택합니다.

  3. 기본 정보에 다음 정보를 입력합니다.
    함수 이름StopEC2Instances 또는 StartEC2Instances와 같이 함수를 설명하는 이름을 입력합니다.
    런타임Python 3.9를 선택합니다.
    권한기본 실행 역할 변경을 확장합니다.
    실행 역할기존 역할 사용을 선택합니다.
    기존 역할에서 해당 IAM 역할을 선택합니다.

  4. 함수 생성을 선택합니다.

  5. 코드 탭을 선택합니다.

  6. 코드 소스 아래의 lambda_funciton.py 탭에서 코드 편집기에 다음 stop_instances 코드를 입력합니다.

    import boto3region = '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))

    코드 편집기에 다음 start_instances 코드를 입력합니다.

    import boto3region = '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))

    참고: us-west-1을 인스턴스가 있는 AWS 리전으로, InstanceIds를 중지하고 시작하려는 인스턴스의 ID로 바꾸십시오.

  7. 배포를 선택합니다.

  8. 구성 탭에서 일반 구성, 편집을 차례로 선택합니다.

  9. 타임아웃을 10초로 설정한 다음 저장을 선택합니다.

Lambda 함수 테스트

다음 단계를 완료하십시오.

  1. Lambda 콘솔을 연 다음 함수를 선택합니다.
  2. 함수 중 하나를 선택합니다.
  3. 코드 탭을 선택합니다.
  4. 코드 소스 섹션에서 테스트를 선택합니다.
  5. 테스트 이벤트 구성 대화 상자에서 새 테스트 이벤트 생성을 선택합니다.
  6. 이벤트 이름을 입력한 다음 생성을 선택합니다.
    참고: 테스트 이벤트의 JSON 코드를 변경하지 마세요.
  7. 테스트를 선택하여 함수를 실행합니다.
  8. 다른 함수에 대해서도 1~7단계를 반복합니다.

인스턴스 상태 확인

Amazon EC2 콘솔

테스트 전후에 인스턴스의 상태를 확인하여 함수가 작동하는지 확인합니다.

CloudTrail

또한 AWS CloudTrail을 사용하여 Lambda 함수가 인스턴스를 중지했거나 시작했는지 확인할 수 있습니다.

다음 단계를 완료하십시오.

  1. CloudTrail 콘솔을 엽니다.
  2. 탐색 창에서 이벤트 기록을 선택합니다.
  3. 속성 조회 드롭다운 목록에서 이벤트 이름을 선택합니다.
  4. 검색 창에 StopInstances를 입력하고 결과를 검토합니다. 그런 다음, StartInstances를 입력합니다.

결과가 없으면 Lambda 함수가 인스턴스를 중지하거나 시작하지 않은 것입니다.

Lambda 함수를 실행하는 EventBridge 규칙 생성

다음 단계를 완료하십시오.

  1. EventBridge 콘솔을 엽니다.
  2. 규칙 생성을 선택합니다.
  3. 규칙 이름(예: StopEC2Instances 또는 StartEC2Instances)을 입력합니다.
  4. (선택 사항) 설명에 규칙에 대한 설명을 입력합니다.
  5. 규칙 유형에서 일정을 선택한 다음, EventBridge Scheduler에서 계속을 선택합니다.
  6. 일정 패턴발생에서 반복 일정을 선택합니다.
  7. 일정 유형에서 속도 기반 일정 또는 Cron 기반 일정을 선택하고 다음 단계 중 하나를 완료합니다.
    속도 기반 일정의 경우 속도 값을 입력한 다음, 시간 간격을 분, 시간 또는 일 단위로 선택합니다.
    -또는-
    **Cron 기반 일정의 경우 ** 인스턴스를 중지하거나 시작할 시기를 Lambda에 알려주는 식을 입력합니다.
    참고: Cron 표현식은 UTC로 평가됩니다. 사용자 시간대에 적합하게 표현식을 조정하십시오.
  8. 대상 선택 페이지의 대상 드롭다운 목록에서 Lambda 함수를 선택합니다.
  9. 함수에서 인스턴스를 중지하거나 시작하는 함수를 선택합니다.
  10. 검토 및 생성으로 건너뛰기를 선택한 다음, 생성을 선택합니다.

참고: AWS 계정의 이벤트에 반응하는 규칙을 생성할 수도 있습니다.

관련 정보

자습서: AWS Lambda 함수를 위한 EventBridge 예약 규칙 생성

EventBridge의 AWS 서비스 이벤트

Amazon EC2 청구 및 구매 옵션

AWS 공식
AWS 공식업데이트됨 한 달 전