serverless api gateway + lambda

Post on 22-Mar-2017

52 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

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.

top related