Lambda로 Amazon S3 이벤트 알림 처리하기
Lambda로 Amazon S3 이벤트 알림 처리하기
Lambda를 사용해 Amazon Simple Storage Service의 이벤트 알림을 처리할 수 있어요. Amazon S3는 객체가 생성되거나 삭제될 때 Lambda 함수에 이벤트를 보낼 수 있습니다. 버킷에 알림 설정을 구성하고, 함수의 리소스 기반 권한 정책에서 Amazon S3가 함수를 호출할 권한을 부여해야 합니다.
본문
경고
Lambda 함수가 자신을 트리거하는 것과 동일한 버킷을 사용하면 함수가 루프로 실행될 수 있어요. 예를 들어 버킷이 객체가 업로드될 때마다 함수를 트리거하고, 함수가 그 버킷에 객체를 업로드한다면, 함수는 간접적으로 자기 자신을 트리거하게 됩니다. 이를 피하려면 버킷 두 개를 사용하거나, 트리거가 들어오는 객체용 프리픽스에만 적용되도록 구성하세요.
Amazon S3는 객체에 대한 세부 정보를 담은 이벤트와 함께 함수를 비동기적으로 호출합니다. 다음 예시는 배포 패키지가 Amazon S3에 업로드되었을 때 Amazon S3가 보낸 이벤트입니다.
예시 Amazon S3 알림 이벤트
{
"Records": [
{
"eventVersion": "2.1",
"eventSource": "aws:s3",
"awsRegion": "us-east-2",
"eventTime": "2019-09-03T19:37:27.192Z",
"eventName": "ObjectCreated:Put",
"userIdentity": {
"principalId": "AWS:AIDAINPONIXQXHT3IKHL2"
},
"requestParameters": {
"sourceIPAddress": "205.255.255.255"
},
"responseElements": {
"x-amz-request-id": "D82B88E5F771F645",
"x-amz-id-2": "vlR7PnpV2Ce81l0PRw6jlUpck7Jo5ZsQjryTjKlc5aLWGVHPZLj5NeC6qMa0emYBDXOo6QBU0Wo="
},
"s3": {
"s3SchemaVersion": "1.0",
"configurationId": "828aa6fc-f7b5-4305-8584-487c791949c1",
"bucket": {
"name": "amzn-s3-demo-bucket",
"ownerIdentity": {
"principalId": "A3I5XTEXAMAI3E"
},
"arn": "arn:aws:s3:::lambda-artifacts-deafc19498e3f2df"
},
"object": {
"key": "b21b84d653bb07b05b1e6b33684dc11b",
"size": 1305107,
"eTag": "b21b84d653bb07b05b1e6b33684dc11b",
"sequencer": "0C0F6F405D6ED209E1"
}
}
}
]
}
함수를 호출하기 위해 Amazon S3는 함수의 리소스 기반 정책에서 권한이 필요합니다. Lambda 콘솔에서 Amazon S3 트리거를 구성하면, 버킷 이름과 계정 ID가 일치할 때 Amazon S3가 함수를 호출할 수 있도록 콘솔이 리소스 기반 정책을 수정합니다. Amazon S3에서 알림을 구성하는 경우 Lambda API로 정책을 업데이트합니다. Lambda API를 사용해 다른 계정에 권한을 부여하거나 지정된 별칭(alias)으로 권한을 제한할 수도 있어요.
함수가 AWS SDK로 Amazon S3 리소스를 관리한다면, 실행 역할에도 Amazon S3 권한이 필요합니다.