View a markdown version of this page

Pre-provisioning Hooks - AWS IoT Core

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Pre-provisioning Hooks

AWS empfiehlt, bei der Erstellung von Bereitstellungsvorlagen Hook-Funktionen vor der Bereitstellung zu verwenden, um besser kontrollieren zu können, welche und wie viele Geräte in Ihrem Konto integriert sind. Pre-provisioning Hooks sind Lambda-Funktionen, die vom Gerät übergebene Parameter validieren, bevor das Gerät bereitgestellt werden kann. Diese Lambda-Funktion muss in Ihrem Konto vorhanden sein, bevor Sie ein Gerät bereitstellen, da sie jedes Mal aufgerufen wird, wenn ein Gerät eine Anfrage über RegisterThing sendet.

Wichtig

Achten Sie darauf, das source-arn oder source-account in die globalen Bedingungskontextschlüssel der Richtlinien aufzunehmen, die mit Ihrer Lambda-Aktion verknüpft sind, damit Berechtigungen nicht manipuliert werden können. Weitere Informationen hierzu finden Sie unter Cross-service verwirrter Stellvertreter, Prävention.

Damit Geräte bereitgestellt werden können, muss Ihre Lambda-Funktion das Eingabeobjekt akzeptieren und das in diesem Abschnitt beschriebene Ausgabeobjekt zurückgeben. Die Bereitstellung wird nur fortgesetzt, wenn die Lambda-Funktion ein Objekt mit "allowProvisioning": True zurückgibt.

Pre-provision Hook-Eingabe

AWS IoT sendet dieses Objekt an die Lambda-Funktion, wenn sich ein Gerät bei AWS IoT registriert.

{ "claimCertificateId" : "string", "certificateId" : "string", "certificatePem" : "string", "templateArn" : "arn:aws:iot:us-east-1:1234567890:provisioningtemplate/MyTemplate", "clientId" : "221a6d10-9c7f-42f1-9153-e52e6fc869c1", "parameters" : { "string" : "string", ... } }

Das an die Lambda-Funktion übergebene parameters-Objekt enthält die Eigenschaften im parameters-Argument, das in der RegisterThing-Anforderungsnutzlast übergeben wird.

Pre-provision Hook-Rückgabewert

Die Lambda-Funktion muss eine Antwort zurückgeben, die angibt, ob sie die Bereitstellungsanforderung und die Werte der zu überschreibenden Eigenschaften autorisiert hat.

Im Folgenden finden Sie ein Beispiel für eine erfolgreiche Antwort der Pre-Provisioning-Funktion.

{ "allowProvisioning": true, "parameterOverrides" : { "Key": "newCustomValue", ... } }

"parameterOverrides"-Werte werden dem Parameter "parameters" in der RegisterThing-Anforderungsnutzlast hinzugefügt.

Anmerkung
  • Wenn die Lambda-Funktion fehlschlägt, schlägt die Bereitstellungsanforderung fehl ACCESS_DENIED und ein Fehler wird in Logs protokolliert. CloudWatch

  • Wenn die Lambda-Funktion in der Antwort nicht "allowProvisioning": "true" zurückgibt, schlägt die Bereitstellungsanforderung mit ACCESS_DENIED fehl.

  • Die Lambda-Funktion muss die Ausführung beenden und innerhalb von 5 Sekunden zurückgeben, andernfalls schlägt die Bereitstellungsanforderung fehl.

Pre-provisioning Beispiel für Hook-Lambda

Python

Ein Beispiel für einen Pre-Provisioning-Hook ist Lambda in Python.

import json def pre_provisioning_hook(event, context): print(event) return { 'allowProvisioning': True, 'parameterOverrides': { 'DeviceLocation': 'Seattle' } }
Java

Ein Beispiel für einen Pre-Provisioning-Hook ist Lambda in Java.

Handler-Klasse

package example; import java.util.Map; import java.util.HashMap; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; public class PreProvisioningHook implements RequestHandler<PreProvisioningHookRequest, PreProvisioningHookResponse> { public PreProvisioningHookResponse handleRequest(PreProvisioningHookRequest object, Context context) { Map<String, String> parameterOverrides = new HashMap<String, String>(); parameterOverrides.put("DeviceLocation", "Seattle"); PreProvisioningHookResponse response = PreProvisioningHookResponse.builder() .allowProvisioning(true) .parameterOverrides(parameterOverrides) .build(); return response; } }

Anforderungsklasse:

package example; import java.util.Map; import lombok.Builder; import lombok.Data; import lombok.AllArgsConstructor; import lombok.NoArgsConstructor; @Data @Builder @AllArgsConstructor @NoArgsConstructor public class PreProvisioningHookRequest { private String claimCertificateId; private String certificateId; private String certificatePem; private String templateArn; private String clientId; private Map<String, String> parameters; }

Response-Klasse:

package example; import java.util.Map; import lombok.Builder; import lombok.Data; import lombok.AllArgsConstructor; import lombok.NoArgsConstructor; @Data @Builder @AllArgsConstructor @NoArgsConstructor public class PreProvisioningHookResponse { private boolean allowProvisioning; private Map<String, String> parameterOverrides; }
JavaScript

Ein Beispiel für einen Pre-Provisioning-Hook Lambda in. JavaScript

exports.handler = function(event, context, callback) { console.log(JSON.stringify(event, null, 2)); var reply = { allowProvisioning: true, parameterOverrides: { DeviceLocation: 'Seattle' } }; callback(null, reply); }