11 月 19 - 20 日 Apache Pulsar 社区年度盛会来啦,立即报名! 了解详情
写点什么

用 Lambda 开发服务端 API

  • 2019-10-09
  • 本文字数:2101 字

    阅读完需:约 7 分钟

用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 中国(北京)区域使用的配置



安装好 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。


{
"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 桶。

  2. 在工程的右键菜单找到 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 的返回结果。


作者介绍:


薛峰


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


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/amazon-cognito-wechat-deployment-2/


2019-10-09 17:38514
用户头像

发布了 1530 篇内容, 共 61.6 次阅读, 收获喜欢 66 次。

关注

评论

发布
暂无评论
发现更多内容

办公效率起飞了!Python终于解放了我的双手

Jackpop

工作想法小计2/7 - 2/11

非晓为骁

个人成长 开发 工作方式 Go 语言

DOM 节点的克隆和导入

编程三昧

JavaScript 前端 DOM 2月月更

The Rust Programming Language

Joseph295

鸿蒙学习笔记之使用 XML 方式创建布局

宇宙之一粟

鸿蒙 java UI 2月月更

gopher成长之路(四):GO开发工程师写QT

非晓为骁

个人成长

韵达基于云原生的业务中台建设 | 实战派

阿里巴巴云原生

阿里云 云原生 业务中台 合作案例

Kubernetes核心组件-ETCD详解

巨子嘉

容器 云原生 etcd

设计消息队列存储消息数据的 MySQL 表格

swallowluo

架构实战营 #架构实战营 「架构实战营」

RPA进阶(一):走近 RPA 世界

No Silver Bullet

RPA 机器人流程自动化 2月月更

技术盘点:2022 年容器、Serverless、可观测、服务网格有哪些值得关注的趋势?

阿里巴巴云原生

阿里云 Serverless 云原生 趋势 可观测

Go反射的三大法则

linlh

反射 元编程 Go 语言 2月月更

如何利用区块链改进金融系统身份验证?

CECBC

总算彻底搞懂Python集合了

Jackpop

为什么需要单元测试?

蜜糖的代码注释

单元测试 后端开发 2月月更

【C语言】一维数组

謓泽

C语言 2月月更 一维数组

从冬奥看中国科技(五):漫天塞地物联网

脑极体

也许我们可以用另一种角度与观点看待世界所发生的事情,让你有所解答。

叶小鍵

电子书《大型组织深入推广零代码应用平台的行动指南》正式发布!

明道云

LabVIEW跳转访问网页

不脱发的程序猿

LabVIEW 跳转访问网页

Go语言图书管理RESTful API开发实战

Jackpop

消息队列存储消息数据的表结构

皓月

「架构实战营」

Kubernetes集群仪表盘dashboard&Kuboard安装Demo

山河已无恙

Kubernetes 2月月更

LabVIEW生成应用程序(exe)和安装程序(installer)

不脱发的程序猿

LabVIEW 生成应用程序(exe) 安装程序(installer)

基于51单片机室内灯光控制系统

DS小龙哥

2月月更

如何打造一款得心应手的VS Code?

Jackpop

显示器选购总结-戴尔2705QM-明基PD2700U

liin

总结 经验分享

技术盘点:2022年云原生架构趋势解读

阿里巴巴云原生

阿里云 架构 云原生 趋势

kube-scheduler源码分析(1)-初始化与启动分析

良凯尔

源码 Kubernetes 容器 源码分析 #Kubernetes#

用Lambda开发服务端API_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章