AWS Lambda aws.ec2()不返回值(NodeJS)

时间:2015-12-04 17:38:32

标签: node.js amazon-web-services aws-lambda

我有一个Lambda函数来在EC2中创建快照。该函数有效,但没有返回值(即,我想获得此值data.SnapshotId)。

创建快照的EC2调用嵌套在对s3.getObject的调用内,并且在调用s3.putObject之前。

s3.getObject(params, function(err, data) {
        if (err) {
            console.log(err);
            console.log(message);
            context.fail(message);
        } else {            
            new aws.EC2().createSnapshot(params_snapshot, function(err, data) {
              if (err) console.log(err, err.stack); // an error occurred
              else  {
                  console.log(data.SnapshotId); // this is my concern
              }
            });            
            var params_new = {
                Bucket: bucket,
                Key: key,
                Body: body
            };
            s3.putObject(params_new, function(err, data) {
                        if (err) {
                            console.log(err);
                            console.log(message);
                            context.fail(message);
                        } else {
                            console.log('CONTENT TYPE putObject:', data.ContentType);
                            context.succeed(data.ContentType);
                        }
            });
        }
    });

我主要关心的是

    new aws.EC2().createSnapshot(params_snapshot, function(err, data) {
      if (err) console.log(err, err.stack); // an error occurred
      else  {
          console.log(data.SnapshotId); // this is my concern
      }
    });  

2 个答案:

答案 0 :(得分:0)

试试这个:

s3.getObject(params, function(err, data) {
    if (err) {
        console.log(err);
        console.log(message);
        context.fail(message);
    } else {            
        new aws.EC2().createSnapshot(params_snapshot, function(err, data) {
            if (err) console.log(err, err.stack);
            else  {
                console.log(data.SnapshotId);
            }
            var params_new = {
                Bucket: bucket,
                Key: key,
                Body: body
            };
            s3.putObject(params_new, function(err, data) {
                if (err) {
                    console.log(err);
                    console.log(message);
                    context.fail(message);
                } else {
                    console.log('CONTENT TYPE putObject:', data.ContentType);
                    context.succeed(data.ContentType);
                }
            });
        });
    }
});

答案 1 :(得分:0)

解决方案是我需要在EC2()请求中嵌套s3.putObject(),因为它们同时发生。

s3.getObject(params, function(err, data) {
    if (err) {
        console.log(err);
        console.log(message);
        context.fail(message);
    } else {            
        new aws.EC2().createSnapshot(params_snapshot, function(err, data) {
            if (err) console.log(err, err.stack);
            else  {
                console.log(data.SnapshotId);

            var params_new = {
                Bucket: bucket,
                Key: key,
                Body: body
            };
               s3.putObject(params_new, function(err, data) {
                   if (err) {
                       console.log(err);
                       console.log(message);
                       context.fail(message);
                   } else {
                       console.log('CONTENT TYPE putObject:', data.ContentType);
                       context.succeed(data.ContentType);
                   }
            });
            }
        });
    }
});