我有一个Lambda函数,当文件夹对象出现时会触发该函数,例如
67459e53-20cb-4e7d-8b7a-10e4cd165a44
在根存储桶中创建。
在根目录中也是index.json
,即内容索引-这些文件夹的简单数组。例如,{folder1,folder2,...,folderN}。
每次添加文件夹对象(如上)时,Lambda函数都会触发,获取index.json
,将新的文件夹对象添加到JSON数组,然后放回index.json
。
很明显,此createObject
事件将触发相同 Lambda函数。
下面的我的代码(如果是文件夹)应该仅处理事件对象;即结尾处带有/
的键对象。 (stackoverflow用户很友好,可以为我提供此解决方案。)
我已经用lambda-local
在本地测试了此代码,一切看起来都不错。我担心的是(敬畏上帝),我可能会遭受RUNAWAY执行。
我已经搜索了Lambda最佳实践,并搜索了“无限循环”之类的内容,但是找不到确保我的Lambda每天执行不超过50次的方法。
是的,我可以让实际上创建该文件夹的Lambda也写入index.json
,但是Lambda是AWS Video-on-Demand参考示例的一部分,但我还不太了解。 / p>
两个问题:我可以在S3中配置通知,使其按/
的后缀// dependencies
var async = require('async');
var AWS = require('aws-sdk');
var util = require('util');
// constants
const VOD_DEST_FOLDER = 'my-triggering-bucket'; //not used bc part of event object
const CONTENT_INDEX_FILENAME = 'index.json';
// get reference to S3 client
var s3 = new AWS.S3();
exports.handler = async (event) => {
try {
console.log('Event', JSON.stringify(event));
// Bucket name.
const triggerBucket = event.Records[0].s3.bucket.name;
// New folder key added.
const newKey = event.Records[0].s3.object.key;
// Add newKey to content index ONLY if it is a folder object. If any other object
// is added in the bucket root then it won't result in new write.
if (newKey.indexOf('/') > -1) {
// Get existing data.
let existing = await s3.getObject({
Bucket: triggerBucket,
Key: CONTENT_INDEX_FILENAME
}).promise();
// Parse JSON object.
let existingData = JSON.parse(existing.Body);
// Get the folder name.
const folderName = newKey.substring(0, newKey.indexOf("/"));
// Check if we have an array.
if (!Array.isArray(existingData)) {
// Create array.
existingData = [];
}
existingData.push(folderName);
await s3.putObject({
Bucket: triggerBucket,
Key: CONTENT_INDEX_FILENAME,
Body: JSON.stringify(existingData),
ContentType: 'application/json'
}).promise();
console.log('Added new folder name ' + folderName);
return folderName;
} else {
console.log('Not a folder.');
return 'Ignored';
}
}
catch(err) {
return err;
}
};
过滤(随机文件夹键名带有a)
here?和/或如何在控制台中配置此Lambda以完全防止执行失控?
http://localhost:44389
答案 0 :(得分:0)
您可以配置S3 notifications with key name filtering。这是有关如何在网络控制台中进行操作的step by step guide。我认为,如果将"""
MAIN LOOP
"""
play_again = "yes"
while play_again == "yes" or play_again == "y":
a() # user makes a choice
choice = choose_ans()
check_ans_a(choice)
if choice == "1" # player dies
play_again = input('Play again?\n'
'(y)es ')
continue # restarts loop
b()
choice = choose_ans()
check_ans_b(choice)
后缀过滤器添加到触发Lambda的通知中,您将实现目标。