

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Desarrollo de complementos de aprovisionamiento personalizados
<a name="develop-custom-provisioning-plugins"></a>

Para desarrollar un complemento de aprovisionamiento personalizado, cree una clase Java que implemente la interfaz `com.aws.greengrass.provisioning.DeviceIdentityInterface`. Puede incluir el archivo JAR del núcleo de Greengrass en su proyecto para acceder a esta interfaz y a sus clases. Esta interfaz define un método que introduce una configuración de complemento y genera una configuración de aprovisionamiento. La configuración de aprovisionamiento define las configuraciones para el sistema y el [componente núcleo de Greengrass](greengrass-nucleus-component.md). El instalador del software AWS IoT Greengrass principal utiliza esta configuración de aprovisionamiento para configurar el software AWS IoT Greengrass principal en un dispositivo.

Después de desarrollar un complemento de aprovisionamiento personalizado, créelo como un archivo JAR que puede proporcionar al instalador del software AWS IoT Greengrass principal para que ejecute el complemento durante la instalación. El instalador ejecuta el complemento de aprovisionamiento personalizado en la misma JVM que utiliza el instalador, por lo que puede crear un JAR que contenga únicamente el código del complemento.

**nota**  
El [complemento de aprovisionamiento de flota de AWS IoT](fleet-provisioning.md) implementa `DeviceIdentityInterface` para utilizar el aprovisionamiento de flota durante la instalación. El complemento de aprovisionamiento de flota es de código abierto, por lo que puede explorar su código de origen para ver un ejemplo de cómo utilizar la interfaz del complemento de aprovisionamiento. Para obtener más información, consulte el [complemento de aprovisionamiento de AWS IoT flotas](https://github.com/aws-greengrass/aws-greengrass-fleet-provisioning-by-claim) en. GitHub

**Topics**
+ [Requisitos](#custom-provisioning-plugin-requirements)
+ [Implemente la interfaz DeviceIdentityInterface](#implement-device-identity-interface)

## Requisitos
<a name="custom-provisioning-plugin-requirements"></a>

Para desarrollar un complemento de aprovisionamiento personalizado, debe crear una clase Java que cumpla con los siguientes requisitos:
+ Usa el paquete `com.aws.greengrass` o un paquete dentro del paquete `com.aws.greengrass`.
+ Tiene un constructor sin argumentos.
+ Implementa la interfaz `DeviceIdentityInterface`. Para obtener más información, consulte [Implemente la interfaz DeviceIdentityInterface](#implement-device-identity-interface).

## Implemente la interfaz DeviceIdentityInterface
<a name="implement-device-identity-interface"></a>

Para utilizar la interfaz `com.aws.greengrass.provisioning.DeviceIdentityInterface` en su complemento personalizado, agregue el núcleo de Greengrass como una dependencia a su proyecto.

**Para utilizarla DeviceIdentityInterface en un proyecto de complemento de aprovisionamiento personalizado**
+ Puede agregar el archivo JAR del núcleo de Greengrass como biblioteca o agregar el núcleo de Greengrass como una dependencia de Maven. Realice una de las siguientes acciones:
  + Para añadir el archivo JAR del núcleo de Greengrass como biblioteca, descargue el software AWS IoT Greengrass Core, que contiene el JAR del núcleo de Greengrass. Puede descargar la última versión del software AWS IoT Greengrass Core desde la siguiente ubicación:
    + [https://d2s8p88vqu9w66.cloudfront. net/releases/greengrass](https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip)-nucleus-latest.zip

    Puede encontrar el archivo JAR del núcleo de Greengrass (`Greengrass.jar`) en la carpeta `lib` del archivo ZIP. Agregue este archivo JAR a su proyecto.
  + Para utilizar el núcleo de Greengrass en un proyecto de Maven, agregue una dependencia al artefacto `nucleus` del grupo `com.aws.greengrass`. También debe agregar el repositorio `greengrass-common`, ya que el núcleo de Greengrass no está disponible en el repositorio central de Maven.

    ```
    <project ...>
        ...
        <repositories>
            <repository>
                <id>greengrass-common</id>
                <name>greengrass common</name>
                <url>https://d2jrmugq4soldf.cloudfront.net/snapshots</url>
            </repository>
        </repositories>
        ...
        <dependencies>
            <dependency>
                <groupId>com.aws.greengrass</groupId>
                <artifactId>nucleus</artifactId>
                <version>2.5.0-SNAPSHOT</version>
                <scope>provided</scope>
            </dependency>
        </dependencies>
    </project>
    ```

### La DeviceIdentityInterface interfaz
<a name="device-identity-interface-shape"></a>

La interfaz `com.aws.greengrass.provisioning.DeviceIdentityInterface` tiene la siguiente forma.

**nota**  
[También puede explorar estas clases en el [paquete com.aws.greengrass.provisioning del](https://github.com/aws-greengrass/aws-greengrass-nucleus/tree/main/src/main/java/com/aws/greengrass/provisioning) código fuente del núcleo de Greengrass en.](https://github.com/aws-greengrass/aws-greengrass-nucleus) GitHub

```
public interface com.aws.greengrass.provisioning.DeviceIdentityInterface {
    ProvisionConfiguration updateIdentityConfiguration(ProvisionContext context)
            throws RetryableProvisioningException, InterruptedException;

    // Return the name of the plugin.
    String name(); 
}

com.aws.greengrass.provisioning.ProvisionConfiguration {
    SystemConfiguration systemConfiguration;
    NucleusConfiguration nucleusConfiguration    
}

com.aws.greengrass.provisioning.ProvisionConfiguration.SystemConfiguration {
    String certificateFilePath;
    String privateKeyPath;
    String rootCAPath;
    String thingName;
}

com.aws.greengrass.provisioning.ProvisionConfiguration.NucleusConfiguration {
    String awsRegion;
    String iotCredentialsEndpoint;
    String iotDataEndpoint;
    String iotRoleAlias;
}

com.aws.greengrass.provisioning.ProvisioningContext {
    Map<String, Object> parameterMap;
    String provisioningPolicy;  // The policy is always "PROVISION_IF_NOT_PROVISIONED".
}
   
com.aws.greengrass.provisioning.exceptions.RetryableProvisioningException {}
```

Todos los valores de configuración de `SystemConfiguration` y `NucleusConfiguration` son necesarios para instalar el software Core, pero puede devolverlos AWS IoT Greengrass . `null` Si su complemento de aprovisionamiento personalizado devuelve `null` algún valor de configuración, debe proporcionar ese valor en la configuración del sistema o del núcleo al crear el `config.yaml` archivo que se va a proporcionar al instalador del software AWS IoT Greengrass Core. Si su complemento de aprovisionamiento personalizado devuelve un valor no nulo para una opción que también ha definido en `config.yaml`, el instalador sustituirá el valor en `config.yaml` por el valor devuelto por el complemento.