可以使用AWS S3的事件通知功能来检测实际文件更改。您可以设置一个Lambda函数作为事件通知的目标,当S3桶中的对象被更改时,Lambda函数会被触发。
以下是一个使用AWS SDK for Python(Boto3)的示例代码,演示如何设置S3事件通知和Lambda函数来检测实际文件更改:
import json
def lambda_handler(event, context):
# 从事件中提取出桶名称和对象键
bucket = event['Records'][0]['s3']['bucket']['name']
key = event['Records'][0]['s3']['object']['key']
# 打印出桶名称和对象键
print(f'Bucket: {bucket}, Key: {key}')
# 在这里执行您的检测逻辑
# 比较新旧文件内容、大小、属性等
return {
'statusCode': 200,
'body': json.dumps('File change detected!')
}
import boto3
def set_s3_event_notification(bucket):
s3_client = boto3.client('s3')
# 设置事件通知配置
response = s3_client.put_bucket_notification_configuration(
Bucket=bucket,
NotificationConfiguration={
'LambdaFunctionConfigurations': [
{
'LambdaFunctionArn': 'arn:aws:lambda:REGION:ACCOUNT_ID:function:YOUR_LAMBDA_FUNCTION_NAME',
'Events': ['s3:ObjectCreated:*', 's3:ObjectRemoved:*']
}
]
}
)
print(response)
请确保替换代码中的以下参数:
REGION:您的AWS区域(例如,us-east-1)ACCOUNT_ID:您的AWS账户IDYOUR_LAMBDA_FUNCTION_NAME:您的Lambda函数名称bucket:您要设置事件通知的S3桶名称set_s3_event_notification函数来设置S3事件通知:set_s3_event_notification('your-bucket-name')
请将your-bucket-name替换为您要设置事件通知的实际S3桶名称。
当S3桶中的对象被更改时,Lambda函数将被触发,并打印出桶名称和对象键。您可以在Lambda函数中执行任何其他的文件更改检测逻辑。