serverless api gateway + lambda
TRANSCRIPT
© 2016, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
李磊 Leon Li, Solutions Architect
创建安全&可扩展的无服务化API使用Amazon API Gateway and AWS Lambda
1. 一种全新的开发模式2. 利用Amazon API Gateway定义API3. 在AWS Lambda中处理应用程序逻辑4. 结合AWS IAM和API Gateway的自定义认证5. 结合SDK生成工具简化移动端开发6. Streeet示例程序7. 开源无服务框架和工具简介
议程
• 拥有一年以上开发经验,对编程语言和编程模型有一定了解和实践的用户
• 对微服务有一定了解,并且了解Restful API定义的开发人员
面向人员
Managed
全新的编程模型
InternetMobile appsAWS Lambda
functions
AWS
API Gateway cache
Endpoints on Amazon EC2
Any other publicly accessible endpoint
Amazon CloudWatch
Amazon CloudFront
API Gateway
API GatewayOther AWS
services
AWS Lambda functions
要点
AWS Lambda + Amazon API Gateway代表没有基础架构需要管理 –我们将会自动伸缩
安全很重要,也很复杂 –利用AWS Identity and Access Management解决这些问题
Swagger 和client SDK生成 –我们已经解决了大部分的工作
我们将会用到的服务
Amazon API Gateway AWS Lambda AWS Lambda Amazon DynamoDB
定义REST API和API路由
执行应用程序逻辑 自定义Authorizer NoSql数据存储
Streeet App架构时尚达人街头分享应用
Unauthenticated
API处理流程
Mobile apps AWS Lambda lambdaHandler
Register
LoginAPI Gateway
Authenticated
Mobile apps AWS Lambda lambdaHandler
ListPosts
GetPosts
API GatewayGetComments
Invoke with caller credentials
Authorized by IAM
创新点?
应用程序将会自动扩张,在流量大的时候使用尽可
能多的服务器资源,但是我们却不需要管理其中的
任何一台
复杂的认证工作交付给AWS来完成, 我们只需要合理的定义和分派IAM的资源
部署工作可以利用Swagger自动完成
API 定义和Swagger
Amazon API Gateway简介
管理部署以及多版本和多环境
定义和托管API
利用Identity and Access Management控制访问云端
资源
利用AWS认证
DDoS 防御以及自动管控流量代理到应用后端
管控网络流量
Method and integration
控制资源和动作方法
• POST –在DynamoDB table中增加一条用户信息/register
• POST –接收用户名密码并认证用户/login
• POST –生成一条新的评论信息• GET –获取评论列表/comments
• GET –获取一条Post/post/{id}
Unauthenticated
Authenticated
Method Response
Integration Request
Method Request
Method
Swagger定义自动化api整合流程
/register:post:summary: Registers a new userconsumes:- application/json
produces:- application/json
parameters:- name: NewUserin: bodyschema:$ref: '#/definitions/User’
x-amazon-apigateway-integration:type: awsuri: arn:aws:apigateway:us-east-1:lambda:path/2015-03-31...
credentials: arn:aws:iam::964405213927:role/pet_store_lambda_invoke...
responses:200:schema:$ref: '#/definitions/RegisterUserResponse'
使用Swagger的好处
• API的定义将会透明保存在代码的Repository中• API的定义可以用于结合其它工具生成文档便于和其它团队协同工作
• API可以通过命令行工作导入并轻松部署到API Gateway中托管并开始提供服务
请求路由处理
高性能的扩展性; 收费灵活高效没有基础架构需要管理
即用即付: Lambda 自动计费您的计算资源. 以100ms为最低计费单元
Bring Your Own Code
Lambda 函数: 无状态,事件驱动的代码模型
支持预设的代码运行环境,Node.js, Python和Java
专注于您的业务逻辑,没有基础架构需要管理.只需要上传代码 AWS Lambda
将会处理剩下其它的事情
AWS Lambda简介
Lambda处理器
lambdaHandler
Register action
Login action
Create comments action
Get comments action
Credentials generation
Streeetdatabase
Amazon API Gateway
强大的Mapping templates
更多介绍
http://amzn.to/1L1hSF5
AWS credentials
JWT – Json Web Token
RFC 7519 / HMAC256 / HMAC512 etc…
The API definition
• POST• 接收用户的username, password• 加密密码并在DynamoDB中创建用户资料• 生成基于JWT的密匙• 返回用户和密匙
/register
• POST• 接收用户的username, password• 比对DynamoDB验证用户登录• 成功后利用JWT加密并生成Token• 返回登录成功后的JWT Token
/login
自定义认证 - Lambda
Client
Lambda Authfunction
API Gateway
OAuth token
Policy is evaluated
Policy is cached
Endpoints on Amazon EC2
Any other publicly accessible endpoint
AWS Lambda functions
403
AWS KMSJWT Provider
IAM Policy是所有AWS服务的权限工具
Mobile apps AWS Lambda lambdaHandlerAPI Gateway
Invoke with caller credentials
Service calls areauthorized using
the IAM role
更多介绍
http://amzn.to/1YkxcjR
DynamoDB
认证后的API调用
街拍和评论列表
•POST•在Dynamodb中插入一条新的评论
•GET•获取新的评论
/comments
• GET• 获取街拍的详细信息
/Post/{id}
利用IAM Role控制权限访问{
"Version": "2012-10-17","Statement": [
{"Effect": "Allow",
"Action": ["dynamodb:GetItem","dynamodb:PutItem","dynamodb:Scan","lambda:InvokeFunction","execute-api:invoke"
],"Resource": [
"arn:aws:dynamodb:us-east-1:xxxxxx:table/posts","arn:aws:lambda:us-east-1:xxxxx:function:test”,"arn:aws:execute-api:us-east-1:xxxx:API_ID/*/POST/comments"
]}
]}
The role allows calls to:• DynamoDB• API Gateway• Lambda
定义Role可以被访问的资源细腻度
使用IAM和AWS平台认证的益处
• 关注分离 –我们的认证策略代理给了AWS平台,使得可以更加专注于业务开发
• 利用IAM policies可以轻松的管理整个平台的权限策略• Roles或者可以轻松的利用一个API请求管理
客户端请求调用
一键SDK生成
客户端的sdk定义了骨架函数
集成认证调用
支持无服务架构的框架和开源工具
Apex by TJ
总结
AWS Lambda + Amazon API Gateway没有服务器需要被管理
Streeet示例程序后台https://github.com/legocode/Streeet
安全很总要,但也很复杂,利用IAM来完成大部分的工作
利用Swagger和SDK生成完成尽可能多的自动化工作
Q&A?
Thank You.