前阵子为了将AWS Lambda function 从VS上.NET迁移至Linux系统,所以选择以前使用过的Eclipse搭配Java语言来实现。
进入主题,首先我们需要按照官方的说明安装好Eclipse Java EE和AWS Toolkit,官方引导传送门: http://docs.amazonaws.cn/toolkit-for-eclipse/v1/user-guide/setup-install.html点击打开链接;需要注意的是,AWS Toolkit链接https://aws.amazon.com/eclipse点击打开链接在eclipse中Install new Software 似乎无法加载出来,建议直接打开该地址,然后从Github下载最新的安装包,之后在eclipse直接添加安装包位置安装(这个跟ADT安装一样的)。
正式使用之前有一个很重要的步骤,注册一个Amazon账户,然后准备好AccessId和SecretKey、IAM role,还有S3 bucket,具体步骤请自行参考Amazon官方说明。
安装完成之后,一般会提示重启eclipse,之后会需要输入AccessId和SecretKey作为AWS Toolkit的Credential,重启后第一次会直接跳出窗口让你输入,选择取消后也可以从Window-->Preferences-->AWS Toolkit进行添加;再从Perspective-->Customize Perspective...让AWS Toolkit显示在工具栏,就可以从工具栏选择New AWS Lambda Java Project了。当然,这里你也可以选择其他project类型,但本文仅介绍Lambda Project和Lambda function。选择创建新的AWS项目时,输入项目名称、项目包名,选择RequestHandler参数类型,我这里是选择自定义custom,确认后,请保持网络畅通,等待自动下载aws-sdk等依赖并最终生成项目。
生成项目后,我们可以在/src/main/java峡找到默认的class,里面仅有一个handlerRequest方法,我们可以根据需求修改函数的input参数(第一个)和output参数(第二个),这里需要注意class Implement 的Requesthandler后面的参数类型需要同步修改;
接下来需要访问S3存储了,但考虑到代码中Access Id等数据的安全性,建议先在Amazon service console--> Lambda,创建一个Function,在configuration中,Function code部分选择Runtime Java8,handler里输入包名和方法名;添加Environment Variables,记录一些重要的常量;回到顶部,点击Save。
我们再回到eclipse在handlerRequest中添加需要执行的代码,首先取得环境变量比如access id,然后实例化AmazonS3;
String access_id = System.getenv("ACCESS_ID"); //get Environment Variables
String secret_key = System.getenv("SECRET_KEY");
AWSCredentials credentials = new BasicAWSCredentials(access_id,secret_key);
AmazonS3 s3Client = AmazonS3ClientBuilder.standard().withCredentials(
new AWSStaticCredentialsProvider(credentials)).build(); // new a Amazon S3 Client object
之后通过s3Client 取得bucket和key对应的Object和InputStream并且逐行读出;
S3Object object = s3Client.getObject(bucketName,key); //get S3 object by bucketName and key
if(object!=null){while ((line = reader.readLine()) != null && !line.isEmpty()) { //read line
//deal with your function here
}
} catch (IOException e) {}
以上仅仅是S3下载某个文件的简单举例,希望对大家有些参考价值。