从 S3 中删除对象时触发 Lambda 函数

Trigger Lambda function when object is deleted from S3

我有一个 SFTP 服务器和 Lambda 函数。当对象上传到 S3 时会触发 Lambda 函数,对象会自动通过 SFTP 上传到 SFTP 服务器。 (我正在使用 pysftp)

是否可以创建一个 Lambda 函数,一旦对象从 S3 中删除就会触发并自动从服务器中删除它?

import pysftp,os,boto3

cnopts = pysftp.CnOpts()
cnopts.hostkeys = None

myHostname = os.environ.get('SFTP_HOST')
myUsername = os.environ.get('SFTP_USER')
myPassword = os.environ.get('SFTP_PASS')

s3 = boto3.client("s3")

def lambda_handler(event, context):

    # Get the records for the triggered event
    FILEOBJ = event["Records"][0]
    BUCKET_NAME = str(FILEOBJ['s3']['bucket']['name'])
    KEY = str(FILEOBJ['s3']['object']['key'])
    FILE_NAME = os.path.basename(KEY)

    with pysftp.Connection(host=myHostname, username=myUsername, password=myPassword, cnopts=cnopts) as sftp:
      with sftp.cd('data/uploads'):
        remote_file = FILE_NAME
        sftp.remove(remote_file)

您可以使用事件类型为 s3:ObjectRemoved:* 的 S3 事件并触发 Lambda 函数。

https://docs.aws.amazon.com/AmazonS3/latest/userguide/notification-how-to-event-types-and-destinations.html

如果您想使用与 S3 上传相同的功能,您可以在 event 中找到并使用 Lambda 函数的信息,例如 eventName': 'ObjectCreated:PuteventName': 'ObjectRemoved:Delete