

# Uso de AWS Lambda con AWS IoT
<a name="services-iot"></a>

AWS IoT proporciona una comunicación segura entre dispositivos conectados a Internet (como sensores) y la nube de AWS. Esto le permite recopilar, almacenar y analizar los datos de telemetría de varios dispositivos.

Puede crear reglas de AWS IoT para que sus dispositivos interactúen con los Servicios de AWS. El [motor de reglas](https://docs.aws.amazon.com/iot/latest/developerguide/iot-rules.html) de AWS IoT proporciona un lenguaje basado en SQL para seleccionar datos de cargas de mensajes y enviar los datos a otros servicios como Amazon S3, Amazon DynamoDB y AWS Lambda. Cuando quiera invocar otro servicio de AWS o un servicio de terceros, defina una regla para invocar una función de Lambda. 

Cuando un mensaje de IoT entrante desencadena la regla, AWS IoT invoca su función de Lambda [de forma asíncrona](invocation-async.md) y pasa los datos del mensaje de IoT a la función. 

El siguiente ejemplo muestra una lectura de humedad del sensor de un invernadero. Los valores **row** y **pos** identifican la ubicación del sensor. Este evento de ejemplo se basa en el tipo de invernadero de los [Tutoriales de reglas de AWS IoT](https://docs.aws.amazon.com/iot/latest/developerguide/iot-rules-tutorial.html). 

**Example AWS IoTEvento de mensaje de**  

```
{
    "row" : "10",
    "pos" : "23",
    "moisture" : "75"
}
```

En la invocación asincrónica, Lambda pone en cola el mensaje y, si la función devuelve un error, [lo intenta de nuevo](invocation-retries.md). Configure su función con un [destination](invocation-async-retain-records.md#invocation-async-destinations) para retener eventos que su función no pudo procesar.

Debe conceder permiso para que el servicio AWS IoT invoque su función de Lambda. Utilice el comando `add-permission` para añadir una instrucción de permiso a la política basada en recursos de la función.

**importante**  
Si agrega un permiso para una entidad principal de AWS IoT sin proporcionar el `source-arn` ni la `source-account`, cualquier Cuenta de AWS que cree una regla con la acción AWS Lambda puede activar reglas para invocar la función AWS Lambda desde AWS IoT. Para obtener más información, consulte [Permisos de AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html).

```
aws lambda add-permission --function-name {{my-function}} \
--statement-id iot-events --action "lambda:InvokeFunction" --principal iot.amazonaws.com \
--source-arn arn:aws:iot:{{us-east-1}}:{{123456789012}}:rule/{{my-rule}} \
--source-account {{123456789012}}
```

Debería ver los siguientes datos de salida:

```
{
    "Statement": "{\"Sid\":\"iot-events\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"iot.amazonaws.com\"},\"Action\":\"lambda:InvokeFunction\",\"Resource\":\"arn:aws:lambda:us-east-1:123456789012:function:my-function\",\"Condition\":{\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:iot:us-east-1:123456789012:rule/my-rule\"},\"StringEquals\":{\"AWS:SourceAccount\":\"123456789012\"}}}"
}
```

Para obtener más información acerca de cómo utilizar Lambda con AWS IoT, consulte [Creación de una regla de AWS Lambda](https://docs.aws.amazon.com/iot/latest/developerguide/iot-lambda-rule.html). 