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.
Aprovisionamiento de plantillas
Una plantilla de aprovisionamiento es un documento JSON que utiliza parámetros para describir los recursos con los que el dispositivo debe interactuar. AWS IoT Una plantilla de aprovisionamiento contiene dos secciones: Parameters y Resources. Existen dos tipos de plantillas de aprovisionamiento. AWS IoT Una se usa para el just-in-time aprovisionamiento (JITP) y el registro masivo, y la segunda se usa para el aprovisionamiento de flotas.
Temas
Sección de parámetros
La sección Parameters declara los parámetros utilizados en la sección Resources. Cada parámetro declara un nombre, un tipo y un valor predeterminado opcional. El valor predeterminado se usa cuando el diccionario trasladado con la plantilla no contiene un valor para el parámetro. La sección Parameters de un documento de plantilla tiene el siguiente aspecto:
{ "Parameters" : { "ThingName" : { "Type" : "String" }, "SerialNumber" : { "Type" : "String" }, "Location" : { "Type" : "String", "Default" : "WA" }, "CSR" : { "Type" : "String" } } }
Este snippet de cuerpo de plantilla declara cuatro parámetros: ThingName, SerialNumber, Location y CSR. Todos esos parámetros son de tipo String. El parámetro Location declara un valor predeterminado de "WA".
Sección de recursos
La Resources sección del cuerpo de la plantilla declara los recursos necesarios para que el dispositivo se comunique con AWS IoT: una cosa, un certificado y una o más políticas de IoT. Cada recurso especifica un nombre lógico, un tipo y un conjunto de propiedades.
Un nombre lógico le permite hacer referencia a un recurso en cualquier lugar de la plantilla.
El tipo especifica la clase de recurso que está declarando. Los tipos válidos son:
-
AWS::IoT::Thing -
AWS::IoT::Certificate -
AWS::IoT::Policy
Las propiedades que especifique dependen del tipo de recurso que está declarando.
Recursos de objetos
Los recursos de objetos se declaran mediante las siguientes propiedades:
-
ThingName: cadena. -
AttributePayload: opcional. Una lista de pares de nombre-valor. -
ThingTypeName: opcional. Cadena para un tipo de objeto asociado para el objeto. -
ThingGroups: opcional. Una lista de grupos a los que pertenece el objeto. -
BillingGroup: opcional. Cadena para el nombre de un grupo de facturación asociado. -
PackageVersions: opcional. Cadena para un paquete asociado y los nombres de las versiones.
Recursos de certificados
Puede especificar certificados de una de las siguientes maneras:
-
Una solicitud de firma de certificado (CSR).
-
Un ID de certificado de un certificado de dispositivo existente. (Solo el certificado se IDs puede usar con una plantilla de aprovisionamiento de flota).
-
Un certificado de dispositivo creado con un certificado de CA registrado con AWS IoT. Si tiene más de un certificado de CA registrado con el mismo campo de asunto, también debe trasladar el certificado de CA utilizado para firmar el certificado de dispositivo.
nota
Cuando declare un certificado en una plantilla, use solo uno de estos métodos. Por ejemplo, si utiliza un CSR, no puede especificar también un ID de certificado o un certificado de dispositivo. Para obtener más información, consulte Certificados de cliente X.509.
Para obtener más información, consulte Información general del certificado X.509.
Los recursos de certificados se declaran mediante las siguientes propiedades:
-
CertificateSigningRequest: cadena. -
CertificateId: cadena. -
CertificatePem: cadena. -
CACertificatePem: cadena. -
Status: opcional. Cadena, que puede serACTIVEoINACTIVE. El valor predeterminado es ACTIVE. -
ThingPrincipalType: opcional. Cadena que especifica el tipo de relación entre la cosa y el elemento principal (el certificado).-
EXCLUSIVE_THING: Establece una relación exclusiva. El principio solo puede estar vinculado a esta Cosa específica y no a ninguna otra. -
NON_EXCLUSIVE_THING: Adjunta el principio especificado a las cosas. Puede adjuntar varias cosas al principal. Si no se especifica, es el valor predeterminado.
nota
También puede aprovisionar dispositivos sin certificados de dispositivo. Para obtener más información, consulte Aprovisionamiento de dispositivos que no tienen certificados de dispositivo mediante el aprovisionamiento de flotas.
-
Ejemplos:
-
Certificado especificado con un CSR:
{ "certificate" : { "Type" : "AWS::IoT::Certificate", "Properties" : { "CertificateSigningRequest": {"Ref" : "CSR"}, "Status" : "ACTIVE" } } } -
Certificado especificado con un ID de certificado existente:
{ "certificate" : { "Type" : "AWS::IoT::Certificate", "Properties" : { "CertificateId": {"Ref" : "CertificateId"} } } } -
Certificado especificado con un archivo .pem de certificado existente y un archivo .pem de certificado de CA:
{ "certificate" : { "Type" : "AWS::IoT::Certificate", "Properties" : { "CACertificatePem": {"Ref" : "CACertificatePem"}, "CertificatePem": {"Ref" : "CertificatePem"} } } } -
Adjunte exclusivamente una cosa a un director:
{ "certificate" : { "Type" : "AWS::IoT::Certificate", "Properties" : { "ThingPrincipalType" : "EXCLUSIVE_THING" } } }
Recursos de políticas
Los recursos de políticas se declaran mediante una de las siguientes propiedades:
-
PolicyName: opcional. Cadena. Hash es el valor predeterminado del documento de políticas. SoloPolicyNamepuede hacer referencia a las políticas de AWS IoT , pero no a las políticas de IAM. Si utiliza una política de AWS IoT existente, escriba el nombre de la política para la propiedadPolicyName. No incluya la propiedadPolicyDocument. -
PolicyDocument: opcional. Un objeto JSON especificado como una cadena de escape. SiPolicyDocumentno se proporciona, la política debe haberse creado ya.
nota
Si una sección Policy está presente, PolicyName o PolicyDocument, pero no ambas, debe especificarse.
Anular la configuración
Si una plantilla especifica un recurso que ya existe, la sección OverrideSettings le permite especificar la acción que se debe realizar:
DO_NOTHING-
Dejar el recurso como está.
REPLACE-
Sustituir el recurso por el recurso especificado en la plantilla.
FAIL-
Provocar un error en la solicitud con
ResourceConflictsException. MERGE-
Solo es válida para las propiedades
ThingGroupsyAttributePayloadde un objeto (thing). Combinar los atributos o las pertenencias a grupos existentes de la cosa con los especificados en la plantilla.
Cuando declara un recurso de objeto, puede especificar OverrideSettings para las siguientes propiedades:
-
ATTRIBUTE_PAYLOAD -
THING_TYPE_NAME -
THING_GROUPS
Cuando declara un recurso de certificado, puede especificar OverrideSettings para la propiedad Status.
OverrideSettings no están disponibles para recursos de políticas.
Ejemplo de recursos
El siguiente fragmento de plantilla declara un objeto, un certificado y una política:
{ "Resources" : { "thing" : { "Type" : "AWS::IoT::Thing", "Properties" : { "ThingName" : {"Ref" : "ThingName"}, "AttributePayload" : { "version" : "v1", "serialNumber" : {"Ref" : "SerialNumber"}}, "ThingTypeName" : "lightBulb-versionA", "ThingGroups" : ["v1-lightbulbs", {"Ref" : "Location"}] }, "OverrideSettings" : { "AttributePayload" : "MERGE", "ThingTypeName" : "REPLACE", "ThingGroups" : "DO_NOTHING" } }, "certificate" : { "Type" : "AWS::IoT::Certificate", "Properties" : { "CertificateSigningRequest": {"Ref" : "CSR"}, "Status" : "ACTIVE" } }, "policy" : { "Type" : "AWS::IoT::Policy", "Properties" : { "PolicyDocument" : "{ \"Version\": \"2012-10-17\", \"Statement\": [{ \"Effect\": \"Allow\", \"Action\":[\"iot:Publish\"], \"Resource\": [\"arn:aws:iot:us-east-1:123456789012:topic/foo/bar\"] }] }" } } } }
El objeto se declara con:
-
El nombre lógico
"thing". -
El tipo
AWS::IoT::Thing. -
Un conjunto de propiedades de objeto.
Las propiedades de objeto incluyen el nombre de objeto, un conjunto de atributos, un nombre de tipo de objeto opcional y una lista opcional de grupos de objetos a los que pertenece el objeto.
Se hace referencia a los parámetros mediante {"Ref":". Cuando se evalúa la plantilla, los parámetros se reemplazan por el valor de los parámetros desde el diccionario trasladado con la plantilla.parameter-name"}
El certificado se declara con:
-
El nombre lógico
"certificate". -
El tipo
AWS::IoT::Certificate. -
Un conjunto de propiedades.
Las propiedades incluyen el CSR para el certificado y el establecimiento del estado en
ACTIVE. El texto CSR se transfiere como parámetro en el diccionario transferido con la plantilla.
La política se declara con:
-
El nombre lógico
"policy". -
El tipo
AWS::IoT::Policy. -
O el nombre de una política existente o un documento de políticas.
Ejemplo de plantilla para el registro masivo
El siguiente archivo JSON es un ejemplo de una plantilla de aprovisionamiento completa que especifica el certificado con un CSR:
(El valor del campo PolicyDocument debe ser un objeto JSON especificado como una cadena de escape).
{ "Parameters" : { "ThingName" : { "Type" : "String" }, "SerialNumber" : { "Type" : "String" }, "Location" : { "Type" : "String", "Default" : "WA" }, "CSR" : { "Type" : "String" } }, "Resources" : { "thing" : { "Type" : "AWS::IoT::Thing", "Properties" : { "ThingName" : {"Ref" : "ThingName"}, "AttributePayload" : { "version" : "v1", "serialNumber" : {"Ref" : "SerialNumber"}}, "ThingTypeName" : "lightBulb-versionA", "ThingGroups" : ["v1-lightbulbs", {"Ref" : "Location"}] } }, "certificate" : { "Type" : "AWS::IoT::Certificate", "Properties" : { "CertificateSigningRequest": {"Ref" : "CSR"}, "Status" : "ACTIVE", "ThingPrincipalType" : "EXCLUSIVE_THING" } }, "policy" : { "Type" : "AWS::IoT::Policy", "Properties" : { "PolicyDocument" : "{ \"Version\": \"2012-10-17\", \"Statement\": [{ \"Effect\": \"Allow\", \"Action\":[\"iot:Publish\"], \"Resource\": [\"arn:aws:iot:us-east-1:123456789012:topic/foo/bar\"] }] }" } } } }
Ejemplo de plantilla para just-in-time aprovisionamiento (JITP)
El siguiente archivo JSON es un ejemplo de una plantilla de aprovisionamiento completa que especifica un certificado existente con un ID de certificado:
{ "Parameters":{ "AWS::IoT::Certificate::CommonName":{ "Type":"String" }, "AWS::IoT::Certificate::SerialNumber":{ "Type":"String" }, "AWS::IoT::Certificate::Country":{ "Type":"String" }, "AWS::IoT::Certificate::Id":{ "Type":"String" } }, "Resources":{ "thing":{ "Type":"AWS::IoT::Thing", "Properties":{ "ThingName":{ "Ref":"AWS::IoT::Certificate::CommonName" }, "AttributePayload":{ "version":"v1", "serialNumber":{ "Ref":"AWS::IoT::Certificate::SerialNumber" } }, "ThingTypeName":"lightBulb-versionA", "ThingGroups":[ "v1-lightbulbs", { "Ref":"AWS::IoT::Certificate::Country" } ] }, "OverrideSettings":{ "AttributePayload":"MERGE", "ThingTypeName":"REPLACE", "ThingGroups":"DO_NOTHING" } }, "certificate":{ "Type":"AWS::IoT::Certificate", "Properties":{ "CertificateId":{ "Ref":"AWS::IoT::Certificate::Id" }, "Status":"ACTIVE", "ThingPrincipalType" : "EXCLUSIVE_THING" } }, "policy":{ "Type":"AWS::IoT::Policy", "Properties":{ "PolicyDocument":"{ \"Version\": \"2012-10-17\", \"Statement\": [{ \"Effect\": \"Allow\", \"Action\":[\"iot:Publish\"], \"Resource\": [\"arn:aws:iot:us-east-1:123456789012:topic/foo/bar\"] }] }" } } } }
importante
Debe utilizar CertificateId en una plantilla que se utilice para el aprovisionamiento JIT.
Para obtener más información sobre el tipo de plantilla de aprovisionamiento, consulta la referencia de CreateProvisioningTemplatela AWS API.
Para obtener más información sobre cómo utilizar esta plantilla para el just-in-time aprovisionamiento, consulta: J ust-in-time Provisioning.
Aprovisionamiento de flotas
Las plantillas de aprovisionamiento de flotas se utilizan AWS IoT para configurar la nube y los dispositivos. Estas plantillas utilizan los mismos parámetros y recursos que las plantillas de registro masivo y JITP. Para obtener más información, consulte Aprovisionamiento de plantillas. Las plantillas de aprovisionamiento de flotas pueden contener una sección Mapping y una sección DeviceConfiguration. Puede utilizar funciones intrínsecas dentro de una plantilla de aprovisionamiento de flotas para generar una configuración específica del dispositivo. Las plantillas de aprovisionamiento de flotas se denominan recursos y se identifican mediante ARNs (por ejemplo,arn:aws:iot:us-west-2:1234568788:provisioningtemplate/).templateName
Mapeos
La sección Mappings opcional hace coincidir una clave con el conjunto correspondiente de valores identificados. Por ejemplo, si desea establecer valores en función de una AWS
región, puede crear un mapeo que utilice el Región de AWS nombre como clave y contenga los valores que desee especificar para cada región específica. Puede utilizar la función intrínseca Fn::FindInMap para recuperar valores en una asignación.
No puede incluir parámetros, pseudoparámetros ni funciones de llamadas intrínsecas en la sección Mappings.
Configuración del dispositivo
La sección de configuración del dispositivo contiene los datos arbitrarios que desea enviar a sus dispositivos al realizar el aprovisionamiento. Por ejemplo:
{ "DeviceConfiguration": { "Foo":"Bar" } }
Si envías mensajes a tus dispositivos mediante el formato de carga útil de notación de JavaScript objetos (JSON), AWS IoT Core formatea estos datos como JSON. Si utiliza el formato de carga de representación concisa de objetos binarios (CBOR), AWS IoT Core
formatea estos datos como CBOR. La sección DeviceConfiguration no admite objetos JSON anidados.
Funciones intrínsecas
Las funciones intrínsecas se utilizan en cualquier sección de la plantilla de aprovisionamiento, excepto en la sección Mappings.
Fn::Join-
Agrega un conjunto de valores a un único valor separado por el delimitador especificado. Si un delimitador es la cadena vacía, los valores se concatena sin delimitador.
importante
Fn::Joinno admite Recursos de políticas. Fn::Select-
Devuelve un único objeto de una lista de objetos por índice.
importante
Fn::Selectno comprueba si hay valoresnullo si el índice queda fuera de los límites de la matriz. Ambas condiciones dan lugar a un error de aprovisionamiento, por lo que debe asegurarse de elegir un valor de índice válido y de que la lista contenga valores distintos de null. Fn::FindInMap-
Devuelve el valor correspondiente a claves en una asignación de dos niveles declarada en la sección
Mappings. Fn::Split-
Divide una cadena en una lista de valores de cadena para que pueda seleccionar un elemento de la lista de cadenas. Especifique un delimitador que determine dónde se divide la cadena (por ejemplo, una coma). Después de dividir una cadena, utilice
Fn::Selectpara seleccionar un elemento.Por ejemplo, si se importa una cadena de subred IDs delimitada por comas a tu plantilla de pila, puedes dividir la cadena en cada coma. En la lista de subredes IDs, se utiliza
Fn::Selectpara especificar un ID de subred para un recurso. Fn::Sub-
Sustituye variables en una cadena de entrada por los valores que especifique. Puede utilizar esta función para crear comandos o salidas que incluyan valores que no están disponibles hasta que crea o actualiza una pila.
Ejemplo de plantilla de aprovisionamiento de flotas
{ "Parameters" : { "ThingName" : { "Type" : "String" }, "SerialNumber": { "Type": "String" }, "DeviceLocation": { "Type": "String" } }, "Mappings": { "LocationTable": { "Seattle": { "LocationUrl": "https://example.aws" } } }, "Resources" : { "thing" : { "Type" : "AWS::IoT::Thing", "Properties" : { "AttributePayload" : { "version" : "v1", "serialNumber" : "serialNumber" }, "ThingName" : {"Ref" : "ThingName"}, "ThingTypeName" : {"Fn::Join":["",["ThingPrefix_",{"Ref":"SerialNumber"}]]}, "ThingGroups" : ["v1-lightbulbs", "WA"], "BillingGroup": "LightBulbBillingGroup" }, "OverrideSettings" : { "AttributePayload" : "MERGE", "ThingTypeName" : "REPLACE", "ThingGroups" : "DO_NOTHING" } }, "certificate" : { "Type" : "AWS::IoT::Certificate", "Properties" : { "CertificateId": {"Ref": "AWS::IoT::Certificate::Id"}, "Status" : "Active", "ThingPrincipalType" : "EXCLUSIVE_THING" } }, "policy" : { "Type" : "AWS::IoT::Policy", "Properties" : { "PolicyDocument" : { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action":["iot:Publish"], "Resource": ["arn:aws:iot:us-east-1:123456789012:topic/foo/bar"] }] } } } }, "DeviceConfiguration": { "FallbackUrl": "https://www.example.com/test-site", "LocationUrl": { "Fn::FindInMap": ["LocationTable",{"Ref": "DeviceLocation"}, "LocationUrl"]} } }
nota
Se puede actualizar una plantilla de aprovisionamiento existente para agregar un enlace de preaprovisionamiento.