aws lambda - ¿Cómo paso las entradas json a un Lambda programado en Lambda implementado en el evento sin uso de Serverless?
aws-lambda serverless-framework (1)
He estado intentando implementar un Lambda en Serverless para ejecutarlo en un cronograma Cron que lo invoca cada hora. Cuando se invoca, quiero que el evento dentro de Lambda se complete con mi propia entrada JSON en lugar de la información del evento Cron, que es la entrada predeterminada cuando se implementa.
Dentro de la Consola de AWS, puedo ingresar manualmente el disparador Cron para Lambda y cambiar la entrada de "Evento coincidente" a "Constante (texto JSON)" para obtener el resultado que quiero. Dado que Serverless crea esta regla al implementar Lambda, creo que debería haber alguna forma de cambiar la entrada a través de una configuración en el archivo serverless.yml. No he podido encontrar nada mientras buscaba en los documentos Serverless, por lo que ahora me pregunto si esto es posible a través de Serverless en su estado actual, y si es así, cómo hacerlo.
Cualquier consejo sería apreciado.
Edición: hubo una actualización que debería haber agregado esta funcionalidad, sin embargo, todavía no he podido implementar con un programa con JSON usando Serverless 1.3.0 (y también he probado con 1.2.0). Algunos ejemplos del serverless.yml que usé son los siguientes:
functions:
test:
handler: test.test
description: "test serverless Lambda"
memorySize: 128
timeout: 300
events:
- schedule:
rate: rate(10 minutes)
input:
key: value
- schedule:
rate: rate(10 minutes)
input: ''{"key": "value"}''
- schedule:
rate: rate(10 minutes)
input:
key: ''value''
¿Alguien podría comentar sobre el estado de esta función en Serverless a partir de la versión 1.3.0, y si mi serverless.yml anterior se ve bien o no?
Edición 2: Publicar el serverless.yml de trabajo
functions:
test:
handler: test.test
description: "test serverless Lambda"
memorySize: 128
timeout: 300
events:
- schedule:
rate: rate(10 minutes)
enabled: true
input:
key: value
- schedule:
rate: rate(10 minutes)
input: ''{"key": "value"}''
enabled: true
- schedule:
rate: rate(10 minutes)
input:
key: ''value''
enabled: true
EDITA A TU EDICIÓN: Hice algunas excavaciones, parece que Serverless deshabilitará automáticamente la programación si no es una cadena. Significando si su evento completo es - schedule: rate(10 minutes)
se habilitará. Pero si tiene otras propiedades, TIENE QUE habilitarlo porque se desactivará de forma predeterminada.
Entonces tu .yml actual debería verse así:
functions: test:
handler: test.test
description: "test serverless Lambda"
memorySize: 128
timeout: 300
events:
- schedule:
rate: rate(10 minutes)
enabled: true
input:
key: value
- schedule:
rate: rate(10 minutes)
input: ''{"key": "value"}''
enabled: true
- schedule:
rate: rate(10 minutes)
input:
key: ''value''
enabled: true
Puede usar la misma input
y inputPath
en su archivo inputPath
tal como lo haría con la regla de eventos de cloudwatch. La única diferencia con las reglas de cloudwath es que realmente puede pasar un objeto y Serverless lo alineará automáticamente.
Ejemplo:
functions:
crawl:
handler: crawl
events:
- schedule:
rate: rate(1 hours)
input:
key1: value1
key2: value2
Esto será igual a la regla de evento de input:"{''key1'':''value1'',''key2'':''value2''}"
con la input:"{''key1'':''value1'',''key2'':''value2''}"
tanto, pasa json en lugar de un evento coincidente.
Noté justo ahora que la pregunta fue hecha el 2 de noviembre. En ese momento no fue posible hacerlo, pero se implementó poco después de que se hizo la pregunta. https://github.com/serverless/serverless/pull/2567