Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 将参数从S3触发器传递到Lambda函数_Amazon Web Services_Amazon S3_Aws Lambda - Fatal编程技术网

Amazon web services 将参数从S3触发器传递到Lambda函数

Amazon web services 将参数从S3触发器传递到Lambda函数,amazon-web-services,amazon-s3,aws-lambda,Amazon Web Services,Amazon S3,Aws Lambda,使用AWS云服务,我使用S3触发器监视一个bucket并调用Lambda函数。然后,此函数将拾取S3对象以填充DynamoDB表 问题是,我现在需要监控多个目录的更改,每个目录都有元数据(对象中不可用),需要传递给DynamoDB。我不知道如何将这个元信息从触发器传递到lambda。我目前为每个目录复制了Lambda,并将元信息保存为每个Lambda的环境变量。这是可行的,但感觉像一个可怕的黑客 如何使用一个Lambda来监视多个目录,将元参数从触发器传递到Lambda?遗憾的是,您无法向S3通

使用AWS云服务,我使用S3触发器监视一个bucket并调用Lambda函数。然后,此函数将拾取S3对象以填充DynamoDB表

问题是,我现在需要监控多个目录的更改,每个目录都有元数据(对象中不可用),需要传递给DynamoDB。我不知道如何将这个元信息从触发器传递到lambda。我目前为每个目录复制了Lambda,并将元信息保存为每个Lambda的环境变量。这是可行的,但感觉像一个可怕的黑客


如何使用一个Lambda来监视多个目录,将元参数从触发器传递到Lambda?

遗憾的是,您无法向S3通知记录添加额外信息。但是,如果文件夹是同一个bucket的一部分,那么拥有一个lambda可能是一种选择 在我看来,够了

这是基于这样一个事实,即您可以根据S3对象的前缀来区分不同的目录

例如,如果将以下文件上载到bucket:

dir1/file1.csv
dir2/file3.txt
你的lambda会被触发。在lambda中,您可以使用basic
if-else
匹配来检查对象前缀是否为
dir1
dir2
。基于此,您可以选择不同的元数据写入dynamodb

非常粗略地说,基于两个文件夹,在lambda函数中可以有(伪代码):

您基本上是这样做的,但是通过env变量将元数据传递给不同的lambda函数。显然,如果要监视多个文件夹,则可以将元数据存储在lambda之外,例如,存储在其他dynamodb表中,或者如果元数据经常更改,则存储在参数存储中


希望这有帮助。

lambda functions事件中object.key字段的目录部分不是吗?这证实了这一点。我想避免Lambda中的代码逻辑。还原为将元数据存储在表中并通过目录结构中的键引用的方法,即使用文件的最后一个目录作为键来获取元数据。不漂亮,但我们最好的。谢谢你的确认。
if object_key.beinswith('dir1'):
    metadata = {some_metatadata_for_dir1}
elif object_key.beinswith('dir2'):
    metadata = {some_metatadata_for_dir2}

dynamodb.put_item({object_key + metadata})