结合 Amazon S3 使用 AWS Lambda - AWS Lambda

结合 Amazon S3 使用 AWS Lambda

您可以使用 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": "DOC-EXAMPLE-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 触发器时,该控制台将修改基于资源的策略以允许 Amazon S3 在存储桶名称和账户 ID 匹配时调用函数。如果您在 Amazon S3 中配置通知,请使用 Lambda API 更新策略。您还可以使用 Lambda API 向另一个账户授予权限,或将权限限制到指定的别名。

如果您的函数使用AWS开发工具包来管理 Amazon S3 资源,则其执行角色也需要 Amazon S3 权限。