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

2021.11.26

안녕하세요, 임채정입니다.
이번 블로그에서는 람다 함수의 트리거로 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를 람다 함수 트리거로 추가해서 객체 생성 이벤트가 발생할때 람다 함수를 실행하는 방법에 대해서 정리해봤습니다.