Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.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
Javascript 使用AWS Lambda创建物联网策略_Javascript_Amazon Web Services_Aws Lambda_Aws Iot - Fatal编程技术网

Javascript 使用AWS Lambda创建物联网策略

Javascript 使用AWS Lambda创建物联网策略,javascript,amazon-web-services,aws-lambda,aws-iot,Javascript,Amazon Web Services,Aws Lambda,Aws Iot,我正在尝试在AWS Lambda内创建物联网策略。我当前的Lambda函数如下所示: “严格使用”; const AWS=要求(“AWS sdk”); AWS.config.update({地区:“eu-central-1”}); var iot=新的AWS.iot(); exports.handler=异步(事件、上下文)=>{ 变量参数={ 政策文件:`{ “版本”:“2012-10-17”, “声明”:[ { “效果”:“允许”, “行动”:[ “物联网:连接” ], “资源”:[ “a

我正在尝试在AWS Lambda内创建物联网策略。我当前的Lambda函数如下所示:

“严格使用”;
const AWS=要求(“AWS sdk”);
AWS.config.update({地区:“eu-central-1”});
var iot=新的AWS.iot();
exports.handler=异步(事件、上下文)=>{
变量参数={
政策文件:`{
“版本”:“2012-10-17”,
“声明”:[
{
“效果”:“允许”,
“行动”:[
“物联网:连接”
],
“资源”:[
“arn:aws:iot:xxxxx:客户/砂光机”
]
},
{
“效果”:“允许”,
“行动”:[
“物联网:订阅”
],
“资源”:[
“arn:aws:iot:xxxx:topicfilter/$aws/things/ManuelBohrmaschine/shadow/*”,
“arn:aws:iot:xxxx:topicfilter/$aws/things/HeikoBohrmaschine/shadow/*”
]
},
{
“效果”:“允许”,
“行动”:[
“物联网:发布”,
“物联网:接收”
],
“资源”:[
“arn:aws:iot:xxxx:topic/$aws/things/ManuelBohrmaschine/shadow/*”,
“arn:aws:iot:xxxx:topic/$aws/things/HeikoBohrmaschine/shadow/*”
]
}
]
}`,
保单名称:“sander1231564654654654”,
};
试一试{
iot.createPolicy(参数、函数(错误、数据){
if(err)console.log(err,err);//发生错误
否则{
控制台日志(“测试”)
控制台日志(数据);
返回{
标题:{
“访问控制允许来源”:“*”,//CORS支持工作所需
“Access Control Allow Credentials”:true//cookie、带有HTTPS的授权头需要
},
状态代码:200,
正文:JSON.stringify(数据)
};
}         
});
}
捕获(e){
控制台日志(e);
}

};我认为原因是函数在有机会运行
iot
部分之前返回。这是因为:

如果代码执行异步任务,返回承诺以确保它完成运行。当您解析或拒绝承诺时,Lambda会将响应或错误发送给调用程序

要克服此问题,可以使用
const promise=new promise(…)
,如中所示

我修改了代码以使用
Promise
模式(见下文)。我不能保证它能完全工作,但您的函数现在应该能够执行
iot.createPolicy
部分

"use strict";
const AWS = require("aws-sdk");
AWS.config.update({ region: "eu-central-1" });
var iot = new AWS.Iot();

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

  var params = {
    policyDocument: `{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iot:Connect"
      ],
      "Resource": [
        "arn:aws:iot:xxxxx:client/sander"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iot:Subscribe"
      ],
      "Resource": [
        "arn:aws:iot:xxxx:topicfilter/$aws/things/ManuelBohrmaschine/shadow/*",
        "arn:aws:iot:xxxx:topicfilter/$aws/things/HeikoBohrmaschine/shadow/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iot:Publish",
        "iot:Receive"
      ],
      "Resource": [
        "arn:aws:iot:xxxx:topic/$aws/things/ManuelBohrmaschine/shadow/*",
        "arn:aws:iot:xxxx:topic/$aws/things/HeikoBohrmaschine/shadow/*"
      ]
    }
  ]
}`,
    policyName: 'sander1231564654654654',
  };

  const promise = new Promise(function(resolve, reject) {

  try{

    console.log(params);

    iot.createPolicy(params, function (err, data) {
      if (err) {
          console.log(err, err); // an error occurred
          reject(Error(err));
      }
      else {
        console.log("test")
        console.log(data);
        resolve({
          headers: {
            "Access-Control-Allow-Origin": "*", // Required for CORS support to work
            "Access-Control-Allow-Credentials": true // Required for cookies, authorization headers with HTTPS 
          },
          statusCode: 200,
          body: JSON.stringify(data)
        });

      }         
    });
  }
  catch(e){
    console.log(e);
  }
})
 return promise
};