首页 > 解决方案 > 如何使用 NodeJS 在 lambda 中访问 AWS iot.describeCertificate()?

问题描述

我需要使用带有 NodeJS 的 lambda 函数来检索 IoT 证书状态。按照我应该用来完成此任务的文档。describeCertificate()

这是我到目前为止的代码(用于睾丸):

const AWS = require('aws-sdk')
const iot = new AWS.Iot()
let cert = {}

async function descCert (params) {

  console.log("start descCert")
  console.log("params")
  console.log(params)

  await iot.describeCertificate(params, function(err, data) {
    console.log('describeCertificate - Fn')
    if (err) {
      console.log('describeCertificate - Error')
      console.log(err, err.stack)
    }else{
      console.log('describeCertificate - data')
      cert = data
      console.log(data)
    }
    console.log("end describeCertificate - Fn")
  })

  console.log("end descCert")
}

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

    var zzz = {
        certificateId: 'xxxx8c0891f8xxxxxx'
    }
    await descCert(zzz)
    console.log("after descCert")
    console.log(cert)

...
}

我的猜测是我没有访问该功能await iot.describeCertificate( ...,因为我看不到登录CloudWatch

我应该收到这个序列:

  1. 开始 descCert
  2. 参数
  3. {certificateId:'xxxx8c0891f8xxxxxx'}
  4. 描述证书 - Fn
  5. 或 describeCertificate - 错误或 describeCertificate - 数据
  6. 实际数据响应
  7. 结束 describeCertificate - Fn
  8. 结束说明
  9. 在 descCert 之后
  10. 实际数据响应

但这就是我得到的:

  1. 开始 descCert
  2. 参数
  3. {certificateId:'xxxx8c0891f8xxxxxx'}
  4. (8) end descCert
  5. (9) 在 descCert 之后
  6. (10) os dados mesmo //{}

我在日志信息中看不到步骤 4-7。所以结论是没有调用函数。

我错过了什么?

标签: node.jsasync-awaitcertificateaws-iot

解决方案


要访问 IoT 核心服务(或任何其他服务),您应该为 Lambda 函数提供对该服务的相应 RIGHT 访问权限。为此,您可以转到 IAM -> 角色并将相应的策略添加到附加到您的 Lambda 函数的角色中。

您可以将内联策略添加到相应的 lambda-role:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "iot:DescribeCertificate",
            "Resource": "arn:aws:iot:*:*:cert/*"
        }
    ]
}

最好将 更改Resource为您对应的arn.


推荐阅读