亚马逊AWS官方博客
Amazon Cognito集成微信登录部署系列(二)用Lambda开发服务端API
在上一篇中我们介绍了Amazon Cognito集成微信登录的整体架构,开始使用Eclipse开发Lambda函数。在这一篇中我们开始服务端API的整体开发。
后端API开发
我们先实现验证用户的后端API接口。从创建Lambda函数开始。
使用Eclipse来开发Lambda函数
我们使用Eclipse来开发使用 Java 语言的 Lambda 函数。
先在IAM中创建一个管理Lambda函数的IAM用户,并为其创建访问ID和密钥。
注意:为保证安全,建议根据最小权限原则配置这个profile的IAM用户,请仅赋予其管理Lambda等服务的最小权限,而不要直接使用root用户。
安装AWS Toolkit for Eclipse
安装AWS Toolkit for Eclipse,请参考以下文档。
http://docs.thinkwithwp.com/AWSToolkitEclipse/latest/ug/tke_setup.html
由于AWS中国的区域和全球的区域是隔离的,IAM用户也是隔离的,所以管理由西云数据运营的AWS中国(宁夏)区域和由光环新网运营的AWS中国(北京)区域的AWS资源,需要在AWS Toolkit 中默认的Global Configuration外再创建一个仅给由光环新网运营的AWS中国(北京)区域使用的配置
安装好AWS Toolkit之后,我们新建工程时就可以选择AWS Lambda Java Project了。
创建AWS Lambda Java工程
项目名称我们输入CognitoWechat。Group ID输入cn.amazonaws.lambda,Artifact ID输入cognitowechat。Class Name输入AuthenticateUser。Input Type选 Custom。点击Finish按钮。
首次使用时可能会下载Maven等依赖包,请耐心等待。创建完成之后默认会打开README.html文件。把它关闭,我们只留下AuthenticateUser.java这个文件。
发布Lambda函数
发布Lambda函数代码前,我们还有几项准备工作要做。
- 准备好Lambda函数的IAM角色。这个Lambda函数需要读写保存着用户ID和微信用户关联关系的DynamoDB表,以及可以调用Amazon Cognito获取OpenIdTokenForDeveloperIdentity。所以我们创建一个IAM服务角色 CognitoWechat_Lambda_Execution。给它赋予AWSLambdaBasicExecutionRole这个托管策略,再加上一个内联策略,可以读取之前我们创建的表WechatUser,以及可以调用Cognito身份池的OpenIdTokenForDeveloperIdentity。
- 创建或选择一个发布Lambda代码时用于临时保存代码包的Amazon S3桶。
在工程的右键菜单找到 Amazon Web Services,再点选 Upload Function to AWS Lambda…。
在弹出的上传函数向导中,Select the Handler已经默认选中现在我们唯一的一个带Lmbda函数的类名。Select the AWS Region选择 China(Beijing),Create a new Lambda function: 输入函数名“CognitoWechat”。
下一步,我们自己输入一些函数的描述,IAM Role 那里已经默认选中了我们前面创建的角色。然后在S3 bucket选择好用于代码发布的桶。其它都保持默认,点击Finish按钮即可。
注:在本文撰写时AWS Toolkit for Eclipse尚未支持 Java 11,上传Lambda代码时会失败。解决方法是操作系统安装的Java改为Java 8。
测试运行Lambda函数
上传完成后,在工程右键菜单找到 Amazon Web Services,再点选 Run Function to AWS Lambda…。在弹出的运行对话框中,选择 Lambda Hanlder已经默认选中现在唯一一个Handler方法,JSON输入格现在什么都不用填,我们只是测试一下到目前为上的Lambda函数空壳能够正常运行。
我们在Eclipse Console面板可以看到函数输出了Hello from Lambda!,即上述Handler方法的返回内容。到此也可验证AWS Toolkit已经正常配置并可以使用。
小结
这一篇中我们介绍了Eclipse配置Lambda开发环境,使用AWS Toolkit开始动手开发Java的Lambda函数。在下一篇中,我们将继续为大家以代码介绍Lambda函数如何处理来自API Gateway的输入参数、响应给API的返回结果。
索引
Amazon Cognito 集成微信登录部署系列(一)Cognito身份池、Dynamodb表和创建Lambda函数
Amazon Cognito集成微信登录部署系列(二)用Lambda开发服务端API
Amazon Cognito 集成微信登录部署系列(三)与 API Gateway 集成、处理输入参数、返回响应结果
Amazon Cognito 集成微信登录部署系列(四)实现验证逻辑、发布 API
Amazon Cognito 集成微信登录部署系列(五)客户端集成 Cognito 验证