亚马逊AWS官方博客
利用Kong及AWS Lambda构建无服务器的后端逻辑
Kong是一个开源的API GW及微服务管理层,基于Nginx, Cassandra或者PostgreSQL构建,最初由Mashape开发,用于为其API Marketplace管理超过15,000个API和微服务,并于2015年开源。Kong具有如下优点:
- 可扩展性:通过简单地添加更多的机器,Kong可以轻松地水平缩放,这意味着您的平台可以处理几乎任何负载,同时保持低延迟。
- 模块化:可以通过添加新的插件来扩展,并通过RESTful Admin API轻松配置所有插件。
- 平台无关性:Kong可以运行在任何地方,包括本地数据中心及公有云,支持物理机,虚机及容器部署。
目前Kong的最新版本为0.10.2,支持的插件如下:
- 认证:Basic Authentication, Key Authentication, OAuth2.0 Authentication, OAuth 2.0 Introspection, HMAC Authentication, JWT, LDAP Authentication
- 安全:ACL, CORS, Dynamic SSL, IP Restriction, Bot Detection
- 流控:Rate Limiting, Response Rate Limiting, Request Size Limiting
- 无服务器架构:AWS Lambda, OpenWhisk
- 分析监控:Galileo, Datadog, Runscope
- 内容转换:Request Transformer, Response Transformer, Correlation ID
- 日志:TCP/UDP/HTTP Logging, File Logging, Syslog, StatsD, Loggly
通过AWS Lambda插件,Kong可以作为一个统一的API前端,接收用户的请求,并调用不同的lambda函数做相关的处理,最后将结果返回给客户端,目前Lambda插件支持如下region:
us-east-1, us-east-2, ap-northeast-1, ap-northeast-2, ap-southeast-1, ap-southeast-2, eu-central-1, eu-west-1
Kong的安装
Kong支持多种安装方式,对于在AWS上运行Kong的情况,主要有三种:
- 通过marketplace安装,此安装方式会在一台EC2上同时安装Kong及其存储数据库Cassandra,适合单机部署或者测试环境
- 通过CloudFormation安装,CloudFormation安装方式目前支持如下region,可以通过配置选择存储数据库的类型Cassandra还是PostgreSQL,或者不由CloudFormation创建存储数据库
- 通过yum在EC2上安装
本文主要讲解第三种方式的安装过程,安装Kong 0.10.1版本
第一步 配置Kong的数据存储
Kong支持两种datastore:Cassandra和PgSQL,方便起见,这里利用AWS RDS创建PgSQL作为数据存储
注意事项:
- RDS的安全组需要放行5432端口
- 记录RDS创建过程中设置的用户名,密码及数据库名
比如:username/password:ivan/ivan
DB:kong
第二步 安装配置Kong (Amazon Linux)
yum update –y
wget https://github.com/Mashape/kong/releases/download/0.10.1/kong-0.10.1.aws.rpm
yum install kong-0.10.1.aws.rpm –nogpgcheck
cp /etc/kong/kong.conf.default /etc/kong/kong.conf
vim /etc/kong/kong.conf,
修改配置如下
database = postgres
pg_host = postgre-kong---XXXXXXXX---rds---cn-north-1.amazonaws.com.rproxy.goskope.com.cn
pg_port = 5432
pg_user = ivan
pg_password = ivan
pg_database = kong
简单测试
第三步 创建AMI,利用ELB,Autoscaling Group构建高可用架构
注意,如果EC2上已经启动过kong,那么会将生成的id也打包进入AMI,导致基于AMI生成的多台机器的id相同,从而无法建立集群,创建AMI前需要删除id
rm –f /usr/local/kong/serf/serf.id
参考:
https://github.com/Mashape/kong/issues/1751
检查集群状态
第四步 创建Lambda函数并且测试
第五步 配置Kong API GW并调用Lambda
5.1.配置API
测试
5.2.配置Lambda插件
第六步 配置启用额外的插件
6.1为API开启key认证
配置用户并绑定key
测试
6.2为API限速
6.3基于IP地址的过滤
作者介绍
余骏,AWS解决方案架构师,负责基于AWS的云计算方案架构的咨询和设计,同时致力于AWS云服务在国内的应用和推广。在加入AWS之前,他在思科中国担任系统工程师,负责方案咨询和架构设计,在企业私有云和基础网络方面有丰富经验。