AWS

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

아이엔소프트 2020. 3. 5. 15:48

중지 및 시작하려는 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/