问题描述
正在尝试使用Redshift将数据UNLOAD到S3,并使用Lambda函数获取并处理该数据。所有组成部分(UNLOAD、Lambda函数)都正常工作,但Lambda事件触发器(S3:ObjectPUT)从未触发。如果通过控制台手动上传,一切正常。如果运行UNLOAD,数据会出现在存储桶中,但触发事件不会运行。用户已尝试创建/重新创建函数,但无效果。用户想知道是否有其他人遇到过这个问题,是否有什么遗漏的地方。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
根据回答1,如果你在小数据块上进行测试时一切正常,但在更大的实际情况下失败,可能会出现与此类似的情况。大文件几乎肯定是通过S3 Multipart Upload而不是常规的Put操作上传的。这意味着函数目前仅订阅了s3:ObjectCreated:Put事件,你需要将s3:ObjectCreated:CompleteMultipartUpload添加到配置中。
以下是解决方案的步骤:
1. 打开AWS管理控制台,并导航到Lambda函数的页面。
2. 找到你的Lambda函数,并单击它以打开函数配置。
3. 在触发器部分,找到与S3相关的触发器。
4. 确保触发器配置中包含了s3:ObjectCreated:CompleteMultipartUpload事件。
5. 如果没有,请单击“添加触发器”按钮,并选择S3作为触发器类型。
6. 在配置触发器时,选择正确的存储桶和事件类型(s3:ObjectCreated:CompleteMultipartUpload)。
7. 保存更改并测试UNLOAD操作是否触发了Lambda函数。
方案2
如果你的问题仍然存在,你可以尝试以下方法:
1. 确保你的Lambda函数有足够的权限来访问S3存储桶。你可以检查Lambda函数的执行角色,并确保它具有适当的S3访问权限。
2. 检查Lambda函数的日志,看是否有任何错误或警告信息。你可以在AWS管理控制台的Lambda函数页面上找到日志。
3. 尝试重新创建Lambda函数,并确保正确配置了触发器和权限。
4. 如果问题仍然存在,请参考AWS文档或向AWS支持团队寻求帮助。
以上是解决问题的一些常见方法,希望能帮助到你解决问题。如果问题仍然存在,请提供更多详细信息,以便我们能够更好地帮助你。