

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

# Pre-provisioning kait
<a name="pre-provisioning-hook"></a>

AWS merekomendasikan penggunaan fungsi hook pra-penyediaan saat membuat templat penyediaan untuk memungkinkan kontrol lebih besar atas perangkat mana dan berapa banyak perangkat yang ada di dalam akun Anda. Pre-provisioning hook adalah fungsi Lambda yang memvalidasi parameter yang diteruskan dari perangkat sebelum mengizinkan perangkat 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 [Cross-service pencegahan wakil bingung](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`

## Pre-provision masukan kait
<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. 

## Pre-provision nilai pengembalian hook
<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.

## Pre-provisioning contoh kait Lambda
<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;
    }

}
```

Permintaan kelas:

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

------