먼저 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를 붙여 확인할 수 있지만, 실제 운영에서는 필요한 버킷과 동작에 대해서만 최소 권한을 주는 것이 좋다.