Lambda를 사용하여 Amazon EC2 인스턴스를 정기적으로 중지하고 시작하려면 어떻게 해야 하나요?
EC2 인스턴스를 자동으로 중지하고 시작하여 Amazon Elastic Compute Cloud(Amazon EC2) 사용량을 줄이려고 합니다.
간략한 설명
AWS Lambda와 Amazon EventBridge를 사용하여 EC2 인스턴스를 자동으로 중지하고 시작할 수 있습니다.
참고: 다음 해결 방법은 약식입니다. 고급 해결 방법이 필요한 경우 AWS Instance Scheduler를 사용하세요. 자세한 내용은 AWS 인스턴스 시작 및 중지 자동화를 참조하세요.
Lambda를 사용하여 정기적으로 EC2 인스턴스를 중지하고 시작하려면 다음 단계를 완료하세요.
1. Lambda 함수에 대한 AWS Identity and Access Management(IAM) 정책 및 실행 역할을 생성합니다.
2. EC2 인스턴스를 중지 및 시작하는 Lambda 함수를 생성합니다.
3. Lambda 함수를 테스트합니다.
4. 일정에 따라 함수를 실행하는 EventBridge 규칙을 생성합니다.
참고: AWS 계정에서 발생하는 이벤트에 대응하는 규칙을 생성할 수도 있습니다.
해결 방법
참고: 다음 단계를 완료한 후 Client error on launch(시작 시 클라이언트 오류 발생) 오류를 수신할 경우 암호화된 볼륨이 연결된 상태로 인스턴스를 시작하면 "시작 시 클라이언트 오류(client error on launch)"라는 오류가 발생하며 인스턴스가 즉시 중지됩니다.를 참조하세요.
중지하고 시작하려는 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 역할을 생성합니다.
중요: 권한 정책을 Lambda에 연결할 때는 방금 생성한 IAM 정책을 선택해야 합니다.
EC2 인스턴스를 중지 및 시작하는 Lambda 함수 생성
1. Lambda 콘솔을 열고 Create function(함수 생성)을 선택합니다.
2. [새로 작성]을 선택합니다.
3. Basic information(기본 정보) 아래에서 다음 정보를 추가합니다.
Function name(함수 이름)에 EC2 인스턴스를 중지하는 데 사용되는 함수임을 식별하는 이름을 입력합니다. 예를 들어, 'StopEC2Instances'를 입력합니다.
**런타임(Runtime)**에서 Python 3.9를 선택합니다.
**권한(Permissions)**에서 **기본 실행 역할 변경(Change default execution role)**을 확장합니다.
실행 역할(Execution role) 아래에서 **기존 역할 사용(Use an existing role)**을 선택합니다.
[기존 역할] 아래에서 이미 생성한 IAM 역할을 선택합니다.
4. [함수 생성]을 선택합니다.
5. Code(코드), Code source(코드 소스)에서 다음 코드를 복사하여 코드 편집기의 편집기 창에 붙여 넣습니다(lambda_function). 이 코드는 사용자가 식별하는 EC2 인스턴스를 중지합니다.
EC2 인스턴스를 중지하는 함수 코드 예제
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))
중요: region(리전)에서 ‘us-west-1’을 사용자의 인스턴스가 위치하는 AWS 리전으로 바꾸세요. 인스턴스에서 예제 EC2 인스턴스 ID를 중지 및 시작할 특정 인스턴스의 ID로 대체하십시오.
6. **배포(Deploy)**를 선택합니다.
7. Configuration(구성) 탭에서 General configuration(일반 구성), Edit(편집)를 선택합니다. Timeout(제한 시간)을 10초로 설정한 다음 Save(저장)를 선택합니다.
참고: 각자의 사용 사례에 필요한 대로 Lambda 함수 설정을 구성합니다. 예를 들어, 여러 인스턴스를 중지하고 시작하기 위해 Timeout(제한 시간)과 Memory(메모리)에 다른 값을 입력할 수 있습니다.
8. 1~7단계를 반복하여 다른 함수를 생성합니다. 이 함수가 EC2 인스턴스를 시작하도록 다음 단계를 다르게 완료합니다.
3단계에서 이전에 사용한 것과 다른 Function name(함수 이름)을 입력합니다. 예를 들어 'StartEC2Instances'를 입력합니다.
5단계에서 다음 코드를 복사하여 코드 편집기의 편집기 창에 붙여 넣습니다(lambda_function).
EC2 인스턴스를 시작하는 함수 코드 예제
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))
중요: region(리전)과 instances(인스턴스)에서는 EC2 인스턴스를 중지하기 위해 코드에 사용한 값과 동일한 값을 사용합니다.
Lambda 함수 테스트
1. Lambda 콘솔을 열고 Functions(함수)를 선택합니다.
2. 생성한 함수 중 하나를 선택합니다.
3. Code(코드) 탭을 선택합니다.
4. Code source(코드 소스) 섹션에서 Test(테스트)를 선택합니다.
5. 테스트 이벤트 구성(Configure test event) 대화 상자에서 **새 테스트 이벤트 생성(Create new test event)**을 선택합니다.
6. **이벤트 이름(Event name)**을 입력합니다. 그런 다음 Create(생성)를 선택합니다.
참고: 테스트 이벤트의 JSON 코드는 변경하지 마세요. 함수에서 이를 사용하지 않습니다.
7. **테스트(Test)**를 선택하여 함수를 실행합니다.
8. 생성한 다른 함수에 대해서도 1~7단계를 반복합니다.
EC2 인스턴스의 상태 확인
AWS Management Console
테스트 전후에 EC2 인스턴스의 상태를 확인하여 함수가 예상한 대로 작동하는지 확인할 수 있습니다.
AWS CloudTrail
CloudTrail로 이벤트를 확인하여 Lambda 함수가 EC2 인스턴스를 중지하거나 시작했는지 확인할 수 있습니다.
1. CloudTrail 콘솔을 엽니다.
2. 탐색 창에서 [이벤트 기록]을 선택합니다.
3. Lookup attributes(속성 조회) 드롭다운 목록을 선택한 다음 Event name(이벤트 이름)을 선택합니다.
4. 검색 창에 StopInstances를 입력하여 결과를 검토합니다.
5. 검색 창에 StartInstances를 입력하여 결과를 검토합니다.
결과가 없으면 Lambda 함수가 EC2 인스턴스를 중지하거나 시작하지 않은 것입니다.
Lambda 함수를 실행하는 EventBridge 규칙 생성
1. EventBridge 콘솔을 엽니다.
2. [규칙 생성]을 선택합니다.
3. 규칙의 Name(이름)(예: 'StopEC2Instances')을 입력합니다. (선택 사항) Description(설명)에 규칙에 대한 설명을 입력합니다.
4. Rule type(규칙 유형)에서 Schedule(일정)을 선택한 다음 Continue in EventBridge Scheduler(EventBridge Scheduler에서 계속)를 선택합니다.
5. Schedule pattern(일정 패턴)에서 Recurring schedule(반복 일정)을 선택합니다. 다음 단계 중 하나를 완료합니다.
Schedule pattern(일정 패턴) 아래의 Occurrence(발생)에서 Recurring schedule(반복 일정)을 선택합니다. 이어서 다음 단계 중 하나를 완료합니다.
Schedule type(일정 유형)이 Rate-based schedule(Rate 기반 일정)인 경우 Rate expression(Rate 표현식)에 Rate 값을 입력하고 시간 간격(분, 시간 또는 일)을 선택합니다.
Schedule type(일정 유형)이 Cron-based schedule(Cron 기반 일정)인 경우 Cron expression(Cron 표현식)에 인스턴스를 중지할 시간을 Lambda에 알려주는 표현식을 입력합니다. 표현식 구문에 대한 자세한 내용은 규칙에 대한 예약 표현식을 참조하세요.
참고: Cron 표현식은 UTC 기준으로 평가됩니다. 선호하는 시간대에 맞추어 표현식을 조정하세요.
6. Select targets(대상 선택)의 Target(대상) 드롭다운 메뉴에서 Lambda function(Lambda 함수)을 선택합니다.
7. **함수(Function)**에서 EC2 인스턴스를 중지하는 함수를 선택합니다.
8. Skip to review and create(검토 및 생성으로 건너뛰기)를 선택하고 Create(생성)를 선택합니다.
9. 1~8단계를 반복하여 EC2 인스턴스를 시작할 규칙을 생성합니다. 다음 단계를 다르게 완료합니다.
규칙의 이름(예: 'StartEC2Instances')을 입력합니다.
(선택 사항) Description(설명)에 규칙에 대한 설명(예: '매일 아침 7시에 EC2 인스턴스 시작')을 입력합니다.
5단계에서 Cron expression(Cron 표현식)에 인스턴스를 시작할 시간을 Lambda에 알려주는 표현식을 입력합니다.
7단계의 **함수(Function)**에서는 EC2 인스턴스를 시작하는 함수를 선택합니다.
관련 정보
튜토리얼: EventBridge를 사용하여 Lambda 함수 예약

관련 콘텐츠
- 질문됨 4일 전lg...
- 질문됨 2달 전lg...
- 질문됨 23일 전lg...
- 질문됨 25일 전lg...
- 질문됨 5년 전lg...
- AWS 공식업데이트됨 한 달 전
- AWS 공식업데이트됨 2년 전
- AWS 공식업데이트됨 2달 전