小编Tke*_*lly的帖子

将文件从一个 s3 存储桶复制到另一个存储桶的最简单 lambda 函数

我完全是一个不喜欢使用 AWS 的菜鸟。我试图让一个非常简单和基本的操作工作。我想要做的是,将文件上传到一个 s3 存储桶后,我希望该上传触发一个 Lambda 函数,该函数将该文件复制到另一个存储桶。

我转到 AWS 管理控制台,在 us-west2 服务器上创建了一个名为“test-bucket-3x1”的 s3 存储桶作为我的“源”存储桶,另一个称为“test-bucket-3x2”作为我的“目标”存储桶. 创建这些存储桶时,我没有更改或修改任何设置。

在 Lambda 控制台中,我为“test-bucket-3x1”创建了一个 s3 触发器,将“事件类型”更改为“ObjectCreatedByPut”,并且没有更改任何其他设置。

这是我的实际 lamda_function 代码:

import boto3
import json
s3 = boto3.resource('s3')


def lambda_handler(event, context):
    bucket = s3.Bucket('test-bucket-3x1')
    dest_bucket = s3.Bucket('test-bucket-3x2')
    print(bucket)
    print(dest_bucket)

    for obj in bucket.objects():
        dest_key = obj.key
        print(dest_key)
        s3.Object(dest_bucket.name, dest_key).copy_from(CopySource = {'Bucket': obj.bucket_name, 'Key': obj.key})
Run Code Online (Sandbox Code Playgroud)

当我使用 AWS Lambda 控制台提供的基本“HelloWorld”测试测试此函数时,我收到了“

{
  "errorMessage": "'s3.Bucket.objectsCollectionManager' object is not callable",
  "errorType": "TypeError",
  "stackTrace": [
    [
      "/var/task/lambda_function.py",
      12,
      "lambda_handler",
      "for obj in bucket.objects():"
    ] …
Run Code Online (Sandbox Code Playgroud)

python amazon-s3 amazon-web-services aws-lambda

6
推荐指数
1
解决办法
2万
查看次数

AWS Lambda 和 S3 和 Pandas - 将 CSV 加载到 S3,触发 Lambda,加载到 Pandas,放回存储桶?

我是 AWS 和 lambda 的菜鸟,所以如果这是一个愚蠢的问题,我深表歉意。我希望能够做的是将电子表格加载到 s3 存储桶中,根据该上传触发 lambda,让 lambda 将 csv 加载到 Pandas 中并对其进行处理,然后将数据帧写回 csv 到第二个 s3桶。

我已经阅读了很多关于压缩 python 脚本和所有库和依赖项并上传的内容,这是一个单独的问题。我还想出了如何在将文件上传到 S3 存储桶时触发 lambda 并自动将该文件复制到第二个 s3 存储桶。

我无法找到任何信息的部分是中间部分,将文件加载到熊猫中并在 lambda 函数内操作熊猫中的文件。

第一个问题:这样的事情甚至可能吗?第二个问题:如何从 s3 存储桶中“抓取”文件并将其加载到 Pandas 中?会是这样吗?

import pandas as pd
import boto3
import json
s3 = boto3.resource('s3')

def handler(event, context):
     dest_bucket = s3.Bucket('my-destination-bucket')
     df = pd.read_csv(event['Records'][0]['s3']['object']['key'])
     # stuff to do with dataframe goes here

     s3.Object(dest_bucket.name, <code for file key>).copy_from(CopySource = df)
Run Code Online (Sandbox Code Playgroud)

? 我真的不知道这是否接近正确并且是在黑暗中完成的拍摄。任何和所有的帮助都会非常感激,因为我很明显超出了我的能力!

python amazon-s3 amazon-web-services pandas aws-lambda

5
推荐指数
1
解决办法
4542
查看次数