AWS Lambda 使用文件版本控制列出 S3 存储桶对象和子目录
AWS Lambda to list S3 bucket objects and subdirectories inside with file versioning
我是 lambda 的新手,正在尝试列出具有嵌套子目录的 S3 存储桶对象,结构如下:
- mybucket/folder1/project1/samplev1.txt
- mybucket/folder1/project1/sampleVer2.txt
- mybucket/folder2/
- mybucket/folder3/
这是我的 lambda 代码:
const AWS = require('aws-sdk');
const s3 = new AWS.S3();
exports.handler = async (event) => {
const allKeys = [];
await getKeys({ Bucket: 'ru-mybucket' }, allKeys);
console.log(allKeys)
return allKeys;
};
async function getKeys(params, keys){
const response = await s3.listObjectsV2(params).promise();
response.Contents.forEach(obj => keys.push(obj.Key));
if (response.IsTruncated) {
const newParams = Object.assign({}, params);
newParams.ContinuationToken = response.NextContinuationToken;
await getKeys(newParams, keys); // RECURSIVE CALL
}
}
该函数列出我存储桶中的所有对象键及其嵌套子目录和文件,问题是如何列出嵌套对象,包括它们的版本,我该如何实现?在我的代码中的何处添加 (listObjectVersions) 以能够遍历具有版本的对象?
我已经为你做了这个code,在这个例子中你可以看到单元测试及其实现(apigateway)。
基本上,我从我的存储桶中检索了所有密钥,然后迭代它们。最后我得到了所有对象,我查询 s3.listObjectsV2 传递两个参数 bucket 和 key。
下面一段伪代码:
s3.listObjectsV2({ Bucket: your_bucket, MaxKeys: 1000 }).forEach( element => {
s3.listObjectVersions({ Bucket: your_bucket, Prefix: element.Key})
})
为此,您可以 运行 代码示例,您必须 运行 以下命令:
npm install
npm run deploy
为此你可以测试代码:
npm run test
别忘了放你的水桶:
./package.json
./tests/test.js
重要提示:我使用 serverless framework 作为此解决方案。
我是 lambda 的新手,正在尝试列出具有嵌套子目录的 S3 存储桶对象,结构如下:
- mybucket/folder1/project1/samplev1.txt
- mybucket/folder1/project1/sampleVer2.txt
- mybucket/folder2/
- mybucket/folder3/
这是我的 lambda 代码:
const AWS = require('aws-sdk');
const s3 = new AWS.S3();
exports.handler = async (event) => {
const allKeys = [];
await getKeys({ Bucket: 'ru-mybucket' }, allKeys);
console.log(allKeys)
return allKeys;
};
async function getKeys(params, keys){
const response = await s3.listObjectsV2(params).promise();
response.Contents.forEach(obj => keys.push(obj.Key));
if (response.IsTruncated) {
const newParams = Object.assign({}, params);
newParams.ContinuationToken = response.NextContinuationToken;
await getKeys(newParams, keys); // RECURSIVE CALL
}
}
该函数列出我存储桶中的所有对象键及其嵌套子目录和文件,问题是如何列出嵌套对象,包括它们的版本,我该如何实现?在我的代码中的何处添加 (listObjectVersions) 以能够遍历具有版本的对象?
我已经为你做了这个code,在这个例子中你可以看到单元测试及其实现(apigateway)。
基本上,我从我的存储桶中检索了所有密钥,然后迭代它们。最后我得到了所有对象,我查询 s3.listObjectsV2 传递两个参数 bucket 和 key。
下面一段伪代码:
s3.listObjectsV2({ Bucket: your_bucket, MaxKeys: 1000 }).forEach( element => {
s3.listObjectVersions({ Bucket: your_bucket, Prefix: element.Key})
})
为此,您可以 运行 代码示例,您必须 运行 以下命令:
npm install
npm run deploy
为此你可以测试代码:
npm run test
别忘了放你的水桶:
./package.json
./tests/test.js
重要提示:我使用 serverless framework 作为此解决方案。