-
首先我们先通过官网简单了解下lambda这个serverless的云服务吧。
-
通过了解官方文档,假设我们使用的是Java开发Function,那么首先需要先部署环境。由于工作上用了Intellij,所以这次分享就以Eclipse为IDE吧。具体可以参考详细文档。
(1) Eclipse安装插件,输入:https://aws.amazon.com/eclipse
(2) 配置Credentials,为了方便将代码上传到Lambda。
(3) 创建Lambda项目
(4) 如果需要提交代码到Lambda,直接在Function类右键,找到“AWS Web Services”然后选择“Upload Function to AWS Lambda”。注意Region尽量和你常用的云服务在同一个Region。
(5) 上传到Lambda的Function包会先存放到S3,所以点Next之后会要你选择一个Bucket,也就是说第2步的Credentials要设置正确不然只能在AWS Console上传了。值得注意的是,通常需要好几秒钟来加载已存在的Bucket名称。
(6) 接下来就可以进入AWS Console查看和测试你的Function了。 -
关于Function的写法,官网列举了几个demo可以参考下。以下我主要是以两个demo总结一下。
(1) 打印Function中所有相关的信息,如:event、context。
package com.amazonaws.lambda.demo;
import java.util.Map;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.LambdaLogger;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
public class LambdaFunctionHandlerTestJson implements RequestHandler<Map<String, String>, String> {
Gson gson = new GsonBuilder().setPrettyPrinting().create();
@Override
public String handleRequest(Map<String, String> event, Context context) {
LambdaLogger logger = context.getLogger();
String response = new String("200 OK");
// log execution details
logger.log("ENVIRONMENT VARIABLES: " + gson.toJson(System.getenv()));
logger.log("CONTEXT: " + gson.toJson(context));
// process event
logger.log("EVENT: " + gson.toJson(event));
logger.log("EVENT TYPE: " + event.getClass().toString());
return response;
}
}
输出的ENVIRONMENT VARIABLES:
EVENT就是执行Test时输入的参数:
(2) 通过S3Trigger来监听S3文件删除,并且执行代码。
package com.amazonaws.lambda.demo;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.LambdaLogger;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import com.amazonaws.services.lambda.runtime.events.S3Event;
import com.amazonaws.services.s3.AmazonS3;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
public class LambdaFunctionHandlerS3Trigger implements RequestHandler<S3Event, String> {
Gson gson = new GsonBuilder().setPrettyPrinting().create();
public LambdaFunctionHandlerS3Trigger() {}
// Test purpose only.
LambdaFunctionHandlerS3Trigger(AmazonS3 s3) {
}
@Override
public String handleRequest(S3Event event, Context context) {
LambdaLogger logger = context.getLogger();
String response = new String("200 OK");
// log execution details
logger.log("ENVIRONMENT VARIABLES: " + gson.toJson(System.getenv()));
logger.log("CONTEXT: " + gson.toJson(context));
// process event
logger.log("EVENT: " + gson.toJson(event));
logger.log("EVENT TYPE: " + event.getClass().toString());
return response;
}
}
这个时候,当我们在S3删除Object的时候,就会触发LambdaFunctionHandlerS3Trigger了。当然也可以手动执行Test来触发。
创建trigger后,Bucket自动创建了Event,如果想要手动创建可以参考这个。
5. Function产生的日志可以通过Monitoring查看,详细的日志可以进入到CloudWatch。
注:
- 如果CloudWatch查看不了Function日志,可以先确认Region是同一个,如果是的话就得检查IAM Role的权限了。
参考:Why can’t I see logs in my lambda function?