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 架构及流程

AWS Lambda 集成服务

2 环境配置

2.1 创建Role角色

AWS Lambda 集成服务

 

2.2 创建VPC

VPC当前所有子网:

AWS Lambda 集成服务

私有子网配置(带有NAT网关):

AWS Lambda 集成服务

公有子网配置(带有IGW网关):

AWS Lambda 集成服务

 

2.3 创建Nginx

  1. 实例类型、根据请求流量来定
  2. 选择 dev VPC下的公有子网、分配固定 IP
  3. 安全组根据实际来开放入站端口

AWS Lambda 集成服务

Nginx 实例安全组:

AWS Lambda 集成服务

 

2.4 创建Redis实例

  1. 选择社区中带有 Nat 的AMI镜像(图二)
  2. 创建 Redis(Ec2) 安全组并根据实际情况开放入站端口

AWS Lambda 集成服务

 

AWS Lambda 集成服务

ICMP允许同个VPC下的子网可访问:

AWS Lambda 集成服务

 

2.5 创建 Elasticache redis 集群

  1. 端口、节点类型 根据实际要求进行更改
  2. 创建 Elasticache redis 安全组并根据实际情况开放入站端口

AWS Lambda 集成服务

 

AWS Lambda 集成服务

例如:允许 Redis 实例安全组入站进行端口转发

AWS Lambda 集成服务

 

2.6 创建 SQS 消息队列

  1. 根据情况配置 SQS 信息

AWS Lambda 集成服务

 

服务集成

3.1 创建 Lambda 函数

  1. 选择 2.1 中的角色、根据实际情况设置 lambda大小与超时时间(图二)
  2. 设置 VPC 服务、使其能够与 AWS 服务进行集成

AWS Lambda 集成服务

图二:

AWS Lambda 集成服务

编写主cc-Lambda代码函数、并将代码打包上传

AWS Lambda 集成服务

编写SQS处理消息函数、指向 SQS名称、一旦有消息自动触发(无需VPC)

AWS Lambda 集成服务

 

AWS Lambda 集成服务

共2 个Lambda:cc-lambda为处理逻辑、cc-sqs-process为处理消息队列

AWS Lambda 集成服务

 

3.2 创建 API-Gateway

  1. 创建资源、创建 GET 方法 模拟请求
  2. 创建 POST 方法指向步骤 3.1 中的 cc-lambda、并自定义请求参数
  3. 下方自定义请求参数(例:路径、查询字符串、请求头、接收参数)保存

AWS Lambda 集成服务

 

AWS Lambda 集成服务

部署 API-Gateway后得到 URL地址;v1为基本路径,test为资源路径

AWS Lambda 集成服务

 

测试GET方法接口:

https://72myoukhnj.execute-api.cn-north-1.amazonaws.com.cn/v1/test

AWS Lambda 集成服务

图上所示状态码为:200、能够成功访问

 

3.3 Nginx实例集成API-Gateway

  1. 连接 Nginx 实例、安装 Nginx 组件、配置 /etc/nginx/nginx.conf 文件
  2. 运行: sudo amazon-linux-extras install nginx1.12

AWS Lambda 集成服务

server_name 指向 Nginx 实例IP地址

AWS Lambda 集成服务

重启 Nginx配置:nginx -s reload  或  nginx -t -c /etc/nginx/nginx/conf  

根据反向代理配置进行 GET测试: http://52.80.200.168/v1/test   

AWS Lambda 集成服务

图上所示状态码为:200、能够成功访问

 

3.4 Nat实例集成 Elasticache redis

  1. 选择 拥有 NAT 的 AMI 并分配公有 IP 作为 NAT(EC2) 的地址
  2. 设置 NAT实例安全组、6405-6407(对外端口自定)
  3. 查看 Elasticache 集群、连接 NAT实例获取子节点IP(图三、四)

图 一:

AWS Lambda 集成服务

图 二:

AWS Lambda 集成服务

图 三:

AWS Lambda 集成服务

图 四:

AWS Lambda 集成服务

根据各节点 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

AWS Lambda 集成服务

 

4 测试结果

4.1 通过Postman 测试

AWS Lambda 集成服务

可见 redis 中已有数据

AWS Lambda 集成服务

可看见 cc-sqs-process 处理后的日志

AWS Lambda 集成服务

 

相关文章: