실습 시나리오
1. 이미 구성해 둔 Auto Scaling group이 있다
2. Auto scaling 을 트리거 하여 스케일아웃하고 새로운 Amazon EC2 인스턴스를 실행한다
3. 이 인스턴스가 Amaozn simple notification service(SNS) 주제로 알람을 전송한다
4. SNS 주제는 다음 작업을 수행하는 AWS Lambda 함수를 트리거 한다
a) 인스턴스에 연결된 Amazon EBS 함수를 트리거 한다.
b)인스턴스에 태그를 추가한다.
c) Amazon cloudwatch 로그에 대한 정보를 전송한다
-Auto scaling 이벤트에 대한 알람의 대상이 되는 SNS 주제를 생성한다
-새 Amazon ec2 인스턴스가 시작되면 알람을 전송하도록 Auto Scaling 그룹을 구성한다
-Lambda 함수가 필요한 권한을 보유한 IAM 역할을 구성한다.
-Amazon SNS 주제로부터 Auto Scaling 이벤트가 발생했다는 메시지를 수신하면 호출되는 AWS Lambda 함수를 생성한다
실습)
1.SNS생성
SNS에 들어가 Standard로 생성
2.Auto scaling을 구성하여 이벤트 전송
(lambda를 하실 정도라면 Auto scaling group은 당연히 알고 있다는 가정)
이런식으로 아까 만들었던 SNS topic을 선택해 주고
event types로는
launch:시작함
terminate:종료함
fail to launch: 시작을 실패하다
fail to terminate: 종료를 실패하다
즉 우리는 launch를 선택해서
이제 ASG 안에서 ec2가 시작이 되면
SNS topic에 신호가 가는 그런 구조가 될 것이다
3.Lambda 함수를 위한 IAM 역할 생성
ec2 인스턴스에서 작업을 수행하고 Amazon Cloudwatch 로그에 메시지를 기록할 권한이 있는 Iam role을 생성한다
1.step
2.step
이렇게 ec2의 모든 권한과 lambda 가 cloudwatch 로그에 파일을 보낼 수 있는 권한을 부여하는 정책을 첨부했다
본인이 이름 정하고 create
이제 이 role을 적용할 lambda 함수를 만들어 보겠다
이런식으로 만들어준다
제공해준 함수를 입력해 준다
from __future__ import print_function
import json, boto3
def lambda_handler(event, context):
print("Received event: " + json.dumps(event, indent=2))
# Auto Scaling 이벤트 알림에서 EC2 인스턴스 ID 추출
message = event['Records'][0]['Sns']['Message']
autoscalingInfo = json.loads(message)
ec2InstanceId = autoscalingInfo['EC2InstanceId']
# 인스턴스에 연결된 모든 EBS 볼륨의 스냅샷
ec2 = boto3.resource('ec2')
for v in ec2.volumes.filter(Filters=[{'Name': 'attachment.instance-id', 'Values': [ec2InstanceId]}]):
description = 'Autosnap-%s-%s' % ( ec2InstanceId, v.volume_id )
if v.create_snapshot(Description = description):
print("\t\tSnapshot created with description [%s]" % description)
# EC2 인스턴스에 태그 추가: Key = Snapshots, Value = Created
ec2 = boto3.client('ec2')
response = ec2.create_tags(
Resources=[ec2InstanceId],
Tags=[{'Key': 'Snapshots', 'Value': 'Created'}]
)
print ("***Tag added to EC2 instance with id: " + ec2InstanceId)
# 완료!
return ec2InstanceId
1. 알림 메시지로부터 EC2 인스턴스 ID 추출
2. 인스턴스에 연결된 모든 EBS 볼륨의 스냅샷 생성
3. 인스턴스에 태그를 추가하여 스냅샷이 생성된 것을 나타냄.
function > configuration > permissions > execution role
한에
add trigger에 가서
add 눌러주면 된다
모든 준비는 끝이 났다
이제 트리거만 해주자!
4.last Test
우리가 설정한 것들이 잘 작동이 되는지 확인을 해봐야겠다
Details > edit 이다
Desired capcity를 한 번 올려주면
이런식으로 새 ec2 인스턴스가 보인다
일단 이 상태가 successful 이 될 때까지 기다린다. successful 이 되면 lambda 함수가 실행되었는지 알 수 있다
결과는 이러하다
우리가 함수를 입력해준대로 잘 되었다
근데 아직 궁금한 것이 있다면
함수에서 event을 받을 때 json 값을 어떤 걸 받아오는지가 궁금하다
출처:
https://base-on.tistory.com/197
(AWS자격증)람다 트리거 만들기 실습
람다 트리거 만들기 실습 시작 SNS 단위 토픽 오토스케일링 그룹 설정 오토스케일링 알림설정 Iam에서 룰설정 Lambda 설정 --------------------------- #-*- coding: utf-8 -*- # Snap_and_Tag La..
base-on.tistory.com
'공개' 카테고리의 다른 글
DynamoDB개념 (0) | 2022.02.23 |
---|---|
KMS란 (1) | 2022.02.22 |
event pattern 에 대해서 (0) | 2022.02.21 |
ELB의 로그 S3 버킷에 저장 (0) | 2022.02.17 |
cloudwatch event (0) | 2022.02.16 |