-
[AWS] Lambda 실습2 (Lambda 함수 실행 / cloudwatch)AWS 2024. 2. 13. 20:19
파이프라인
Lambda를 하나 만들고 이 Lambda가 S3 버킷을 24시간 지켜볼 것이다.
S3에 어떤 Object가 업로드, putObject 이벤트가 발생할 시 이 Lambda 함수를 Lambda 해라.
만약 S3 버킷에 날씨 온도에 관한 JSON 파일이 실시간으로 업로드가 된다고 가정해보자.
만약에 측정된 온도가 특정 임계값을 넘는다면 그 온도는 언제 측정됐고, 주의를 하라는 메시지를 출력하게끔 해줄 것
만약 온도가 임계값 밑이라면 주의를 줄 필요가 없기 때문에 특별한 메시지를 출력하지 않는 로직을 Lambda 함수가 담당할 것.
첫번째로 위치설정이 서울로 되어있는지 확인해준다.
https://ap-northeast-2.console.aws.amazon.com/lambda/home?region=ap-northeast-2#/functions
https://ap-northeast-2.console.aws.amazon.com/lambda/home?region=ap-northeast-2#/functions
ap-northeast-2.console.aws.amazon.com
그리고 Lambda 대시보드로 들어가준다. 그리고 함수 생성.
지난 실습과는 달리 블루프린트가 아닌 새로 작성해서 함수를 만들어보자.
함수 이름 : high_temperature_detection_lambda
런타임은 Python으로 진행.
아키텍처 : x86_64
⭡ x86_64과 arm64의 차이
권한 : 만들 Lambda 함수가 S3 버킷의 특정 행동을 감지해야하는 권한을 가지고 있어야된다.
만들 Lambda의 필요한 권한은 AWS 정책 템플릿에 우리가 필요한 권한은 이미 들어있다.
따라서, AWS 정책 템플릿에서 새 역할 생성을 선택했다.
역할 이름 : aws_learner_lambda_role
정책 템플릿 - 선택 사항 :Amazon S3 객체 읽기 전용 권한 S3
import json import boto3 from datetime import datetime client = boto3.client('s3') def lambda_handler(event, context): what_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") bucket = event['Records'][0]['s3']['bucket']['name'] key = event['Records'][0]['s3']['object']['key'] try: response = client.get_object(Bucket=bucket, Key=key) text = response['Body'].read().decode() data = json.loads(text) if data['temperature'] > 40: print(f"Temperature detected : {data['temperature']}C at {what_time}") print("Be careful! It's getting really hot!!") else: print("So far so good") except Exception as e: print(e) raise e
코드 해석
import boto3
⮕ boto3라이브러리 호출 거의 모든 AWS 서비스들이 boto3를 통해서 프로그래밍적으로 리소스를 구현할 수 있다.
client = boto3.client('s3')
⮕ 그러기 위해서 client라는 object를 생성해줬다. S3를 연동할 것이기 때문에 여기에 S3를 넣었다.
what_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
⮕ 현재시간
bucket = event['Records'][0]['s3']['bucket']['name']
key = event['Records'][0]['s3']['object']['key']⮕ event라는 parameter를 통해서 bucket과 key에 대한 정보를 가져오고있다.
lambda_handler
⮕ event, context라는 두가지의 parameter이 있다. event는 lambda 함수가 실행될 때마다 다양한 메타데이터가 딸려 나온다. lambda_handler 함수 몸통(내부)에 printf(event) 넣고 저장하고 돌려보면 이벤트가 어떻게 생겼는지 알 수 있다.
bucket = event['Records'][0]['s3']['bucket']['name']
⮕ event 값에서 Records라는 키 값에 접근해서 버킷 이름과 키를 가져올 수 있는 것이다.
key = event['Records'][0]['s3']['object']['key']
⮕ 여기서의 key란 파일 이름이라고 생각하면된다.
response = client.get_object(Bucket=bucket, Key=key)
⮕ 위 정보들을 가지고 object를 가져오는 get_object라는 함수를 client라는 object에서 사용하고 있다. 여기서 Bucket=bucket과 Key=key를 parameter로 전달하고 있다. 그리고 그 값을 response에 저장한다. 이 response는 JSON 포맷이며 실제 파일에 들어있는 정보는 밑과 같이 읽어올 수 있다.
text = response['Body'].read().decode() data = json.loads(text)
메인로직
if data['temperature'] > 40: print(f"Temperature detected : {data['temperature']}C at {what_time}") print("Be careful! It's getting really hot!!") else: print("So far so good") except Exception as e: print(e) raise e
S3에 올라온 온도가 40도보다 높다면 언제 얼마나 뜨거운 온도가 감지됐는지에 대한 문장이 출력되는 것.
여기서 40은 임계점
else
⮕ 아무 경고 메시지를 출력하지 않고, "So far so good"라는 메시지가 그냥 출력될 것.
Deploy click
S3 버킷 수정
새 버킷 생성
AWS 리전 : 서울
버킷 이름 : awslearner-lambda-temp-trigger22
만약 Lambda 함수의 리젼이 서울이 아닌 다른 곳이라면 S3 버킷도 Lambda와 같은 리전으로 정해주는 것을 권장.
서로 연결되어있는 리소스들의 letency가 발생할 수도 있기 때문
나머지 : default option
버킷 만들기 click
awslearner-lambda-temp-trigger22
현재 상태 : 비어있는 버킷
버킷 속성 변경
이벤트 알림
이벤트 알림 생성 click
이벤트 알림 생성
✹ 일반 구성
이벤트 이름 : awslearner-lambda-temp-event (사용자 원하는대로 작명)
접두사 - 선택 사항 : PASS
접미사 - 선택 사항 : PASS
접두사, 접미사 ⭢ S3 버킷에 특정 파일, 특정 폴더에 대한 이벤트만 감지하고 싶을 때 사용
✹ 이벤트 유형
Object가 버킷에 업로드되는 이벤트가 관심이 있기 때문에 전송 s3:ObjectCreated:Put ⭢ 이걸 선택한다.
그 이외 : 원하는 이벤트 유형에 맞게 정해주면 됨
✹ 대상
버킷에 Object가 업로드되면 실행할 AWS Resource를 정의해야한다.
대상 : Lambda 함수
Lambda 함수 ARN은 대시보드에서 쉽게 찾을 수 있으나 Lambda 함수를 직접 찾는게 훨씬 빠르다.
Lambda 함수 : 위에서 만든 Lambda 함수를 찾아서 선택한다.
변경 사항 저장.
다시 Lambda 함수로.
새로 생긴 S3 버킷.
Lambda 함수의 트리거 역할을 하고 있다.
현재 활성화된 이벤트에 대한 상세 정보를 볼 수 있다.
S3 버킷에 파일 업로드 하기
E3 버킷으로 돌아가서 파일을 업로드해보자.
파일 하나를 업로드를 하였다.
이벤트가 잘 실행되었는지 확인해보자.
Lambda 함수에서 어떤일이 있어났는지 확인해보자.
Lambda 함수들어가서 모니터링 탭으로 가서 CloudWatch metrics(cloudwatch 지표)를 확인해보면
매트릭스에 아무런 정보가 뜨지 않았다
CloudWatch Logs 보기를 눌러준다.
https://eocoring.tistory.com/37
[AWS] CloudWatch 실습
https://aws.amazon.com/ko/ 클라우드 서비스 | 클라우드 컴퓨팅 솔루션| Amazon Web Services 필요한 만큼 이용할 수 있는 것은 물론 필요에 따라 몇 분 만에 확장 또는 축소할 수 있습니다. 자세히 알아보세
eocoring.tistory.com
저번에 실습한 cloudwatch가 열린다.
로그 스트림 (1)에 로그가 하나 생성된 것을 볼 수 있다. click
Temperature detected : 45C at 2024-02-13 11:07:52
메시지 출력
이 두개의 메시지는
코드에서 S3 버킷에 올라온 온도가 45도로 읽혀졌다.
45도는 40도 보다 크기때문에
if문 안에 이 두줄이 출력이 된 것이다.
다시 S3 버킷에 파일 업로드 하기
두번째 파일 ex2.json 파일을 업로드 하였다.
다시 Lambda 함수를 확인해보자.
ex2.json 파일 온도가 40도 미만이기 때문에 "So far so good"이라는 메시지 출력
그래서 코드에서 else절이 실행이 된것이다.
'AWS' 카테고리의 다른 글
[AWS] CloudFront 실습 (1) 2024.02.13 [AWS] CloudFront (0) 2024.02.13 [AWS] Lambda 실습 (Lambda 함수 생성, test) (1) 2024.02.13 [AWS] Lambda (1) 2024.02.13 [AWS] CloudWatch 실습 (1) 2024.02.12