

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
<a name="pre-provisioning-hook"></a>

AWS empfiehlt, bei der Erstellung von Provisioning-Vorlagen Hook-Funktionen vor der Bereitstellung zu verwenden, um mehr Kontrolle darüber zu haben, welche und wie viele Geräte Ihr Konto integriert. Pre-Provisioning-Hooks sind Lambda-Funktionen, die vom Gerät übergebene Parameter überprüfen, 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](fleet-provision-api.md#register-thing) 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 [Serviceübergreifende Confused-Deputy-Prävention](cross-service-confused-deputy-prevention.md).

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-Provisioning-Hook-Eingabe
<a name="pre-provisioning-hook-input"></a>

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](fleet-provision-api.md#register-thing)-Anforderungsnutzlast übergeben wird. 

## Pre-Provisioning-Hook-Rückgabewert
<a name="pre-provisioning-hook-output"></a>

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](fleet-provision-api.md#register-thing)-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.

## Lambda-Beispiel für einen Pre-Provisioning-Hook
<a name="pre-provisioning-example"></a>

------
#### [ 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);
}
```

------