【问题标题】:How can I upload the csv files from Lambda to an S3 bucket? "[ERROR] KeyError: 'Records' and my lambda function is also not getting triggered by s3如何将 CSV 文件从 Lambda 上传到 S3 存储桶? “[错误] KeyError:'记录'和我的 lambda 函数也没有被 s3 触发
【发布时间】:2020-02-06 13:25:09
【问题描述】:

我从 S3 中提取了一个包含多个工作表的 Excel 文件,我将每个工作表转换为 csv 格式并在将其上传到另一个 S3 存储桶之前进行简单的清理。

到目前为止,这是我的 Lambda 函数代码,但我不知道如何将每张工作表的 csv 文件上传到 S3。

我也想用Nan更改excel文件中的空单元格,但我不知道怎么做。

更新:我尝试了以下答案的解决方案。我收到“errorMessage”:“'Records'”,“errorType”:“KeyError”。我的 lambda 函数也没有被 s3 触发。

【问题讨论】:

  • 您是如何配置触发器的?您是在 S3 管理控制台中进行的吗?你能告诉我们配置吗?
  • 我在我的 lambda 函数中添加了触发器作为 s3,我想从事件类型中提取 excel 文件的存储桶名称为所有对象创建事件
  • 您可以从 S3 存储桶或在 Lambda 函数控制台中配置触发器。是什么让您认为该功能没有被触发?该函数的 Amazon CloudWatch Logs 中显示了什么? (Accessing Amazon CloudWatch Logs for AWS Lambda)
  • 它在 CloudWatch Logs 上没有显示任何内容,这就是我认为它没有被触发的原因。也许是因为它给了我“记录”的错误
  • 确保分配给 Lambda 函数的角色具有AWSLambdaBasicExecutionRole 策略,该策略授予写入 CloudWatch Logs 的权限。如果这没有帮助,请从 S3 管理控制台配置触发器,以确保其配置正确。此外,查看 Lambda 监控选项卡 以查看是否有任何函数调用。如果做不到这一切,我建议临时创建一个新函数,该函数只是将消息记录到 CloudWatch Logs,配置触发器并确认它有效。然后,将其与您现有的函数进行比较。

标签: python excel amazon-web-services amazon-s3 aws-lambda


【解决方案1】:

您可以将文件存储在 Lambda 的本地文件系统中的 /tmp/ 目录中。有 500MB 的限制,因此请在使用完这些文件后将其删除。

因此,当您创建文件时,请将其放在该目录中:

with open("/tmp/data%s.csv" %(sheet6.name.replace(" ","")), "w", encoding='utf-8') as file:

然后您可以使用upload_file(file, bucket, key) 将其上传到 Amazon S3:

s3.upload_file('/tmp/data1.csv', 'mybucket', 'data1.csv')

这是我用于提取触发 Lambda 函数的 Bucket 和 Key 的一些代码:

import urllib

def lambda_handler(event, context):

  bucket = event['Records'][0]['s3']['bucket']['name']
  key = urllib.parse.unquote_plus(event['Records'][0]['s3']['object']['key'])
  ...

【讨论】:

    猜你喜欢
    • 2017-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-25
    • 1970-01-01
    • 2021-07-08
    • 2021-04-19
    相关资源
    最近更新 更多