내용으로 건너뛰기

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

4분 분량
0

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

간략한 설명

EC2 인스턴스를 자동으로 중지하고 시작하려면 EventBridge Scheduler를 사용하여 StartInstancesStopInstances Amazon EC2 API를 직접 호출합니다. 또는 스케줄러를 사용하여 AWS Lambda 함수를 호출해 인스턴스를 중지 및 시작할 수 있습니다. 추가적인 Lambda 함수를 만들어야 할 필요가 없도록 Amazon EC2 API를 스케줄러 대상으로 사용하는 것이 좋습니다.

고급 솔루션이 필요한 경우, AWS의 Instance Scheduler를 사용하십시오.

해결 방법

전제 조건: 중지 및 시작하려는 인스턴스의 ID를 가져옵니다.

스케줄러를 사용하여 Amazon EC2 API를 직접 호출

EventBridge Scheduler에 대한 IAM 정책 및 역할 만들기

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

  1. JSON 정책 편집기를 사용하여 EventBridge Scheduler가 인스턴스를 중지 및 시작하도록 허용하는 AWS Identity and Access Management(IAM) 정책을 만듭니다.
    정책 예시:
    {    
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "ec2:Start*",
                    "ec2:Stop*"
                ],
                "Resource": "*"
            }
        ]
    }
    참고: 고객 관리형 AWS Key Management Service(AWS KMS) 키를 사용하여 Amazon Elastic Block Store(Amazon EBS) 볼륨을 암호화한 경우, 정책에 kms::CreateGrant를 추가하십시오. Lambda 함수에 암호화 키에 대한 액세스 권한이 없는 경우, 인스턴스를 중지만 할 수 있고 다시 시작할 수는 없습니다. 자세한 내용은 암호화된 볼륨에 사용하기 위한 필수 AWS KMS 키 정책을 참조하십시오.
  2. IAM 콘솔을 엽니다.
  3. 역할을 선택하고 역할 만들기를 선택합니다.
  4. 신뢰할 수 있는 엔터티 유형에서 사용자 지정 신뢰 정책을 선택합니다.
  5. 다음 IAM 정책을 입력합니다.
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "Service": "scheduler.amazonaws.com"
                },
                "Action": "sts:AssumeRole",
                "Condition": {
                    "StringEquals": {
                        "aws:SourceAccount": "AWS_ACCOUNT_ID"
                    }
                }
            }
        ]
    }
    참고: AWS_ACCOUNT_ID를 AWS 계정 ID로 바꾸십시오.
  6. 다음을 선택합니다.
  7. 권한 정책에서 1단계에서 만든 IAM 정책을 선택합니다.
  8. 역할 이름EventBridge_Scheduler_Role과 같은 이름을 입력합니다.
  9. 역할 만들기를 선택합니다.

EventBridge Scheduler 일정 만들기

StopInstances API에 대하여 일정을 만들고 StartInstances API에 대하여 하나 더 만듭니다. 일정을 만들 때 다음 설정을 구성합니다.

  • 대상 API에서 모든 API를 선택한 다음 Amazon EC2를 검색합니다.
  • StopInstances 또는 StartInstances를 선택한 다음 인스턴스 ID를 입력합니다.
  • 설정 - 선택 사항의 경우, 권한에서 기존 역할 선택을 선택한 다음 앞서 만든 IAM 역할을 선택합니다.

스케줄러를 사용하여 Lambda 함수 호출

Lambda 함수에 대한 IAM 정책 및 역할 만들기

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

  1. JSON 정책 편집기를 사용하여 Lambda가 인스턴스를 중지 및 시작하도록 허용하는 IAM 정책을 만듭니다.
    정책 예시:
    {    "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": "*"
            }
        ]
    }
    참고: 고객 관리형 AWS KMS 키로 암호화된 Amazon EBS 볼륨을 사용하는 경우, 정책에 kms:CreateGrant를 추가하십시오. Lambda 함수에 암호화 키에 대한 액세스 권한이 없는 경우, 인스턴스를 중지만 할 수 있고 다시 시작할 수는 없습니다. 자세한 내용은 암호화된 볼륨에 사용하기 위한 필수 AWS KMS 키 정책을 참조하십시오.
  2. Lambda에 대한 IAM 역할을 만듭니다.
  3. IAM 정책을 IAM 역할에 연결합니다.

인스턴스를 중지 및 시작하는 Lambda 함수 만들기

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

  1. Lambda 콘솔을 엽니다.
  2. 함수 만들기를 선택한 다음, 처음부터 새로 작성을 선택합니다.
  3. 기본 정보에서 다음 설정을 구성합니다.
    함수 이름StopEC2Instances 또는 StartEC2Instances와 같이 함수를 설명하는 이름을 입력합니다.
    런타임에서 Python 3.14를 선택합니다.
    권한에서 기본 실행 역할 변경을 확장합니다.
    실행 역할에서 기존 역할 사용을 선택합니다.
    기존 역할에서 앞서 만든 IAM 역할을 선택합니다.
  4. 함수 만들기를 선택합니다.
  5. 코드 탭을 선택한 다음 lambda_funciton.py 탭을 선택합니다.
  6. 코드 소스에서 Code Editor에 다음 코드를 입력하여 인스턴스 중지를 구성합니다.
    import boto3  
    region = 'us-west-1'
    instances = ['i-12345acdb12345abcd', 'i-12345acdb12345abcd']
    ec2 = boto3.client('ec2', region_name=region)
    
    def lambda_handler(event, context):
        ec2.stop_instances(InstanceIds=instances)
        print('stopped your instances: ' + str(instances))
    인스턴스 시작을 구성하려면 Code Editor에 다음 코드를 입력합니다.
    import boto3  
    region = 'us-west-1'
    instances = ['i-12345acdb12345abcd', 'i-12345acdb12345abcd']
    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 리전으로, i-12345acdb12345abcd를 인스턴스의 ID로 바꾸십시오.
  7. 배포를 선택합니다.
  8. 구성 탭을 선택한 다음 일반 구성을 선택합니다.
  9. 편집을 선택합니다.
  10. 제한 시간에서 10초를 선택한 다음 저장을 선택합니다.

참고: 함수를 Amazon Virtual Private Cloud(Amazon VPC)와 연결한 경우, 해당 함수가 인터넷을 통해 Amazon EC2 엔드포인트에 연결할 수 있는지 확인하십시오. 또는 Amazon EC2에 대하여 가상 프라이빗 클라우드(VPC) 엔드포인트를 구성합니다.

Lambda 함수 테스트

인스턴스 중지 및 인스턴스 시작에 대하여 Lambda 함수를 테스트합니다.

테스트를 실행하기 전과 실행한 후에 인스턴스 상태를 검사하여 함수가 작동하는지 확인하십시오.

Lambda 함수가 인스턴스를 중지 또는 시작했는지 AWS CloudTrail을 사용하여 확인하려면 다음 단계를 완료하십시오.

  1. CloudTrail 콘솔을 엽니다.
  2. 탐색 창에서 이벤트 기록을 선택합니다.
  3. 속성 조회 드롭다운 목록에서 이벤트 이름을 선택합니다.
  4. 검색 창에 StopInstances를 입력하고 결과를 검토합니다. 그런 다음, StartInstances를 입력합니다.
    참고: 결과가 없으면 Lambda 함수가 인스턴스를 중지하거나 시작하지 않은 것입니다.

Lambda 함수를 실행할 EventBridge Scheduler 일정 만들기

Lambda 함수를 실행할 일정을 만듭니다. 대상 선택에서 템플릿 형식의 대상을 선택하고 AWS Lambda Invoke를 선택합니다. 앞서 만든 Lambda 함수를 사용합니다.