我一直在使用Node 8.10开发AWS Lambda函数。我注意到我可以导入aws-sdk,但是在启动某些EC2函数时遇到了一些问题。我有一个设置了允许我的功能访问的策略的角色。这是我想要进一步了解的地方。
我试图启动这样的实例...
let params = { InstanceIds: ["i-31112345d325"] };
try{
let response = ec2.startInstances(params);
response.send();
}catch(ex){
console.log(ex);
}
像这样...
...
try{
let response = ec2.startInstances(params, function(err, data){
if(err) console.log(err);
else //do something else
});
);
}catch(ex){
console.log(ex);
}
这些方法似乎都不触发EC2计算机启动。我做了一些挖掘,并取出了promise(),它似乎起作用了。
try{
await ec2.startInstances(params).promise().then((response)=> {
console.log("Success with ", response);
})
}
catch(ex){
console.log(ex);
}
我什么都没改变。我在互联网上看到的大多数代码都是前两种方式实现的。有人可以解释为什么这对我不起作用吗?该文档似乎并未解决该问题,并且文档中的示例似乎对我不起作用。 (https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/EC2.html#startInstances-property)
答案 0 :(得分:0)
对于节点8.10,处理程序功能支持callback
方法。您可以使用该callback
告诉Lambda何时从回调函数或promise中终止
'use strict';
const AWS = require('aws-sdk');
var ec2 = new AWS.EC2();
exports.handler = (event, context, callback) => {
var params = { InstanceIds: ["i-1234567890abcdef0"]}
ec2.startInstances(params, function(err, data) {
if (err) callback(err.stack); // an error occurred
else callback(null, data); // successful response
});
}