aws lambda
该博客通过代码示例解释了一些无服务器概念:
- 带有AWS Lambda和Java的无服务器FaaS
- AWS IoT按钮,Lambda和Couchbase
- 使用AWS API Gateway,AWS Lambda和Couchbase的微服务
- 使用AWS无服务器应用程序模型和Couchbase的微服务
这个特定的博客条目将展示如何使用AWS Lambda在Couchbase中存储高音扬声器的鸣叫。 以下是高级组件:
关键概念是:
- 使用无服务器应用程序模型部署Lambda函数
- 使用预定事件每3小时触发一次
- 自上次获取以来,使用Twitter4J API查询新推文
- 使用Couchbase Java SDK API将JSON文档存储在Couchbase服务器中
可以在github.com/arun-gupta/twitter-n1ql上找到此博客的完整示例代码。
无服务器应用程序模型
无服务器应用程序模型 (SAM)定义了简化的语法,用于表达无服务器资源。 SAM扩展了AWS CloudFormation,以添加对API网关,AWS Lambda和Amazon DynamoDB的支持。 阅读使用AWS无服务器应用程序模型和Couchbase的微服务中的更多详细信息。
对于我们的应用程序,可以在github.com/arun-gupta/twitter-n1ql/blob/master/template-example.yml中找到SAM模板,如下所示:
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: <value>
COUCHBASE_BUCKET_PASSWORD: <value>
Role: arn:aws:iam::598307997273:role/microserviceRole
Events:
Timer:
Type: Schedule
Properties:
Schedule: rate(3 hours)
我们在这里看到什么?
- 功能已打包并在S3存储桶中可用
- 处理程序类是
org.sample.twittter.TwitterRequestHandler
,位于github.com/arun-gupta/twitter-n1ql/blob/master/twitter-feed/src/main/java/org/sample/twitter/TwitterRequestHandler.java 。 看起来像:
public class TwitterRequestHandler implements RequestHandler<Request, String> {
@Override
public 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() + "!";
}
}
- 默认情况下,此类读取Donald Trump的twitter句柄。 后续博客中提供的更多乐趣。
-
COUCHBASE_HOST
和COUCHBASE_BUCKET_PASSWORD
是环境变量,可提供运行Couchbase数据库的EC2主机以及存储区的密码。 - 功能可以由不同的事件触发。 在我们的情况下,这每三个小时触发一次。 有关此处使用的表达式的更多详细信息,请参见使用Rate或Cron的Schedule Expressions 。
使用Twitter4J获取推文
使用Twitter4J API阅读推文。 它是一种非官方的Twitter API,它通过Twitter REST API提供Java抽象。 这是一个简单的示例:
Twitter twitter = getTwitter();
Paging paging = new Paging(page, count, sinceId);
List<Status> list = twitter.getUserTimeline(user, paging);
Twitter4J Docs和Javadocs非常全面。
Twitter API仅允许读取最后200条推文。 Lambda函数每3小时调用一次。 至少到目前为止 , @ realDonaldTrump的鸣叫频率不是每3小时200条。 如果确实达到了危险水平,那么我们可以调整频率以更频繁地触发Lambda函数。
每个推文的JSON表示都使用Couchbase Java SDK存储在Couchbase服务器中。 AWS Lambda支持Node,Python和C#。 因此,您也可以使用Couchbase Node SDK , Couchbase Python SDK或Couchbase .NET SDK来编写这些功能。
Twitter4J API允许自特定推文的ID以来获取推文。 这样可以确保不提取重复的tweet。 这要求我们按特定顺序对所有推文进行排序,然后选择最新推文的ID。 使用简单的N1QL查询解决了此问题:
SELECT id FROM twitter ORDER BY id DESC LIMIT 1
语法非常类似于SQL。 在随后的博客中对此有更多的了解。
将推文存储在Couchbase中
最后一项是将检索到的推文存储在Couchbase中。
COUCHABSE_HOST
环境变量的值用于连接到Couchbase实例。 COUCHBASE_BUCKET_PASSWORD
环境变量的值是连接到存储所有JSON文档的安全存储区。 非常重要的一点是,存储桶必须受密码保护并且不能在源代码中直接指定。 在随后的博客中对此有更多的了解。
使用Couchbase Java API在Couchbase中更新(插入或更新)JSON文档:
bucket.upsert(jsonDocument);
这个Lambda函数已经运行了几天,并且已经从@realDonaldTrump捕获了258条推文。
即将对他的推文进行有趣的分析!
与我们交谈:
可以在github.com/arun-gupta/twitter-n1ql上找到此博客的完整示例代码。
aws lambda