gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 19:04:48 25 4
gpt4 key购买 nike

我完全不熟悉 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})

当我使用 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():"
]
]
}

为了在将文件上传到 test-bucket-3x1 时触发 lambda 函数并将文件复制到 test-bucket-3x2,我需要对我的代码进行哪些更改?

感谢您的宝贵时间。

最佳答案

我将从蓝图 s3-get-object 开始有关从蓝图创建 lambda 的更多信息,请使用 this page :

这是上面蓝图的代码:

console.log('Loading function');

const aws = require('aws-sdk');

const s3 = new aws.S3({ apiVersion: '2006-03-01' });


exports.handler = async (event, context) => {
//console.log('Received event:', JSON.stringify(event, null, 2));

// Get the object from the event and show its content type
const bucket = event.Records[0].s3.bucket.name;
const key = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));
const params = {
Bucket: bucket,
Key: key,
};
try {
const { ContentType } = await s3.getObject(params).promise();
console.log('CONTENT TYPE:', ContentType);
return ContentType;
} catch (err) {
console.log(err);
const message = `Error getting object ${key} from bucket ${bucket}. Make sure they exist and your bucket is in the same region as this function.`;
console.log(message);
throw new Error(message);
}
};

然后你需要更新上面的代码,不仅要获取对象信息,还要复制和删除源,为此你可以引用这个答案:

const moveAndDeleteFile = async (file,inputfolder,targetfolder) => {
const s3 = new AWS.S3();

const copyparams = {
Bucket : bucketname,
CopySource : bucketname + "/" + inputfolder + "/" + file,
Key : targetfolder + "/" + file
};

await s3.copyObject(copyparams).promise();

const deleteparams = {
Bucket : bucketname,
Key : inputfolder + "/" + file
};

await s3.deleteObject(deleteparams).promise();
....
}

来源:How to copy the object from s3 to s3 using node.js

关于python - 将文件从一个 s3 存储桶复制到另一个存储桶的最简单的 lambda 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48286217/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com