AWS API Gateway与AWS Lambda的整合及开发/测试/生产环境的设置

本文不是介绍 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。
假设:

  • API endpoint是 /stageTest,方法是GET (成就GET√ =(:з」∠)_)
  • Lambda名为stageTest。 (endpoint的名字和lambda名字可以不同…原谅我是取名无能星人…)

DEV / QA / PROD 环境的设置

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

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

  • <aws-apiID>.execute-api.<aws-region>.amazonaws.com/dev
  • <aws-apiID>.execute-api.<aws-region>.amazonaws.com/qa
  • <aws-apiID>.execute-api.<aws-region>.amazonaws.com/prod
  1. 为每个的Stage设置stageVariables[2],假设为每个Stage都设置了一个名为env的变量
  • dev这个stage中env变量的值为DEV
  • qa这个stage中env变量的值为QA
  • prod这个stage中env变量的值为PROD
  1. Lambda stageTest()函数创建不同的alias[3][4],假设创建了3个分别是DEV,QA,PROD,分别指向不同的版本。
  • 在每次deploy后,都是$LATEST版本,点action>publish new version发布不同的版本
  • 建议DEV指向$LATEST版本,QA和PROD指向其他稳定的版本
  • 为Lambda创建了alias之后,其实这个lambda访问的名称就有了以下四种:stageTeststageTest:DEVstageTest:QAstageTest:PROD,其中stageTest永远指向$LATEST版本,其他指向之前设置的各个版本
  1. 整合API /stageTest 的GET方法与Lambda stageTest()[5]
  • 首先在API Gateway的界面中设置每个API方法的Integration Request:Integration Type选择Lambda Function;Lambda Function填stageTest:${stageVariables.env}${stageVariables.env}就是第2步中,设置的变量。
  • 设置Lambda Function名称的时候一定要记得点旁边的√保存,保存的时候,AWS会弹出一个对话框,需要给函数加上权限才能使用stageVariables变量。加的时候记得要执行三次命令,也就是在AWS给出的命令的对应的位置改成 stageTest:DEVstageTest:QAstageTest:PROD 每个执行一次。
  • 执行以上命令之前,你必须:
    • 安装AWS CLI
    • 执行命令aws configure,填写你的AWS ID和key,设施default region为你的lambda function所在的region

那么,问题又来了…

  • 如果你已经部署了很多lambda和api却没有使用stage的话…似乎是不太可能手动去AWS界面上一个一个设置的
  • 就算你已经在使用stage了,似乎也不太可能每次都手动去AWS界面上一个一个deploy最新的版本以及改变alias指向的版本的…

这个时候,你就必须研究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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,406评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,976评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,302评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,366评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,372评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,457评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,872评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,521评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,717评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,523评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,590评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,299评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,859评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,883评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,127评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,760评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,290评论 2 342

推荐阅读更多精彩内容

  • 本文是GitChat《Serverless 风格微服务的持续交付(上):架构案例》部分内容已做修改。文章聊天实录请...
    顾宇阅读 3,187评论 1 13
  • https://aws.amazon.com/cn/s3/faqs/#sia_anchor Amazon Simp...
    守望者_1065阅读 8,208评论 0 5
  • Lambda Function Questions: what type of code can I run as...
    abrocod阅读 1,185评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,577评论 18 139
  • 什么是Facade模式 随着系统越来越复杂,我们需要把细节隐藏起来,给客户端提供一个统一的接口。在这种需求下fac...
    shawnxjf阅读 2,479评论 0 0