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' Transform: AWS::Serverless-2016-10-31 Description: Twitter Feed Analysis using Couchbase/N1QL Resources: TrumpFeed: Type: AWS::Serverless::Function Properties: Handler: org.sample.twitter.TwitterRequestHandler Runtime: java8 CodeUri: s3://arungupta.me/twitter-feed-1.0-SNAPSHOT.jar Timeout: 30 MemorySize: 1024 Environment: Variables: COUCHBASE_HOST: COUCHBASE_BUCKET_PASSWORD: Role: arn:aws:iam::598307997273:role/microserviceRole Events: Timer: Type: Schedule Properties: Schedule: rate(3 hours) |
¿Qué vemos aquí?
- La función está empaquetada y disponible en un bucket S3
- La clase Handler es
org.sample.twittter.TwitterRequestHandlery se encuentra en github.com/arun-gupta/twitter-n1ql/blob/master/twitter-feed/src/main/java/org/sample/twitter/TwitterRequestHandler.java.
Eso parece:
12345678910111213public class TwitterRequestHandler implements RequestHandler<Request, String> {@Overridepublic String handleRequest(Request request, Context context) {if (request.getName() == null)request.setName("realDonaldTrump");int tweets = new TwitterFeed().readFeed(request.getName());return "Updated " + tweets + " tweets for " + request.getName() + "!";}}
Por defecto, esta clase lee el handle de twitter de Donald Trump. Más información en otro blog. COUCHBASE_HOSTyCOUCHBASE_BUCKET_PASSWORDson 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(); Paging paging = new Paging(page, count, sinceId); List list = twitter.getUserTimeline(user, paging); |
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 |
SELECT id FROM twitter ORDER BY id DESC LIMIT 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 |
bucket.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.
