Hooks de mise en service en amont - AWS IoT Core

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Hooks de mise en service en amont

AWS recommande d'utiliser des fonctions de pré-approvisionnement lors de la création de modèles de provisionnement afin de mieux contrôler quels appareils et combien d'appareils sont intégrés à votre compte. Les hooks de mise en service en amont sont des fonctions Lambda qui valident les paramètres transmis par l’appareil avant d’autoriser la mise en service de l’appareil. Cette fonction Lambda doit exister dans votre compte avant la mise en service d’un appareil, car elle est appelée chaque fois qu’un appareil envoie une demande via RegisterThing.

Important

Assurez-vous d’inclure le source-arn ou source-account dans les clés de contexte de condition globale des politiques associées à votre action Lambda afin d’empêcher toute manipulation des autorisations. Pour de plus amples informations à ce sujet, veuillez consulter Prévention du cas de figure de l’adjoint désorienté entre services.

Pour que les appareils soient provisionnés, votre fonction Lambda doit accepter l’objet d’entrée et renvoyer l’objet de sortie décrit dans cette section. La mise en service ne se déroule que si la fonction Lambda renvoie un objet avec la valeur "allowProvisioning": True.

Entrée du hook de pré-provisionnement

AWS IoT envoie cet objet à la fonction Lambda lorsqu'un appareil s'enregistre auprès de. AWS IoT

{ "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", ... } }

L’objet parameters transmis à la fonction Lambda contient les propriétés de l’argument parameters passé dans la charge utile de la demande RegisterThing.

Valeur de retour du hook de pré-provisionnement

La fonction Lambda doit renvoyer une réponse indiquant si elle a autorisé la demande de mise en service et les valeurs de toutes les propriétés à remplacer.

Voici un exemple de réponse réussie de la fonction de pré-provisionnement.

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

Les valeurs "parameterOverrides" seront ajoutées au paramètre "parameters" dans la charge utile de la demande RegisterThing.

Note
  • Si la fonction Lambda échoue, la demande de provisionnement échoue ACCESS_DENIED et une erreur est enregistrée dans Logs. CloudWatch

  • Si la fonction Lambda ne renvoie pas "allowProvisioning": "true" dans la réponse, la demande de mise en service échoue avec ACCESS_DENIED.

  • La fonction Lambda doit procéder à l’exécution et renvoyer dans un délai de 5 secondes, sinon la demande de mise en service échoue.

Exemple Lambda de hook de mise en service

Python

Exemple de hook de mise en service en amont Lambda en Python.

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

Exemple de hook de mise en service en amont Lambda en Java.

Classe de gestionnaire :

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; } }

Classe de demande :

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; }

La classe de réponse :

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

Exemple d'un hook de pré-provisionnement Lambda dans. JavaScript

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