我想不通这个。任何帮助表示赞赏。
我有一个 lambda,它基本上将 HTML 文件从一个 S3 存储桶复制到另一个 S3 存储桶,其中包括一些“魔法”(重用其他 HTML 文件的部分)。
我已经在nodes.js 10中启动并运行了它
exports.handler = async (event, context, callback) => { }
Run Code Online (Sandbox Code Playgroud)
与回调。切换到node.js 12
exports.handler = async (event) => { }
Run Code Online (Sandbox Code Playgroud)
我不得不从回调切换到承诺。
生成的代码适用于 60% 的情况。
exports.handler = async (event) => {
for (var record of event.Records) {
if(record.s3.object.key.indexOf(".") != -1){
if (record.s3.object.key.localeCompare("website/") != 0) {
const objectCopied = await s3.putObject( { Body: (await generateHTML( (await s3.getObject({ Bucket: record.s3.bucket.name, Key: record.s3.object.key }).promise()).Body.toString('utf-8'), record.s3.bucket.name )), Bucket: DestBucket, Key: record.s3.object.key.slice("website/".length), ACL: 'public-read', ContentType: …Run Code Online (Sandbox Code Playgroud) 我想在用户登录后使用专用的 Web Worker(而不是共享 Worker)在后台从 S3 加载文件。为了获得对 s3 文件的访问权限,我需要对用户进行身份验证 (AWS Cognito)。
在创建经过身份验证的 s3 对象后,我尝试像这样从浏览器的 js 调用 Web Worker。
async function softSyncPlaground(oFoldersInSync, localS3Object){
var worker = new Worker('js/worker_syncPlayground.js');
worker.addEventListener('message', function(e) {
console.log('Worker said: ', e.data);
}, false);
worker.postMessage([oFoldersInSync, localS3Object]);
}
Run Code Online (Sandbox Code Playgroud)
但它不起作用,因为无法将具有功能的对象提交给网络工作者。
因此,我的后备方案是将凭证发布到 Web Worker 中并在那里生成经过身份验证的 s3 对象。
async function softSyncPlaground(oFoldersInSync, sIdentityPoolId, oLogins){
var worker = new Worker('js/worker_syncPlayground.js');
worker.addEventListener('message', function(e) {
console.log('Worker said: ', e.data);
}, false);
worker.postMessage([oFoldersInSync, sIdentityPoolId, oLogins]);
}
Run Code Online (Sandbox Code Playgroud)
然而,发送凭证让我在安全方面感到不安。
对这个话题有什么想法吗?
javascript security amazon-s3 amazon-web-services web-worker