serverless api gateway + lambda

42
© 2016, Amazon Web Services, Inc. or its Affiliates. All rights reserved. 李磊 Leon Li, Solutions Architect 创建安全&可扩展的无服务化API 使用Amazon API Gateway and AWS Lambda

Upload: leon-li

Post on 22-Mar-2017

52 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Serverless api gateway + lambda

© 2016, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

李磊 Leon Li, Solutions Architect

创建安全&可扩展的无服务化API使用Amazon API Gateway and AWS Lambda

Page 2: Serverless api gateway + lambda

1. 一种全新的开发模式2. 利用Amazon API Gateway定义API3. 在AWS Lambda中处理应用程序逻辑4. 结合AWS IAM和API Gateway的自定义认证5. 结合SDK生成工具简化移动端开发6. Streeet示例程序7. 开源无服务框架和工具简介

议程

Page 3: Serverless api gateway + lambda

• 拥有一年以上开发经验,对编程语言和编程模型有一定了解和实践的用户

• 对微服务有一定了解,并且了解Restful API定义的开发人员

面向人员

Page 4: Serverless api gateway + lambda

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

Page 5: Serverless api gateway + lambda

要点

AWS Lambda + Amazon API Gateway代表没有基础架构需要管理 –我们将会自动伸缩

安全很重要,也很复杂 –利用AWS Identity and Access Management解决这些问题

Swagger 和client SDK生成 –我们已经解决了大部分的工作

Page 6: Serverless api gateway + lambda

我们将会用到的服务

Amazon API Gateway AWS Lambda AWS Lambda Amazon DynamoDB

定义REST API和API路由

执行应用程序逻辑 自定义Authorizer NoSql数据存储

Page 7: Serverless api gateway + lambda

Streeet App架构时尚达人街头分享应用

Page 8: Serverless api gateway + lambda

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

Page 9: Serverless api gateway + lambda

创新点?

应用程序将会自动扩张,在流量大的时候使用尽可

能多的服务器资源,但是我们却不需要管理其中的

任何一台

复杂的认证工作交付给AWS来完成, 我们只需要合理的定义和分派IAM的资源

部署工作可以利用Swagger自动完成

Page 10: Serverless api gateway + lambda

API 定义和Swagger

Page 11: Serverless api gateway + lambda

Amazon API Gateway简介

管理部署以及多版本和多环境

定义和托管API

利用Identity and Access Management控制访问云端

资源

利用AWS认证

DDoS 防御以及自动管控流量代理到应用后端

管控网络流量

Page 12: Serverless api gateway + lambda

Method and integration

Page 13: Serverless api gateway + lambda

控制资源和动作方法

• POST –在DynamoDB table中增加一条用户信息/register

• POST –接收用户名密码并认证用户/login

• POST –生成一条新的评论信息• GET –获取评论列表/comments

• GET –获取一条Post/post/{id}

Unauthenticated

Authenticated

Page 14: Serverless api gateway + lambda

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'

Page 15: Serverless api gateway + lambda

使用Swagger的好处

• API的定义将会透明保存在代码的Repository中• API的定义可以用于结合其它工具生成文档便于和其它团队协同工作

• API可以通过命令行工作导入并轻松部署到API Gateway中托管并开始提供服务

Page 16: Serverless api gateway + lambda

请求路由处理

Page 17: Serverless api gateway + lambda

高性能的扩展性; 收费灵活高效没有基础架构需要管理

即用即付: Lambda 自动计费您的计算资源. 以100ms为最低计费单元

Bring Your Own Code

Lambda 函数: 无状态,事件驱动的代码模型

支持预设的代码运行环境,Node.js, Python和Java

专注于您的业务逻辑,没有基础架构需要管理.只需要上传代码 AWS Lambda

将会处理剩下其它的事情

AWS Lambda简介

Page 18: Serverless api gateway + lambda

Lambda处理器

lambdaHandler

Register action

Login action

Create comments action

Get comments action

Credentials generation

Streeetdatabase

Amazon API Gateway

Page 19: Serverless api gateway + lambda

强大的Mapping templates

更多介绍

http://amzn.to/1L1hSF5

Page 20: Serverless api gateway + lambda

AWS credentials

Page 21: Serverless api gateway + lambda

JWT – Json Web Token

RFC 7519 / HMAC256 / HMAC512 etc…

Page 22: Serverless api gateway + lambda

The API definition

• POST• 接收用户的username, password• 加密密码并在DynamoDB中创建用户资料• 生成基于JWT的密匙• 返回用户和密匙

/register

• POST• 接收用户的username, password• 比对DynamoDB验证用户登录• 成功后利用JWT加密并生成Token• 返回登录成功后的JWT Token

/login

Page 23: Serverless api gateway + lambda

自定义认证 - 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

Page 24: Serverless api gateway + lambda

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

Page 25: Serverless api gateway + lambda
Page 26: Serverless api gateway + lambda
Page 27: Serverless api gateway + lambda
Page 28: Serverless api gateway + lambda

认证后的API调用

Page 29: Serverless api gateway + lambda

街拍和评论列表

•POST•在Dynamodb中插入一条新的评论

•GET•获取新的评论

/comments

• GET• 获取街拍的详细信息

/Post/{id}

Page 30: Serverless api gateway + lambda

利用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可以被访问的资源细腻度

Page 31: Serverless api gateway + lambda

使用IAM和AWS平台认证的益处

• 关注分离 –我们的认证策略代理给了AWS平台,使得可以更加专注于业务开发

• 利用IAM policies可以轻松的管理整个平台的权限策略• Roles或者可以轻松的利用一个API请求管理

Page 32: Serverless api gateway + lambda
Page 33: Serverless api gateway + lambda
Page 34: Serverless api gateway + lambda

客户端请求调用

Page 35: Serverless api gateway + lambda

一键SDK生成

Page 36: Serverless api gateway + lambda

客户端的sdk定义了骨架函数

Page 37: Serverless api gateway + lambda

集成认证调用

Page 38: Serverless api gateway + lambda

支持无服务架构的框架和开源工具

Page 39: Serverless api gateway + lambda

Apex by TJ

Page 40: Serverless api gateway + lambda

总结

AWS Lambda + Amazon API Gateway没有服务器需要被管理

Streeet示例程序后台https://github.com/legocode/Streeet

安全很总要,但也很复杂,利用IAM来完成大部分的工作

利用Swagger和SDK生成完成尽可能多的自动化工作

Page 41: Serverless api gateway + lambda

Q&A?

Page 42: Serverless api gateway + lambda

Thank You.