Este blog explicou alguns conceitos do Serverless com exemplos de código:
- FaaS sem servidor com AWS Lambda e Java
- Botão IoT do AWS, Lambda e Couchbase
- Microsserviço usando o AWS API Gateway, o AWS Lambda e o Couchbase
- Microsserviço usando o modelo de aplicativo sem servidor do AWS e o Couchbase
Esta entrada de blog específica mostrará como usar o AWS Lambda para armazenar tweets de um tweeter em Couchbase. Aqui estão os componentes de alto nível:
Os principais conceitos são:
- Função Lambda implementada usando Modelo de aplicativo sem servidor
- Acionado a cada 3 horas usando Eventos programados
- Usos Twitter4J API para consultar novos tweets desde a última busca
- Uso API do SDK Java do Couchbase para armazenar documentos JSON no Servidor Couchbase
O código de amostra completo para este blog está disponível em github.com/arun-gupta/twitter-n1ql.
Modelo de aplicativo sem servidor
Modelo de aplicativo sem servidorou SAM, define uma sintaxe simplificada para expressar recursos sem servidor. O SAM estende AWS CloudFormation para
adicionar suporte para API Gateway, AWS Lambda e Amazon DynamoDB. Leia mais detalhes em Microsserviço usando o modelo de aplicativo sem servidor do AWS e o Couchbase.
Para nosso aplicativo, o modelo SAM está disponível em github.com/arun-gupta/twitter-n1ql/blob/master/template-example.yml e mostrado abaixo:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
Versão do AWSTemplateFormat : '2010-09-09' Transformar: AWS::Sem servidor-2016-10-31 Descrição: Twitter Alimentação Análise usando Couchbase/N1QL Recursos: TrumpFeed: Tipo: AWS::Sem servidor::Função Propriedades: Manipulador: org.amostra.twitter.TwitterRequestHandler Tempo de execução: java8 CodeUri: s3://arungupta.me/twitter-feed-1.0-SNAPSHOT.jar Tempo limite: 30 MemorySize: 1024 Meio ambiente: Variáveis: COUCHBASE_HOST: COUCHBASE_BUCKET_PASSWORD: Função: arn:aws:iam::598307997273:função/microserviceRole Eventos: Temporizador: Tipo: Cronograma Propriedades: Cronograma: taxa(3 horas) |
O que estamos vendo aqui?
- A função é embalada e está disponível em um balde S3
- A classe do manipulador é
org.sample.twittter.TwitterRequestHandlere está em github.com/arun-gupta/twitter-n1ql/blob/master/twitter-feed/src/main/java/org/sample/twitter/TwitterRequestHandler.java.
Parece que sim:
12345678910111213público classe TwitterRequestHandler implementa Solicitador<Solicitação, Cordas> {@Substituirpúblico Cordas handleRequest(Solicitação solicitação, Contexto contexto) {se (solicitação.getName() == nulo)solicitação.setName("realDonaldTrump");int tweets = novo TwitterFeed().readFeed(solicitação.getName());retorno "Atualizado" + tweets + " tweets para " + solicitação.getName() + "!";}}
Por padrão, essa classe lê o identificador do Twitter de Donald Trump. Mais informações sobre isso em um próximo blog. COUCHBASE_HOSTeCOUCHBASE_BUCKET_PASSWORDsão variáveis de ambiente que fornecem o host do EC2 onde o banco de dados do Couchbase está sendo executado e a senha do bucket.- A função pode ser acionada por diferentes eventos. Em nosso caso, ela é acionada a cada três horas. Mais detalhes sobre a expressão usada aqui estão em Programar expressões usando Rate ou Cron.
Obtenção de tweets usando o Twitter4J
Os tweets são lidos usando Twitter4J API. É uma API não oficial do Twitter que fornece uma abstração Java sobre API REST do Twitter. Aqui está um exemplo simples:
|
1 2 3 |
Twitter twitter = getTwitter(); Paging paginação = novo Paging(página, contagem, desdeId); Lista lista = twitter.getUserTimeline(usuário, paginação); |
Documentos do Twitter4J e Javadocs são bastante abrangentes. A API do Twitter permite ler apenas os últimos 200 tweets. A função Lambda é chamada a cada 3 horas.
A frequência de tuítes de @realDonaldTrump não é de 200 a cada 3 horas, pelo menos por enquanto. Se atingir esse nível perigoso, poderemos ajustar a taxa para acionar a função Lambda com mais frequência.
A representação JSON de cada tweet é armazenada no servidor Couchbase usando SDK Java do Couchbase. O AWS Lambda é compatível com Node, Python e C#. E assim
você pode usar SDK do nó do Couchbase, SDK do Couchbase em Python ou
SDK do Couchbase .NET para escrever essas funções também. A API do Twitter4J permite buscar tweets desde o id de um determinado tweet. Isso permite
garantir que não sejam buscados tweets duplicados. Para isso, precisamos classificar todos os tweets em uma ordem específica e, em seguida, escolher o ID do tweet mais recente. Isso foi resolvido usando o simples Consulta N1QL:
|
1 |
SELECIONAR id DE twitter ORDEM BY id DESC LIMITE 1 |
A sintaxe é muito parecida com a do SQL. Mais informações sobre isso em um próximo blog.
Armazenar tweets no Couchbase
O item final é armazenar os tweets recuperados no Couchbase. Valor de COUCHABSE_HOST é usada para se conectar à instância do Couchbase. O valor de COUCHBASE_BUCKET_PASSWORD variável de ambiente
é conectar-se ao bucket seguro em que todos os documentos JSON são armazenados. É muito importante que o bucket seja protegido por senha e não seja especificado diretamente no código-fonte. Falaremos mais sobre isso em um próximo blog. O documento JSON
é inserido (inserção ou atualização) no Couchbase usando a API Java do Couchbase:
|
1 |
balde.upsert(jsonDocument); |
Essa função Lambda está sendo executada há alguns dias e capturou 258 tweets de @realDonaldTrump.

Uma análise interessante de seus tweets será publicada em breve!
Fale conosco:
O código de amostra completo para este blog está disponível em github.com/arun-gupta/twitter-n1ql.
