Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用aws lambda函数中的节点js创建s3 bucket及其内部的文件夹_Node.js_Amazon Web Services_Amazon S3_Aws Lambda_Amazon Iam - Fatal编程技术网

Node.js 使用aws lambda函数中的节点js创建s3 bucket及其内部的文件夹

Node.js 使用aws lambda函数中的节点js创建s3 bucket及其内部的文件夹,node.js,amazon-web-services,amazon-s3,aws-lambda,amazon-iam,Node.js,Amazon Web Services,Amazon S3,Aws Lambda,Amazon Iam,我对NodeJS和AWS都是新手。我正在尝试使用lambda函数中的节点js在S3中创建一个bucket。因此,我试图在这个S3存储桶中创建文件夹 我跟踪了之前回答的所有问题,并尝试了不同的代码迭代,但它们似乎都不起作用。下面是我的代码,它在执行时没有给出任何问题,但是bucket和文件夹没有被创建 const AWS = require('aws-sdk'); let s3Client = new AWS.S3({ accessKeyId: '<access_key_id>'

我对NodeJS和AWS都是新手。我正在尝试使用lambda函数中的节点js在S3中创建一个bucket。因此,我试图在这个S3存储桶中创建文件夹

我跟踪了之前回答的所有问题,并尝试了不同的代码迭代,但它们似乎都不起作用。下面是我的代码,它在执行时没有给出任何问题,但是bucket和文件夹没有被创建

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

let s3Client = new AWS.S3({
  accessKeyId: '<access_key_id>',
  secretAccessKey: '<secret_access_key>'
});

var params = {
  Bucket : 'pshycology06'
};

exports.handler = async (event, context, callback) => {

// call spaces to create the bucket
    s3Client.createBucket(params, function(err, data) {
      if (err) {
        console.log("\r\n[ERROR] : ", err);
      } else {
        console.log("\r\n[SUCCESS] : data = ",data);
      }
    });
};
这两个都不起作用。我读了很多关于这个问题的文件和以前问过的答案,但没有一个是为我工作的

lambda函数的超时时间为1分钟。对于IAM角色,它有以下策略- 1.AmazonRDSFullAccess 2.AmazonS3FullAccess 3.AWSLambdaVPCExecutionRole

VPC安全组是默认组

另外,当我尝试使用以下AWS CLI命令创建相同的bucket时,它会创建bucket

aws s3api create-bucket --bucket psychology06 --region us-east-1


我不确定我在哪里出错。

确保同名的bucket不存在。如果可能,请共享日志。

您需要将
.promise()
方法链接到您的
aws sdk
调用,并等待
调用,因为您正在创建
异步
函数

等待s3Client.createBucket(params.promise();
等待s3Client.putObject(params1.promise();

此外,S3不适用于目录,尽管当您向文件名添加
/
时,S3控制台的外观可能会使您感到困惑。您可以阅读有关它的更多信息,因为您正在使用异步功能。因此,在调用“s3Client.createBucket”时必须使用wait。然后解决收到的承诺

要创建文件夹,请使用尾随“/”。例如“pshycology06/travasko/”


如果这些错误日志不起作用,请发布错误日志。

作为新手,请始终尝试aws cli(不推荐),然后在实现时搜索等效的sdk函数。由于它(您的代码)是异步的,因此不会等到执行回调函数,因此您可以尝试以下操作。(这不是实际的解决方案,它只是告诉您如何等待,直到回拨完成为止。)

对于您在评论中提出的问题: 嗨,Vinit,让我给你一点背景知识,你问的问题非常普遍。首先,VPC是你创建的东西,你的组织将拥有私有和公共子网,用于运行ec2或任何托管服务(aws的非托管服务)。但由于lambda是在aws vpc中运行的托管服务,他们通常会获取您的代码和lambda配置并执行代码。现在来问您的问题,如果我们在lambda配置中附加vpc(仅当您的lambda需要使用在您的vpc中托管的服务时,否则不要使用它)然后,正如我们讨论的lambda在aws vpc中运行,因此在冷启动期间,它创建了一个ENI(将其视为弹性IP)并尝试与您的VPC通信。在重新发明之前,为每个lambda创建了一个ENI,这是它第一次需要时间的原因,并且lambda过去会超时,即使您的执行时间较短。现在,在重新发明之后,每个安全组的每个子网都会创建EIP。因此,现在来讨论您在连接VPC时的问题,如果lambda执行需要更多的时间,或者没有按预期工作,那么您必须查看vpc(配置、路由、子网)是如何设置的,并且很难回答,因为除非我们进行调试,否则会涉及很多参数。因此,如果您的功能(代码)不需要与vpc中的任何托管实例对话,请不要附加vpc(通常为专用子网)
)等等。

Hi Vinit,将Key:'2/dir1/dir2'更改为Key:'2/dir1/dir2/'它将创建空文件夹你好,穆罕默德,我编辑了密钥,在Thales和Sirikrishna建议的改进之后,它工作得很好。谢谢!如果它有帮助,你应该更新对你有帮助的答案。这就是全部内容。
s3Client.createBucket
不支持回复承诺。无法在S3中创建文件夹。进一步信息:Hello Thales,我检查了你的代码,当我在lambda函数中选择VPC选项时,它不起作用,但当该选项没有VPC时,它工作得很好。我不明白为什么?Hello Srikrishna,你的代码也工作正常,目录和文件正在创建中d只有当我为lambda选择无VPC选项时。你知道为什么会发生这种情况吗?我不应该为lambda选择VPC吗?嗨,vinit,我在帖子中评论,请看上面
aws s3api create-bucket --bucket psychology06 --region us-east-1

    'use strict'

    var AWS = require('aws-sdk');
    AWS.config.region = 'us-east-1';
    var s3Client = new AWS.S3({ apiVersion: '2006-03-01' });

    exports.handler = async (event, context) => {
        let params1 = { Bucket: 'travasko', Key: '2/dir1/dir2', Body: 'body does not matter' };
        try {
            let obj = await something(params1);
            callback(null, obj);
        }
        catch (err) {
            callback('error', err)
        }
    }

    async function something(params1) {
        return new Promise(async (resolve, reject) => {
            await s3Client.putObject(params1, function (err, data) {
                if (err) {
                    console.log('Error creating the folder:', err);
                    reject('error during putObject');
                } else {
                    console.log('success' + JSON.stringify(data));
                    resolve('success');
                }
            });
        });
    }