用 Lambda 开发服务端 API

阅读数:83 2019 年 10 月 9 日 17:38

用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.aws.amazon.com/AWSToolkitEclipse/latest/ug/tke_setup.html

由于 AWS 中国的区域和全球的区域是隔离的,IAM 用户也是隔离的,所以管理由西云数据运营的 AWS 中国(宁夏)区域和由光环新网运营的 AWS 中国(北京)区域的 AWS 资源,需要在 AWS Toolkit 中默认的 Global Configuration 外再创建一个仅给由光环新网运营的 AWS 中国(北京)区域使用的配置
用Lambda开发服务端API
安装好 AWS Toolkit 之后,我们新建工程时就可以选择 AWS Lambda Java Project 了。

创建 AWS Lambda Java 工程
用Lambda开发服务端API
项目名称我们输入 CognitoWechat。Group ID 输入 cn.amazonaws.lambda,Artifact ID 输入 cognitowechat。Class Name 输入 AuthenticateUser。Input Type 选 Custom。点击 Finish 按钮。

用Lambda开发服务端API
首次使用时可能会下载 Maven 等依赖包,请耐心等待。创建完成之后默认会打开 README.html 文件。把它关闭,我们只留下 AuthenticateUser.java 这个文件。

发布 Lambda 函数
发布 Lambda 函数代码前,我们还有几项准备工作要做。

准备好 Lambda 函数的 IAM 角色。这个 Lambda 函数需要读写保存着用户 ID 和微信用户关联关系的 DynamoDB 表,以及可以调用 Amazon Cognito 获取 OpenIdTokenForDeveloperIdentity。所以我们创建一个 IAM 服务角色 CognitoWechat_Lambda_Execution。给它赋予 AWSLambdaBasicExecutionRole 这个托管策略,再加上一个内联策略,可以读取之前我们创建的表 WechatUser,以及可以调用 Cognito 身份池的 OpenIdTokenForDeveloperIdentity。

复制代码
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"dynamodb:GetItem"
],
"Resource": [
"arn:aws-cn:dynamodb:cn-north-1:123456789012:table/WechatUser"
]
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": [
"cognito-identity:GetOpenIdTokenForDeveloperIdentity"
],
"Resource": [
"arn:aws-cn:cognito-identity:cn-north-1:123456789012:identitypool/cn-north-1:12345678-90ab-cdef-1234-567890abcdef"
]
}
]
}
  1. 创建或选择一个发布 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”。
用Lambda开发服务端API
下一步,我们自己输入一些函数的描述,IAM Role 那里已经默认选中了我们前面创建的角色。然后在 S3 bucket 选择好用于代码发布的桶。其它都保持默认,点击 Finish 按钮即可。
用Lambda开发服务端API
注:在本文撰写时 AWS Toolkit for Eclipse 尚未支持 Java 11,上传 Lambda 代码时会失败。解决方法是操作系统安装的 Java 改为 Java 8。

测试运行 Lambda 函数
上传完成后,在工程右键菜单找到 Amazon Web Services,再点选 Run Function to AWS Lambda…。在弹出的运行对话框中,选择 Lambda Hanlder 已经默认选中现在唯一一个 Handler 方法,JSON 输入格现在什么都不用填,我们只是测试一下到目前为上的 Lambda 函数空壳能够正常运行。
用Lambda开发服务端API
我们在 Eclipse Console 面板可以看到函数输出了 Hello from Lambda!,即上述 Handler 方法的返回内容。到此也可验证 AWS Toolkit 已经正常配置并可以使用。

小结

这一篇中我们介绍了 Eclipse 配置 Lambda 开发环境,使用 AWS Toolkit 开始动手开发 Java 的 Lambda 函数。在下一篇中,我们将继续为大家以代码介绍 Lambda 函数如何处理来自 API Gateway 的输入参数、响应给 API 的返回结果。

作者介绍:

薛峰
亚马逊 AWS 解决方案架构师,AWS 的云计算方案架构的咨询和设计,同时致力于 AWS 云服务在国内和全球的应用和推广,在大规模并发应用架构、移动应用以及无服务器架构等方面有丰富的实践经验。在加入 AWS 之前曾长期从事互联网应用开发,先后在新浪、唯品会等公司担任架构师、技术总监等职位。对跨平台多终端的互联网应用架构和方案有深入的研究。

本文转载自 AWS 技术博客。

原文链接:
https://amazonaws-china.com/cn/blogs/china/amazon-cognito-wechat-deployment-2/

欲了解 AWS 的更多信息,请访问【AWS 技术专区】

评论

发布