SlideShare a Scribd company logo
© 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定义API
3. 在AWS Lambda中处理应用程序逻辑
4. 结合AWS IAM和API Gateway的自定义认证
5. 结合SDK生成工具简化移动端开发
6. Streeet示例程序
7. 开源无服务框架和工具简介
议程
• 拥有一年以上开发经验,对编程语言和编程模型有一定了
解和实践的用户
• 对微服务有一定了解,并且了解Restful API定义的开发人
员
面向人员
Managed
全新的编程模型
InternetMobile apps
AWS Lambda
functions
AWS
API Gateway
cache
Endpoints on
Amazon EC2
Any other publicly
accessible endpoint
Amazon
CloudWatch
Amazon
CloudFront
API
Gateway
API Gateway
Other 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
Login
API Gateway
Authenticated
Mobile apps AWS Lambda lambdaHandler
ListPosts
GetPosts
API Gateway
GetComments
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 user
consumes:
- application/json
produces:
- application/json
parameters:
- name: NewUser
in: body
schema:
$ref: '#/definitions/User’
x-amazon-apigateway-integration:
type: aws
uri: 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
Streeet
database
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 Auth
function
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 lambdaHandler
API Gateway
Invoke with
caller credentials
Service calls are
authorized using
the IAM role
更多介绍
http://amzn.to/1YkxcjR
DynamoDB
Serverless api gateway + lambda
Serverless api gateway + lambda
Serverless api gateway + lambda
认证后的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请求管理
Serverless api gateway + lambda
Serverless api gateway + lambda
客户端请求调用
一键SDK生成
客户端的sdk定义了骨架函数
集成认证调用
支持无服务架构的框架和开源工具
Apex by TJ
总结
AWS Lambda + Amazon API Gateway没有服务器需要被管理
Streeet示例程序后台
https://github.com/legocode/Streeet
安全很总要,但也很复杂,利用IAM来完成大部分的工作
利用Swagger和SDK生成完成尽可能多的自动化工作
Q&A?
Thank You.

More Related Content

Viewers also liked (11)

Autoscaling Spark on AWS EC2 - 11th Spark London meetup
Autoscaling Spark on AWS EC2 - 11th Spark London meetupAutoscaling Spark on AWS EC2 - 11th Spark London meetup
Autoscaling Spark on AWS EC2 - 11th Spark London meetup
Rafal Kwasny
 
Building microservices in python @ pycon2017
Building microservices in python @ pycon2017Building microservices in python @ pycon2017
Building microservices in python @ pycon2017
Jonas Cheng
 
OpsStack--Integrated Operation Platform
OpsStack--Integrated Operation PlatformOpsStack--Integrated Operation Platform
OpsStack--Integrated Operation Platform
ChinaNetCloud
 
AWS Summit OaaS Talk by ChinaNetCloud
AWS Summit OaaS Talk by ChinaNetCloudAWS Summit OaaS Talk by ChinaNetCloud
AWS Summit OaaS Talk by ChinaNetCloud
ChinaNetCloud
 
AWS EC2 and ELB troubleshooting
AWS EC2 and ELB troubleshootingAWS EC2 and ELB troubleshooting
AWS EC2 and ELB troubleshooting
Shiva Narayanaswamy
 
基于Aws的dev ops实践指南 王毅
基于Aws的dev ops实践指南 王毅基于Aws的dev ops实践指南 王毅
基于Aws的dev ops实践指南 王毅
Mason Mei
 
AWS ELB Tips & Best Practices
AWS ELB Tips & Best PracticesAWS ELB Tips & Best Practices
AWS ELB Tips & Best Practices
ChinaNetCloud
 
淺談系統監控與 AWS CloudWatch 的應用
淺談系統監控與 AWS CloudWatch 的應用淺談系統監控與 AWS CloudWatch 的應用
淺談系統監控與 AWS CloudWatch 的應用
Rick Hwang
 
基于Aws的持续集成、交付和部署 代闻
基于Aws的持续集成、交付和部署 代闻基于Aws的持续集成、交付和部署 代闻
基于Aws的持续集成、交付和部署 代闻
Mason Mei
 
Aws summit devops 云端多环境自动化运维和部署
Aws summit devops   云端多环境自动化运维和部署Aws summit devops   云端多环境自动化运维和部署
Aws summit devops 云端多环境自动化运维和部署
Leon Li
 
Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲
Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲
Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲
ChinaNetCloud
 
Autoscaling Spark on AWS EC2 - 11th Spark London meetup
Autoscaling Spark on AWS EC2 - 11th Spark London meetupAutoscaling Spark on AWS EC2 - 11th Spark London meetup
Autoscaling Spark on AWS EC2 - 11th Spark London meetup
Rafal Kwasny
 
Building microservices in python @ pycon2017
Building microservices in python @ pycon2017Building microservices in python @ pycon2017
Building microservices in python @ pycon2017
Jonas Cheng
 
OpsStack--Integrated Operation Platform
OpsStack--Integrated Operation PlatformOpsStack--Integrated Operation Platform
OpsStack--Integrated Operation Platform
ChinaNetCloud
 
AWS Summit OaaS Talk by ChinaNetCloud
AWS Summit OaaS Talk by ChinaNetCloudAWS Summit OaaS Talk by ChinaNetCloud
AWS Summit OaaS Talk by ChinaNetCloud
ChinaNetCloud
 
基于Aws的dev ops实践指南 王毅
基于Aws的dev ops实践指南 王毅基于Aws的dev ops实践指南 王毅
基于Aws的dev ops实践指南 王毅
Mason Mei
 
AWS ELB Tips & Best Practices
AWS ELB Tips & Best PracticesAWS ELB Tips & Best Practices
AWS ELB Tips & Best Practices
ChinaNetCloud
 
淺談系統監控與 AWS CloudWatch 的應用
淺談系統監控與 AWS CloudWatch 的應用淺談系統監控與 AWS CloudWatch 的應用
淺談系統監控與 AWS CloudWatch 的應用
Rick Hwang
 
基于Aws的持续集成、交付和部署 代闻
基于Aws的持续集成、交付和部署 代闻基于Aws的持续集成、交付和部署 代闻
基于Aws的持续集成、交付和部署 代闻
Mason Mei
 
Aws summit devops 云端多环境自动化运维和部署
Aws summit devops   云端多环境自动化运维和部署Aws summit devops   云端多环境自动化运维和部署
Aws summit devops 云端多环境自动化运维和部署
Leon Li
 
Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲
Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲
Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲
ChinaNetCloud
 

Serverless api gateway + lambda