【发布时间】:2022-01-24 05:05:09
【问题描述】:
我正在尝试在 S3 存储桶中的文件创建事件中自动将文件从一个文件夹移动到同一 S3 存储桶中的另一个文件夹。
我希望使用 Lambda 函数的触发器来执行此操作,但我觉得 Lambda 在根目录级别触发,不能在文件夹级别使用它。
例子:
Bucket Name: my-only-s3-bucket
Source Folder: s3://my-only-s3-bucket/Landing
Target Folder: s3://my-only-s3-bucket/Staging
要求:
当文件被创建或上传到源文件夹:s3://my-only-s3-bucket/Landing,它应该会自动移动到s3://my-only-s3-bucket/Staging,无需任何人工干预
如何做到这一点?
【问题讨论】:
-
您可以在 Amazon S3 触发器上指定
Prefix以仅调用给定前缀/文件夹的 Lambda 函数。如果您确实在根级别触发,请确保函数不会通过将对象复制到子文件夹来导致无限循环,然后该子文件夹将再次调用 Lambda 函数。只能通过移动在根级别(没有子文件夹)创建的对象来剪切此循环。但是,您需要在文件夹之间移动,所以这不是问题。 -
谢谢。但是我有一个外部系统,它仅将 CSV 文件写入根文件夹(将其写入 S3 中的子文件夹有限制)。现在我的 Lambda 函数应该将这些从根文件夹移动到位于同一 S3 存储桶根目录中的子文件夹(因为我的组织的云管理员不喜欢创建多个存储桶的想法,我对此没有发言权)。我唯一担心的是这种递归。由于我是 AWS 新手,能否以某种方式实现?提前致谢。
-
您可以在 Lambda 函数的开头添加一些逻辑,即
if '/' not in Key:然后执行此操作。这表示“仅当文件名中没有 no 斜杠时才进行移动”。示例见:Moving file based on filename with Amazon S3 -
完美,这听起来是个不错的计划。我会尝试并确认。非常感谢
标签: amazon-web-services amazon-s3 aws-lambda automation file-transfer