Amazon Web Services

Lambda의 s3-get-object를 통해 S3 모니터링하기

sstdio.h·2017년 7월 2일·조회 7,257

먼저 S3 버킷이 존재해야 한다. 버킷이 없다면 하나 만들자. Lambda 함수와 S3 버킷은 같은 리전에 두는 것이 안전하다. 테스트 이벤트나 실제 트리거에서 리전이 다르면 객체를 찾지 못하는 오류가 날 수 있다.

Lambda 함수 생성

일단 Lambda 메뉴에서 [Create a Lambda function]을 클릭한다.

  • Select blueprint 화면으로 이동한다.
  • Filter에 s3를 입력한다.
  • s3-get-object를 선택한다.

그러면 trigger 설정 화면으로 진입한다. 버킷명을 입력하고 Event type을 설정한다. 일단 테스트를 위해 Object Created (All)을 선택한다. 그리고 하단의 Enable trigger도 체크한다.

설정을 리뷰한 후 [Create Function]을 눌러 함수를 만든다.

Congratulations! Your Lambda function "[내가만든람다함수]" has been successfully created and configured with mysarctests3bucket as a trigger. You can now click on the "Test" button to input a test event and test your function.

테스트

[Test]를 눌러보자. 테스트 이벤트에는 실제 존재하는 버킷명과 파일명이 들어 있어야 한다. 콘솔에서 자동으로 만들어진 샘플 이벤트를 그대로 쓰면, 버킷 이름이나 객체 키가 현재 환경과 달라 실패할 수 있다.

실제 동작까지 확인하려면 S3 버킷에 테스트 파일을 하나 업로드한 뒤 Lambda가 실행되는지 확인한다. Lambda 로그는 CloudWatch Logs에서 확인할 수 있다.

오류가 발생할 때

만약 다음과 같은 에러가 발생한다면?

{
  "errorMessage": "Error getting object [파일명] from bucket [버킷명]. Make sure they exist and your bucket is in the same region as this function."
}

다음 항목을 확인한다.

  • 테스트 이벤트를 수정한다. [Actions] 탭에서 [Configure test event]를 누르면 테스트 이벤트를 수정할 수 있다. 버킷 이름이나 파일명이 실제와 맞지 않을 수 있다.
  • Lambda 함수와 S3 버킷이 같은 리전에 있는지 확인한다.
  • 이 Lambda의 Role에 S3에 접근할 수 있는 적절한 권한이 들어 있는지 확인한다. 테스트 목적으로는 AmazonS3FullAccess를 붙여 확인할 수 있지만, 실제 운영에서는 필요한 버킷과 동작에 대해서만 최소 권한을 주는 것이 좋다.

댓글 0

로그인 후 댓글을 남길 수 있습니다.

아직 댓글이 없습니다.