背景介绍
因部分业务需要,服务器对外访问的IP地址需做限制,仅允许加入白名单的IP对外请求,这就需要我们对访问的域名对应的IP进行加白。但腾讯云API接口域名对应的IP基本都是高可用的,目前没有很好的方案获取到接口域名固定IP,因此我们只能考虑使用其他方案代替,本文为大家介绍两种可行方案,大家可以酌情选择。
方案简介
方案一:
通过代理服务器实现,新搭建一个代理服务器,通过代理服务器请求腾讯云接口,而我们需要添加IP白名单的服务器只需要对代理服务器的IP地址进行加白,然后将具体请求发送给代理服务器,通过代理服务器去完成接口请求,该方案的具体实现可以参考另一篇文章《内网环境请求腾讯云3.0 API详解》。
方案二:
通过API网关 云函数(SCF)实现,通过API网关请求可以拿到API网关请求地址的固定IP。用云函数实现具体的业务接口请求并返回结果,我们需为云函数配置API网关触发器,API网关会通过触发器向云函数传递参数,并触发云函数执行,云函数执行完成后的结果将通过API网关返回给我们。而我们业务端需要做的就是通过访问API网关下的请求地址去触发云函数执行,那么我们所关心的IP地址,就是API网关中这个访问地址对应的固定IP,本篇我们将详细介绍该方案。
API网关 云函数方案
方案分析
该方案需要我们从三个方面实现:API网关、云函数和业务侧,下面具体分析。
API网关:
需在API网关控制台创建专享实例,专享实例下的资源独享,IP是固定的,共享实例无法确保IP地址固定不变。在该实例下创建服务。
云函数:
第一、需在云函数控制台创建函数服务(即云函数),该云函数下需创建API网关触发器,API网关触发器的服务对应选择API网关控制台中创建的服务。API网关触发器创建成功后,将会生成一个该函数对应的请求地址。
第二、用自己的开发语言去完成我们需请求的接口功能,将完整的代码部署到云函数上。
第三、参数和结果,通过API网关触发器配置参数,业务侧将请求数据发送至API网关后,触发器触发云函数,云函数会通过入口函数中的两个默认参数"event"和"context"中获取业务侧传递的数据。入口函数中返回的结果即为本次请求返回的结果,该结果内容会返回给云API,云API返回给业务侧。
业务侧:
业务侧发起请求,并传递需要的参数到API网关,请求地址为API网关触发器中生成的地址。
请求时序图:
方案实现
1. API网关
控制台地址:https://console.cloud.tencent.com/apigateway/instance?rid=1
第一步:创建专项实例,专项实例可以独享底层资源,包括固定IP。
如下图,点击“新建”按钮,购买专项实例。
第二步:创建服务,服务地域需与后面创建云函数的服务地域保持一致,这里我们选择“广州”。
2. 云函数
控制台地址:https://console.cloud.tencent.com/scf/list
创建函数服务-1:新建函数服务,点击“新建”按钮,进入创建函数服务流程。
创建函数服务-2:选择从头开始创建,地域选择和API网关中第二步创建服务所选择的地域保持一致,我们这里也选择“广州”。运行环境选择自己熟悉的开发语言环境。
创建函数服务-3:函数代码为我们请求真正业务接口的代码,可以在线编辑也可以本地上传,建议本地运行成功后再上传。
创建函数服务-4:自定义函数触发器,触发方式选择“API网关触发”,API服务选择API网关中第二步所创建的服务名,点击完成。
创建成功后,在函数服务列表页变可以看到我们创建的函数。因为创建函数的同时也自定义创建了API网关触发器,所以在API网关中对应的服务名称下,也会创建一个对应的API。API网关触发器中的访问地址,即我们业务侧需要请求的地址。
3. 业务侧
直接向API网关触发器中的访问地址发起请求,传递需要的参数。业务侧请求中的header、body和参数等信息传递给API网关后,API网关会对请求的信息进行封装,然后再传递给云函数,云函数的入口函数中默认有两个参数“event”和“context”,云函数可以从这两个参数中获取到业务侧传递的数据,云函数入口函数返回的结果即为请求的结果。
请求示例:
https://service-xxxxx-xxxxxx.gz.apigw.tencentcs.com/release/funcation_name?param_url=https://xxx-xxx.cos.ap-nanjing.myzijiebao.com/xxxxxx.jpg
总结
无论是代理服务器方案,还是API网关 云函数的方案,实现起来比我们直接请求接口都要复杂很多,但是这两种方案都可以获取到固定的IP地址,以实现我们业务开白的需求。