1 环境准备
1.1 目的
1、使用弹性 IP 访问 API-Gateway
2、API-Gateway 集成 自定义 Lambda
3、Lambda 集成 Elasticache redis 服务、SQS 消息队列
1.2 环境
1、创建并附加相关服务策略的Role 角色
2、所有服务都在同个VPC下
3、在公有子网下拥有公有IP的Nginx(EC2)实例
4、在公有子网下拥有弹性IP的Redis(EC2)实例
5、创建跟 Redis实例不同公有子网的 Elasticache 集群
6、SQS 消息队列
1.3 架构及流程
2 环境配置
2.1 创建Role角色
2.2 创建VPC
VPC当前所有子网:
私有子网配置(带有NAT网关):
公有子网配置(带有IGW网关):
2.3 创建Nginx
- 实例类型、根据请求流量来定
- 选择 dev VPC下的公有子网、分配固定 IP
- 安全组根据实际来开放入站端口
Nginx 实例安全组:
2.4 创建Redis实例
- 选择社区中带有 Nat 的AMI镜像(图二)
- 创建 Redis(Ec2) 安全组并根据实际情况开放入站端口
ICMP允许同个VPC下的子网可访问:
2.5 创建 Elasticache redis 集群
- 端口、节点类型 根据实际要求进行更改
- 创建 Elasticache redis 安全组并根据实际情况开放入站端口
例如:允许 Redis 实例安全组入站进行端口转发
2.6 创建 SQS 消息队列
- 根据情况配置 SQS 信息
3 服务集成
3.1 创建 Lambda 函数
- 选择 2.1 中的角色、根据实际情况设置 lambda大小与超时时间(图二)
- 设置 VPC 服务、使其能够与 AWS 服务进行集成
图二:
编写主cc-Lambda代码函数、并将代码打包上传
编写SQS处理消息函数、指向 SQS名称、一旦有消息自动触发(无需VPC)
共2 个Lambda:cc-lambda为处理逻辑、cc-sqs-process为处理消息队列
3.2 创建 API-Gateway
- 创建资源、创建 GET 方法 模拟请求
- 创建 POST 方法指向步骤 3.1 中的 cc-lambda、并自定义请求参数
- 下方自定义请求参数(例:路径、查询字符串、请求头、接收参数)保存
部署 API-Gateway后得到 URL地址;v1为基本路径,test为资源路径
测试GET方法接口:
https://72myoukhnj.execute-api.cn-north-1.amazonaws.com.cn/v1/test
图上所示状态码为:200、能够成功访问
3.3 Nginx实例集成API-Gateway
- 连接 Nginx 实例、安装 Nginx 组件、配置 /etc/nginx/nginx.conf 文件
- 运行: sudo amazon-linux-extras install nginx1.12
server_name 指向 Nginx 实例IP地址
重启 Nginx配置:nginx -s reload 或 nginx -t -c /etc/nginx/nginx/conf
根据反向代理配置进行 GET测试: http://52.80.200.168/v1/test
图上所示状态码为:200、能够成功访问
3.4 Nat实例集成 Elasticache redis
- 选择 拥有 NAT 的 AMI 并分配公有 IP 作为 NAT(EC2) 的地址
- 设置 NAT实例安全组、6405-6407(对外端口自定)
- 查看 Elasticache 集群、连接 NAT实例获取子节点IP(图三、四)
图 一:
图 二:
图 三:
图 四:
根据各节点 IP 进行映射、红色部分为将内部端口映射为 6405( 外部访问 )
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 6405 -j DNAT --to 172.16.8.138:6379
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 6406 -j DNAT --to 172.16.8.35:6379
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 6407 -j DNAT --to 172.16.8.90:6379
运行以上代码后进行保存: service iptables save
测试在任何 Redis 客户端下执行:redis-cli -h 52.80.101.16 -p 6405
4 测试结果
4.1 通过Postman 测试
可见 redis 中已有数据
可看见 cc-sqs-process 处理后的日志