如何在AWS IoT Lambda中获取certificate_id和client_id?

时间:2019-01-30 05:13:25

标签: amazon-web-services aws-lambda boto3 aws-iot

我正在使用AWS IoT Core。我已经为https://aws.amazon.com/blogs/iot/just-in-time-registration-of-device-certificates-on-aws-iot/之后的设备创建了客户端证书。一切都很好。问题是,现在我想将客户端certificate_id和client_id保存在同一表中以在它们之间建立关系,但是我无法通过一次lambda调用来获取certificate_id和client_id。 例如:

  • 当设备首次将其客户端证书与IoT服务器建立连接时,lambda将获得certificate_id,但不会获得client_id

{  
       "client_id":"N/A",
       "certificateId":"",
       "caCertificateId":"",
       "timestamp":"",
       "certificateStatus":"PENDING_ACTIVATION",
       "awsAccountId":"",
       "certificateRegistrationTimestamp":""
}
  • 在发布任何主题之后,我都可以获取client_id,但不能获取certificate_id

当客户端第一次连接到物联网时,我试图通过此规则获取client_id。

SELECT clientId() as client_id , * FROM '$aws/events/certificates/registered/111111111111111'

在Lambda上,我打印事件:

{ 
    client_id: 'N/A',
    certificateId: '222222',
    caCertificateId: '111111111111111',
    timestamp: 3333,
    certificateStatus: 'PENDING_ACTIVATION',
    awsAccountId: '44444',
    certificateRegistrationTimestamp: '55555'
}

这里的“ 1111 ..”是我的CA证书。

我想获取certificate_id,以便可以使用boto3物联网功能激活或停用设备

response = client.update_certificate(
    certificateId='string',
    newStatus='ACTIVE'|'INACTIVE'
)

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/iot.html#IoT.Client.update_certificate

1 个答案:

答案 0 :(得分:0)

您可以订阅有关该主题的连接事件 $ aws / events / presence / connected / +

这将使您可以将客户端ID与主体ID(证书)相关联。

请参见https://docs.aws.amazon.com/iot/latest/developerguide/life-cycle-events.html