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

5분 분량
0

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

간략한 설명

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

참고: 다음 해결책은 간단한 예시 솔루션입니다. 고급 솔루션이 필요할 경우, AWS Instance Scheduler를 사용합니다. 자세한 내용을 보려면, AWS 인스턴스 시작 및 중지 자동화를 참조하세요.

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

  1. Lambda 함수에 대한 사용자 지정 AWS Identity and Access Management(IAM) 정책 및 IAM 역할을 생성합니다.
  2. EC2 인스턴스를 중지 및 시작하는 Lambda 함수를 생성합니다.
  3. Lambda 함수를 테스트합니다.
  4. 일정에 따라 함수를 실행하는 EventBridge 일정을 생성합니다.
    참고: AWS 계정의 이벤트에 반응하는 규칙을 생성할 수도 있습니다.

해결 방법

참고: 다음 단계를 완료한 후에 Client error on launch 오류가 발생할 수 있습니다. 자세한 내용을 보려면, 암호화된 볼륨이 연결된 상태로 인스턴스를 시작하면 "client error on launch"라는 오류와 함께 인스턴스가 즉시 중지됩니다를 참조하세요.

중지 및 시작하려는 EC2 인스턴스의 ID를 가져옵니다. 이어서, 다음 단계를 완료합니다.

Lambda 함수에 대한 IAM 정책 및 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 역할을 생성합니다.
    중요: 권한 정책을 Lambda에 연결할 때 해당 IAM 정책을 선택해야 합니다.

참고: 고객 관리형 AWS Key Management Service(AWS KMS) 키로 암호화된 Amazon Elastic Block Store(Amazon EBS) 볼륨을 사용하는 경우 IAM 정책에 kms:CreateGrant를 추가하세요.

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

  1. Lambda 콘솔을 연 다음, 함수 생성을 선택합니다.
  2. 새로 작성을 선택합니다.
  3. 기본 정보에 다음 정보를 입력합니다.
    함수 이름에는 함수를 설명하는 이름(예: “StopEC2Instances”)을 입력합니다.
    런타임Python 3.9를 선택합니다.
    권한기본 실행 역할 변경을 확장합니다.
    실행 역할기존 역할 사용을 선택합니다.
    기존 역할에서 해당 IAM 역할을 선택합니다.
  4. 함수 생성을 선택합니다.
  5. 코드 탭의 코드 소스에서 다음 코드를 lambda_function 탭의 코드 편집기에 있는 편집기 창에 붙여 넣습니다. 이 코드는 다음과 같이 사용자가 식별한 인스턴스를 중지합니다.
    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))
    us-west-1을 인스턴스가 있는 AWS 리전으로 변경합니다. InstanceIds를 중지 및 시작하려는 인스턴스의 ID로 바꿉니다.
  6. 배포를 선택합니다.
  7. 구성 탭에서 일반 구성, 편집을 차례로 선택합니다.
  8. 타임아웃을 10초로 설정한 다음, 저장을 선택합니다.
    참고: (선택 사항) Lambda 함수 설정을 조정할 수 있습니다. 예를 들어, 여러 인스턴스를 중지하고 시작하려면 타임아웃메모리에 다른 값을 사용할 수 있습니다.
  9. 1~7단계를 반복하여 다른 함수를 생성합니다. 이 함수가 인스턴스를 시작하도록 다음 단계를 완료하세요.
    3단계에서 다른 함수 이름을 입력합니다. 예를 들어, "StartEC2Instances"를 입력합니다.
    5단계에서, 다음 코드를 lambda_function 탭의 코드 편집기의 편집기 창에 붙여 넣습니다.
    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))

          사용자 리전 및 동일한 인스턴스 ID를 사용하세요.

Lambda 함수 테스트

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

인스턴스 상태 확인

AWS Management Console

테스트 전후에 ](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-system-instance-status-check.html#viewing_status)인스턴스의 상태를 확인[하여 함수가 작동하는지 확인합니다.

CloudTrail

Lambda 함수가 인스턴스를 중지하거나 시작했는지 확인하기 위해. AWS CloudTrail을 사용하여 이벤트를 확인할 수 있습니다.

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

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

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

  1. EventBridge 콘솔을 엽니다.
  2. 규칙 생성을 선택합니다.
  3. 규칙 이름(예: “StopEC2Instances”)을 입력합니다. (선택 사항) 설명에 규칙에 대한 설명을 입력합니다.
  4. 규칙 유형에서 일정을 선택한 다음, EventBridge Scheduler에서 계속을 선택합니다.
  5. 일정 패턴에서 반복 일정을 선택합니다.
  6. 일정 패턴발생에서 반복 일정을 선택합니다.
  7. 일정 유형에서 해당 일정 유형을 선택한 후, 다음 단계를 완료합니다.
    요금 기반 일정의 경우 요금 값을 입력한 다음, 시간 간격을 분, 시간 또는 일 단위로 선택합니다.
    -또는-
    Cron 기반 일정의 경우, 인스턴스 중지 시점을 Lambda에 알려주는 표현식을 입력하세요. 표현식 구문에 대한 자세한 내용을 보려면, 일정에 따라 실행되는 Amazon EventBridge 규칙 생성을 참조하세요.
    참고: Cron 표현식은 UTC로 평가됩니다. 사용자 시간대에 적합하게 표현식을 조정합니다.
  8. 대상 선택에서 대상 드롭다운 목록 중 Lambda 함수를 선택합니다.
  9. 함수에서 인스턴스를 중지하는 함수를 선택합니다.
  10. 검토 및 생성으로 건너뛰기를 선택한 다음, 생성을 선택합니다.
  11. 1~10단계를 반복하여 인스턴스를 시작하는 규칙을 생성합니다. 다음 단계를 완료합니다.
    규칙 이름(예: “StartEC2Instances”)을 입력합니다.
    (선택 사항) 설명에 규칙에 대한 설명(예: “매일 아침 7시에 EC2 인스턴스 시작”)을 입력합니다.
    7단계에서 Cron 표현식에 Lambda에 인스턴스 시작 시점을 알려주는 표현식을 입력합니다.
    9단계의 함수에서 인스턴스를 시작하는 함수를 선택합니다.

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

관련 정보

튜토리얼: EventBridge를 사용한 AWS Lambda 함수 스케줄링

AWS 서비스의 이벤트

Amazon CloudWatch 경보에 중지 작업 추가

인스턴스 구매 옵션

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