S3를 람다 함수 트리거로 추가해서 객체 생성 이벤트가 발생할때 람다 함수를 실행시켜봤다.

S3를 람다 함수 트리거로 추가해서 객체 생성 이벤트가 발생할때 람다 함수를 실행시켜봤다.

Clock Icon2021.11.26 07:52

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

안녕하세요, 임채정입니다.
이번 블로그에서는 람다 함수의 트리거로 S3를 설정해서 객체 생성 이벤트가 발생하면 람다함수를 실행하는 방법에 대해서 정리해보겠습니다.

아젠다

  1. 람다 함수 작성
  2. S3 버킷 작성 후 트리거로 추가
  3. S3 이벤트 테스트 및 로그 확인
  4. 마무리

1. 람다 함수 작성

먼저 람다 함수를 작성해주겠습니다.

새로 작성 선택
함수 이름 : lambda-s3-sqs
런타임 : Python 3.9

람다 함수가 작성되었습니다.

추가로 코드를 한번 수정해주겠습니다.
lambda_handler 안쪽에 print(event) 하는 코드를 추가해줍니다.
이 코드를 추가해주는 이유는 뒤에서 람다 함수가 실행되었을 때 발생한 이벤트에 대한 더 자세한 로그를 확인하기 위해서 입니다.

람다 함수 작성 후 코드

import json

def lambda_handler(event, context):
    print(event)
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

함수를 Deploy 해주면 람다 함수의 작성 및 코드 변경을 완료입니다.

2. S3 버킷 작성 후 트리거로 추가

이번에는 S3버킷을 작성하여 람다 함수의 트리거로 추가하는 설정까지 해보겠습니다.

먼저 S3버킷을 작성합니다.

이름만 작성하고 다른 설정은 따로 만지지 않습니다.
이름 : s3-event-20211126

버킷을 작성한 후에 [속성] 탭으로 이동해서 밑으로 내리면 이벤트 알림을 설정할 수 있는 칸이 나옵니다.
여기서 이벤트 생성 알림을 클릭합니다.

이벤트 이름: invokeLambda

이벤트 유형은 모든 객체 생성 이벤트를 선택합니다.

대상 : Lambda 함수
Lambda 함수 지정 : Lambda 함수에서 선택
Lambda 함수 : lambda-s3-sqs(위에서 작성한 람다 함수 선택)

그리고 저장을 해주면 성공적으로 이벤트 알림이 하나 생성되었습니다.

람다 함수에서 확인해보면 트리거 부분에 S3가 추가된 것을 확인 할 수 있습니다.

또한 [구성] 탭의 권한부분에 들어가서 리소스 기반 정책을 확인해보면 트리거로 설정한 S3에 대한 정책이 추가 되어 있는 것을 확인할 수 있습니다.

3. S3 이벤트 테스트 및 로그 확인

다음으로 실제로 객체를 생성하는 테스트를 해보고 람다 함수에서 어떤 이벤트가 발생하는 지 살펴봅시다.

S3에 새로운 객체를 생성합니다.

람다 함수로 돌아와서 [모니터링]탭에 들어가 CloudWatch에서 로그 보기를 클릭해줍니다.

그러면 CloudWatch 페이지로 이동되고, 로그를 확인할 수 있습니다.
로그 스트림에 있는 로그 중 하나를 선택해서 더 자세하게 확인해보겠습니다.

메시지에 Records 라고 적힌 이벤트를 확인해보면 다양한 정보를 확인할 수 있습니다.

{'Records': [{'eventVersion': '2.1', 'eventSource': 'aws:s3', 'awsRegion': 'ap-northeast-2', 'eventTime': '2021-11-25T15:33:31.885Z', 'eventName': 'ObjectCreated:Put', 'userIdentity': {'principalId': 'AWS:AROA3DULRMV2KZDIEM6JT:cm-lim.chaejeong'}, 'requestParameters': {'sourceIPAddress': '122.38.73.237'}, 'responseElements': {'x-amz-request-id': 'NYW8MJ1Z7A492HR9', 'x-amz-id-2': 'UPGucq2FPjAOUL30Cj8Qs1A1txP4gn4+6OPU/ZNl/R8oBQhaqfCbAemoFJwLvQ1Rdd0SdxdnWT2575MHAR1skg+UBB/EesiJ'}, 's3': {'s3SchemaVersion': '1.0', 'configurationId': 'invokeLambda', 'bucket': {'name': 's3-event-20211126', 'ownerIdentity': {'principalId': 'A1SJWXS7HOTAF5'}, 'arn': 'arn:aws:s3:::s3-event-20211126'}, 'object': {'key': 'test.png', 'size': 1844899, 'eTag': 'e3b11cd3cbe00b7b1b5d029d1651d144', 'sequencer': '00619FACCBC706584B'}}}]}

예를 들면
어떤 리전에서 실행되었는지 : 'awsRegion': 'ap-northeast-2'
이벤트 실행된 시간 : 'eventTime': '2021-11-25T15:33:31.885Z'
이벤트 유형 : 'eventName': 'ObjectCreated:Put'
이벤트가 실행된 버킷 이름 : 'name': 's3-event-20211126'
생성된 객체에 대한 정보 : 'object': {'key': 'test.png', 'size': 1844899 ,,,}
등의 정보를 확인할 수 있습니다.

4. 마무리

지금까지 S3를 람다 함수 트리거로 추가해서 객체 생성 이벤트가 발생할때 람다 함수를 실행하는 방법에 대해서 정리해봤습니다.

この記事をシェアする

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.