DevOpsawsaws

AWS API Gateway与AWS Lambda的整合及开发

2015-12-15  本文已影响1623人  下午荼

本文不是介绍 AWS API GatewayAWS Lambda的基本用法的…=(:з」∠)_

简单的来说,有了AWS的API Gateway和Lambda这两样东东,再加一个数据库(最好当然是用AWS DynamoDB啦,或者AWS EC2上装mysql,不用AWS也可以,但是访问速度可能会有一定影响,毕竟如果都用AWS的话算是走内网会快一些?!),不需要任何网络应用的框架你就能开发出非常RESTful的API了,简直是中小型公司提高开发效率的神器!

再简单的来说,API Gateway给你提供一个URL,当这个url被访问的时候,就会调用你设置的某个Lambda函数,这个函数执行完了之后就会返回你设定的数据。也就是说,以前你在服务器端收到一个请求,然后“做一堆事”完了之后发出响应Response的这个“做一堆事”和Response,写在一个Lambda函数里就可以了。

通常如果浏览器端使用ajax访问这个URL都会存在跨域的问题,API Gateway当然很贴心的提供了enable CROS选项!

AWS Lambda目前支持python,JAVA,NodeJS。这个Lambda函数呢,只是叫Lambda而已,实际写起来跟函数式编程也没有太大的关系,以前怎么写现在也还是一样的写…神奇的是,Lambda之间可以相互调用,另外除了API Gateway之外,很多别的跟API Gateway无关的事件event也可以作为trigger(比如当DynamoDB的某个Table新增一条用户记录的时候,调用一个名称为sendWelcomeEmailToUser()的Lambda函数,给用户发欢迎邮件

那么,问题来了…挖掘机技术哪家强
如何设置AWS API Gateway和AWS Lambda来实现开发/测试/生产环境的需求呢?难道要同一个功能的API建3个、同一个功能的lambda建3个?!


以下所有内容都是在AWS的WEB UI中进行设置的。(除了在UI中设置,还可以写Shell脚本去批量执行这些设置,当然啦,这个我还没学会…)

哦,忘了说…首先你要有个…API,然后你还要有个Lambda。
假设:

DEV / QA / PROD 环境的设置

  1. 为API Gateway创建不同的stage[1],假设创建了3个分别是dev,qa,prod。 (教程是官方英文的,点引用的链接就可以看到,憋让我翻译,我懒…我知道还有pre-prod,多加一个下面的解释就得多写好多字(ಥ_ಥ))

设置了stage之后你的api endpoin看起来大概长这样:

  1. 为每个的Stage设置stageVariables[2],假设为每个Stage都设置了一个名为env的变量
  1. Lambda stageTest()函数创建不同的alias[3][4],假设创建了3个分别是DEV,QA,PROD,分别指向不同的版本。
  • 在每次deploy后,都是$LATEST版本,点action>publish new version发布不同的版本
  1. 整合API /stageTest 的GET方法与Lambda stageTest()[5]

那么,问题又来了…

这个时候,你就必须研究AWS CLI,然后写shell以及借助其他工具来进行自动化部署了…

其他参考:


  1. http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-set-stage-variables-aws-console.html

  2. http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-set-stage-variables-aws-console.html

  3. http://docs.aws.amazon.com/lambda/latest/dg/versioning-aliases.html

  4. http://docs.aws.amazon.com/lambda/latest/dg/aliases-intro.html

  5. http://docs.aws.amazon.com/apigateway/latest/developerguide/getting-started.html

上一篇 下一篇

猜你喜欢

热点阅读