

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Kait pra-penyediaan
<a name="pre-provisioning-hook"></a>

AWS merekomendasikan penggunaan fungsi hook pra-penyediaan saat membuat templat penyediaan untuk memungkinkan lebih banyak kontrol atas perangkat mana dan berapa banyak perangkat yang ada di dalam akun Anda. Hook pra-penyediaan adalah fungsi Lambda yang memvalidasi parameter yang diteruskan dari perangkat sebelum perangkat tersebut dapat disediakan. Fungsi Lambda ini harus ada di akun Anda sebelum Anda menyediakan perangkat karena dipanggil setiap kali perangkat mengirimkan permintaan melalui. [RegisterThing](fleet-provision-api.md#register-thing)

**penting**  
Pastikan untuk menyertakan `source-arn` atau `source-account` dalam kunci konteks kondisi global dari kebijakan yang dilampirkan pada tindakan Lambda Anda untuk mencegah manipulasi izin. Untuk informasi selengkapnya tentang langkah ini, lihat [Pencegahan "confused deputy" lintas layanan](cross-service-confused-deputy-prevention.md).

Agar perangkat dapat disediakan, fungsi Lambda Anda harus menerima objek input dan mengembalikan objek keluaran yang dijelaskan di bagian ini. Penyediaan berlangsung hanya jika fungsi Lambda mengembalikan objek dengan. `"allowProvisioning": True`

## Masukan kait pra-penyediaan
<a name="pre-provisioning-hook-input"></a>

AWS IoT mengirimkan objek ini ke fungsi Lambda saat perangkat mendaftar dengan. 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",
        ...
    }
}
```

`parameters`Objek yang diteruskan ke fungsi Lambda berisi properti dalam `parameters` argumen yang diteruskan dalam payload [RegisterThing](fleet-provision-api.md#register-thing) permintaan. 

## Nilai pengembalian kait pra-penyediaan
<a name="pre-provisioning-hook-output"></a>

Fungsi Lambda harus mengembalikan respons yang menunjukkan apakah fungsi Lambda telah mengizinkan permintaan penyediaan dan nilai properti apa pun untuk diganti.

Berikut ini adalah contoh respons yang berhasil dari fungsi pra-penyediaan.

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

`"parameterOverrides"`nilai akan ditambahkan ke `"parameters"` parameter payload [RegisterThing](fleet-provision-api.md#register-thing) permintaan.

**catatan**  
Jika fungsi Lambda gagal, permintaan penyediaan gagal `ACCESS_DENIED` dan kesalahan dicatat ke Log. CloudWatch 
Jika fungsi Lambda tidak ditampilkan `"allowProvisioning": "true"` dalam respons, permintaan penyediaan gagal. `ACCESS_DENIED`
Fungsi Lambda harus selesai berjalan dan kembali dalam 5 detik, jika tidak permintaan penyediaan gagal.

## Contoh Lambda kait pra-penyediaan
<a name="pre-provisioning-example"></a>

------
#### [ Python ]

Contoh hook Lambda pra-penyediaan dengan Python.

```
import json

def pre_provisioning_hook(event, context):
    print(event)

    return {
        'allowProvisioning': True,
        'parameterOverrides': {
            'DeviceLocation': 'Seattle'
        }
    }
```

------
#### [ Java ]

Contoh hook Lambda pra-penyediaan di Jawa.

Kelas Handler:

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

}
```

Kelas permintaan:

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

Kelas respons:

```
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 ]

Contoh kait pra-penyediaan Lambda di. JavaScript

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

------