본문 바로가기

AWS

Lambda를 사용하여 Amazon EC2 인스턴스를 정기적으로 중지하고 시작 설정 방법

중지 및 시작하려는 EC2 인스턴스의 ID를 가져오고 다음 지침을 따릅니다.

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 역할을 생성합니다. 권한 정책을 연결할 때, 생성한 IAM 정책을 검색하여 선택합니다.

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

1.    Lambda 콘솔에서 [Create function]을 선택합니다.

2.    [Author from scratch]를 선택합니다.

3.    [Basic information]에서 다음을 추가합니다.

[unction name]에 EC2 인스턴스를 중지하는 데 사용할 함수로 표시될 이름을 입력합니다. 예를 들어, "StopEC2Instances"를 입력합니다.

[Runtime]에서 [Python 2.7]을 선택합니다.

[Permissions]에서 [Choose or create an execution role]을 확장합니다.

[Execution role]에서 [Use an existing role]을 선택합니다.

[Existing role]에서, 생성한 IAM 역할을 선택합니다.

4.    [Create function]을 선택합니다.

5.    이 코드를 복사하여 [Function code] 아래 코드 편집기의 편집기 창에 붙여넣습니다(lambda_function). 이 코드는 지정한 EC2 인스턴스를 중지합니다.

참고: region에서 "us-west-1"을 해당 인스턴스가 존재하는 AWS 리전으로 대체합니다. instances에서는 EC2 인스턴스 ID 예제를 중지 및 시작할 특정 인스턴스를 대체합니다.

 

import boto3

region = 'us-west-1'

instances = ['i-12345cb6de4f78g9h', 'i-08ce9b2d7eccf6d26']

 

def lambda_handler(event, context):

ec2 = boto3.client('ec2', region_name=region)

ec2.stop_instances(InstanceIds=instances)

print 'stopped your instances: ' + str(instances)

 

6.    [Basic settings]에서 [Timeout]을 10초로 설정합니다.

참고: 필요에 따라 사용 사례에 맞게 Lambda 함수 설정을 구성하십시오. 예를 들어, 여러 인스턴스를 중지 및 시작하려는 경우 제한 시간  메모리에 서로 다른 값을 사용해야 할 수 있습니다.

7.    [Save]를 선택합니다.

8.    1-7단계를 반복하여 다른 함수를 생성합니다. 이 함수가 EC2 인스턴스를 시작하도록 조금 다르게 다음을 수행합니다.

3단계에서, EC2 인스턴스를 시작하는 데 사용될 함수의 [Function name]을 입력합니다. 예를 들어, "StartEC2Instances"를 입력합니다.

5단계에서, 이 코드를 복사하여 코드 편집기의 편집기 창에 붙여넣습니다(lambda_function).

참고: region  instances에 대해 EC2 인스턴스를 중지하는 코드에 사용했던 것과 동일한 값을 사용합니다.

 

import boto3

region = 'us-west-1'

instances = ['i-12345cb6de4f78g9h', 'i-08ce9b2d7eccf6d26']

 

def lambda_handler(event, context):

ec2 = boto3.client('ec2', region_name=region)

ec2.start_instances(InstanceIds=instances)

print 'started your instances: ' + str(instances)

 

Lambda 함수 테스트

1.    Lambda 콘솔에서 [Functions]를 선택합니다.

2.    생성한 함수 중 하나를 선택합니다.

3.    [Actions]를 선택하고 [Test]를 선택합니다.

4.    [Configure test event] 대화 상자에서 [Create new test event]를 선택합니다.

5.    [Event name]을 입력하고 [Create]를 선택합니다.

참고: 테스트 이벤트에 대해 JSON 코드는 변경하지 않아도 됩니다. 함수에서는 사용하지 않습니다.

6.    [Test]를 선택하여 함수를 실행합니다.

7.    생성한 다른 함수에 대해 1 - 6단계를 반복합니다.

팁: 함수가 예상대로 작동하는지 확인하기 위해 테스트 전후에 EC2 인스턴스 상태를 확인할 수 있습니다.

Lambda 함수를 트리거하는 규칙 생성

1.    CloudWatch 콘솔을 엽니다.

2.    왼쪽 탐색 창의 [Events]에서 [Rules]를 선택합니다.

3.    [Create rule]을 선택합니다.

4.    [Event Source]에서 [Schedule]을 선택합니다.

5.    다음 중 하나를 수행합니다.

[Fixed rate of]에 시간 간격(분, 시간 또는 일)을 입력합니다.

[Cron expression]에 인스턴스를 중지할 시기를 Lambda에 알려주는 표현식을 입력합니다. 표현식 구문에 대한 자세한 내용은 규칙에 대한 예약 표현식을 참조하십시오.

참고: Cron 표현식은 UTC로 평가됩니다. 기본 시간대로 표현식을 조정해야 합니다.

6.    [Targets]에서 [Add target]을 선택합니다.

7.    [Lambda function]을 선택합니다.

8.    [Function]에서 EC2 인스턴스를 중지하는 함수를 선택합니다.

9.    [Configure details]를 선택합니다.

10.    [Rule definition]에서 다음을 수행합니다.

[Name]에 규칙을 식별하는 이름(예: "StopEC2Instances")을 입력합니다.

(선택 사항) [Description]에서 이벤트를 설명합니다. 예를 들어, "매일 밤 오후 10시에 EC2 인스턴스 중지"라고 입력할 수 있습니다.

[State]에서 [Enabled] 확인란을 선택합니다.

11.    [Create rule]을 선택합니다.

12.    1-11단계를 반복하여 EC2 인스턴스를 시작하는 규칙을 생성합니다. 이전과 조금 다르게 다음을 수행합니다.

5단계에서, Lambda에 인스턴스 시작 시점을 알려주는 표현식을 [Cron expression]에 입력합니다.

8단계에서, EC2 인스턴스를 시작하는 함수를 [Function]에 선택합니다.

10단계에서, [Rule definition] 아래에 "StartEC2Instances"와 같은 [Name]을 입력하고 선택적으로 "매일 아침 오전 6시에 EC2 인스턴스 시작”과 같은 [Description]을 입력합니다.

 

 

출처 : https://aws.amazon.com/ko/premiumsupport/knowledge-center/start-stop-lambda-cloudwatch/

'AWS' 카테고리의 다른 글

AWS를 활용한 TLS 1.2 미만버전의 인증문제  (0) 2020.10.07
AWS 마이그레이션 사례  (1) 2020.07.07
Bring Your Own IP  (0) 2020.02.27
IoT 서비스 migration  (0) 2020.02.21
AWS 네크워크 TGW(Transit Gateway)기능을 소개합니다.  (0) 2020.02.19