Как я могу получить доступ к AWS iot.describeCertificate () внутри лямбды с NodeJS? - PullRequest
0 голосов
/ 30 апреля 2020

Мне нужно получить статус IoT-сертификата, используя лямбда-функцию с NodeJS. Следуя документации , я должен использовать describeCertificate() для выполнения sh этой задачи.

Это код, который у меня есть (используется для яичек):

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. start descCert
  2. params
  3. {certificateId: 'xxxx8c0891f8xxxxxx'}
  4. описывает сертификат - Fn
  5. или описывать сертификат - ошибка или описывать сертификат - данные
  6. фактические данные ответ
  7. конец описать сертификат - Fn
  8. конец descCert
  9. после descCert
  10. фактический ответ данных

Но это то, что я Я получаю:

  1. start descCert
  2. params
  3. {certificateId: 'xxxx8c0891f8xxxxxx'}
  4. (8) end descCert
  5. (9) после descCert
  6. (10) os dados mesmo // {}

Я не вижу шаги 4-7 в журналах INFO. Таким образом, вывод заключается в том, что функции не вызывается.

Чего мне не хватает?

1 Ответ

0 голосов
/ 06 мая 2020

Для доступа к базовой услуге IoT (или любой другой службе) вы должны предоставить функции Lambda соответствующий ПРАВО доступ к этой услуге. Для этого вы можете go to IAM -> Roles и добавить соответствующую политику к роли, связанной с вашей функцией Lambda.

Вы можете добавить встроенную политику к соответствующей лямбда-роли:

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

Лучше изменить Resource на соответствующий arn.

...