Este blog ha explicado algunos conceptos de Serverless con ejemplos de código:
- FaaS sin servidor con AWS Lambda y Java
- Botón AWS IoT, Lambda y Couchbase
- Microservicios con AWS API Gateway, AWS Lambda y Couchbase
- Microservicios con el modelo de aplicaciones sin servidor de AWS y Couchbase
Esta entrada de blog en particular mostrará cómo utilizar AWS Lambda para almacenar tweets de un tuitero en Couchbase. Estos son los componentes de alto nivel:
Los conceptos clave son:
- Función Lambda desplegada mediante Modelo de aplicación sin servidor
- Se activa cada 3 horas mediante Eventos programados
- Utiliza Twitter4J API para consultar los nuevos tweets desde la última búsqueda
- Utilice API Java SDK de Couchbase para almacenar documentos JSON en Servidor Couchbase
El código de muestra completo de este blog está disponible en github.com/arun-gupta/twitter-n1ql.
Modelo de aplicación sin servidor
Modelo de aplicación sin servidoro SAM, define una sintaxis simplificada para expresar recursos sin servidor. SAM amplía AWS CloudFormation a
añadir compatibilidad con API Gateway, AWS Lambda y Amazon DynamoDB. Lea más detalles en Microservicios con el modelo de aplicaciones sin servidor de AWS y Couchbase.
Para nuestra aplicación, la plantilla SAM está disponible en github.com/arun-gupta/twitter-n1ql/blob/master/template-example.yml y se muestra a continuación:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
AWSTemplateFormatVersion : '2010-09-09' Transformar: AWS::Sin servidor-2016-10-31 Descripción: Twitter Alimentar Análisis utilizando Couchbase/N1QL Recursos: TrumpFeed: Tipo: AWS::Sin servidor::Función Propiedades: Manipulador: org.muestra.twitter.TwitterRequestHandler Tiempo de ejecución: java8 CódigoUri: s3://arungupta.me/twitter-feed-1.0-SNAPSHOT.jar Tiempo de espera: 30 TamañoMemoria: 1024 Medio ambiente: Variables: COUCHBASE_HOST: COUCHBASE_BUCKET_PASSWORD: Papel: arn:aws:Soy::598307997273:papel/microservicioRole Eventos: Temporizador: Tipo: Horario Propiedades: Horario: tarifa(3 horas) |
¿Qué vemos aquí?
- La función está empaquetada y disponible en un bucket S3
- La clase Handler es
org.sample.twittter.TwitterRequestHandler
y se encuentra en github.com/arun-gupta/twitter-n1ql/blob/master/twitter-feed/src/main/java/org/sample/twitter/TwitterRequestHandler.java.
Eso parece:
12345678910111213público clase TwitterRequestHandler implementa RequestHandler<Solicitar, Cadena> {@Anularpúblico Cadena handleRequest(Solicitar solicitar, Contexto contexto) {si (solicitar.getName() == null)solicitar.setName("realDonaldTrump");int tuitea = nuevo TwitterFeed().readFeed(solicitar.getName());devolver " Actualizado " + tuitea + " tweets para " + solicitar.getName() + "!";}}
Por defecto, esta clase lee el handle de twitter de Donald Trump. Más información en otro blog. COUCHBASE_HOST
yCOUCHBASE_BUCKET_PASSWORD
son variables de entorno que proporcionan el host EC2 donde se ejecuta la base de datos Couchbase y la contraseña del bucket.- La función puede activarse por diferentes eventos. En nuestro caso, se activa cada tres horas. Más detalles sobre la expresión utilizada aquí en Programar expresiones utilizando Rate o Cron.
Obtención de tweets con Twitter4J
Los tweets se leen utilizando Twitter4J API. Es una API no oficial de Twitter que proporciona una abstracción Java sobre API REST de Twitter. He aquí un ejemplo sencillo:
1 2 3 |
Twitter twitter = getTwitter(); Buscapersonas paginación = nuevo Buscapersonas(página, cuente, desdeId); Lista lista = twitter.getUserTimeline(usuario, paginación); |
Documentos de Twitter4J y Javadocs son bastante completos. La API de Twitter sólo permite leer los últimos 200 tweets. La función lambda se invoca cada 3 horas.
La frecuencia de tuits de @realDonaldTrump no es de 200 cada 3 horas, al menos de momento. Si alcanza ese nivel peligroso, entonces podemos ajustar la tasa para activar la función Lambda con más frecuencia.
La representación JSON de cada tweet se almacena en el servidor Couchbase utilizando SDK Java de Couchbase. AWS Lambda es compatible con Node, Python y C#. Y así
puede utilizar SDK de Couchbase Node, SDK de Couchbase para Python o
SDK .NET de Couchbase para escribir estas funciones también. La API de Twitter4J permite obtener tweets a partir del id de un tweet en particular. Esto permite
garantizar que no se obtengan tweets duplicados. Esto nos obliga a ordenar todos los tweets en un orden determinado y, a continuación, elegir el id del tweet más reciente. Esto se solucionó con el sencillo método Consulta N1QL:
1 |
SELECCIONE id DESDE twitter PEDIR POR id DESC LÍMITE 1 |
La sintaxis es muy parecida a la de SQL. Más sobre esto en un blog posterior.
Almacenar Tweets en Couchbase
El último punto es almacenar los tweets recuperados en Couchbase. Valor de COUCHABSE_HOST
se utiliza para conectarse a la instancia de Couchbase. El valor de COUCHBASE_BUCKET_PASSWORD
variable de entorno
es conectarse al bucket seguro donde se almacenan todos los documentos JSON. Es muy importante que el bucket esté protegido por contraseña y no se especifique directamente en el código fuente. Más sobre esto en un blog posterior. El documento JSON
es upserted (insertar o actualizar) en Couchbase usando la API Java de Couchbase:
1 |
cubo.upsert(jsonDocument); |
Esta función lambda lleva funcionando unos días y ha capturado 258 tweets de @realDonaldTrump.
En breve publicaremos un interesante análisis de sus tuits.
Hable con nosotros:
- Foros de Couchbase
- Portal para desarrolladores de bases de datos Couchbase
- @couchbasedev y @couchbase
El código de muestra completo de este blog está disponible en github.com/arun-gupta/twitter-n1ql.