tencent cloud

云函数

动态与公告
产品动态
产品公告
新手指引
产品简介
产品概述
相关概念
工作原理
产品优势
应用场景
相关产品
购买指南
计费概述
计费方式
计费项与计费方式
函数算力支持
免费额度
产品定价
计费示例
欠费与停服说明
快速入门
使用控制台创建一个事件函数
操作指南
配额管理
函数管理
Web 函数管理
日志管理
并发管理
触发器管理
函数 URL
自定义域名
版本管理
别名管理
权限管理
运行实例管理
插件管理
监控与告警管理
网络配置
层管理
执行配置
扩展存储管理
DNS 缓存配置
资源托管模式管理
近离线资源托管模式
工作流
触发器
触发器概述
触发器事件消息结构汇总
API 网关触发器
COS 触发器
CLS 触发器
定时触发器
CKafka 触发器
Apache Kafka 触发器
MQTT 触发器
触发器配置描述
MPS 触发器
CLB 触发器说明
云 API 触发器
开发指南
基本概念
测试云函数
环境变量
依赖安装
使用容器镜像
使用 Docker 安装依赖
错误类型与重试策略
死信队列
云函数接入数据库
自动化部署
云函数状态码
常见错误码解决方法
开发者工具
Serverless Web IDE
函数间调用 SDK
第三方工具
代码开发
Python
Node.js
Golang
PHP
Java
Custom Runtime
使用镜像部署函数
Web 框架部署
通过命令行完成框架部署
快速部署 Egg 框架
快速部署 Express 框架
快速部署 Flask 框架
快速部署 Koa 框架
快速部署 Laravel 框架
快速部署 Nestjs 框架
快速部署 Nextjs 框架
快速部署 Nuxtjs 框架
快速部署 Django 框架
实践教程
最佳实践概述
云产品联合解决方案
业务开发相关实践
实时音视频 TRTC
对象存储 COS
消息队列 CKafka
日志服务CLS
负载均衡 CLB
视频处理 MPS
内容分发网络 CDN
云数据仓库 PostgreSQL
云点播 VOD
短信 SMS
Elasticsearch Service
定时任务
视频处理
客户案例
腾讯在线教育
在线教育行业案例
游戏聊天系统
腾讯互娱国际(IEGG)
API 文档
History
Introduction
API Category
Making API Requests
Other APIs
Namespace APIs
Layer Management APIs
Async Event Management APIs
Trigger APIs
Function APIs
函数和层的状态说明
Data Types
Error Codes
SDK文档
常见问题
通用问题
Web 函数相关问题
计费相关问题
网络相关问题
日志相关问题
SCF 工具相关问题
事件处理相关问题
API 网关触发器相关问题
相关协议
Service Level Agreement
联系我们
词汇表
文档云函数触发器CLB 触发器说明

CLB 触发器说明

PDF
聚焦模式
字号
最后更新时间: 2024-04-19 16:44:05
您可以通过编写云函数 SCF 来实现 Web 后端服务,并通过负载均衡 CLB 对外提供服务。负载均衡 CLB 触发器会将请求内容以参数形式传递给函数,并将函数返回作为响应返回给请求方。
CLB 触发器具有以下特点:
Push 模型 负载均衡 CLB 监听器在接受到 CLB 侧发出的请求后,如果 CLB 在后端配置了对接的云函数,该函数将会被触发运行。同时 CLB 会将请求的相关信息以 event 入参的形式发送给被触发的函数。相关信息包含了具体接受到请求的方法、请求的 path、header、query 等内容。
同步调用 CLB 触发器通过同步调用的方式来调用函数。有关调用类型的更多信息,请参阅 调用类型
说明:
CLB 账户分为标准账户类型和传统账户类型。传统账户类型不支持绑定 SCF,建议升级为标准账户类型。

CLB 触发器配置

CLB 触发器支持在 Serverless 控制台 或在 负载均衡控制台 中进行配置。
云函数控制台
负载均衡控制台
云函数控制台中,支持 在触发方式中添加 CLB 负载均衡触发器、支持选取已有 CLB 负载均衡或新建主机路由规则、支持配置 URL 请求路径。
负载均衡控制台中配置路由规则时,后端配置可选 Cloud Function,且在选择 Cloud Function 后,即可选择与 CLB 负载均衡相同地域的云函数。在负载均衡控制台上,可以配置及管理更高阶的 CLB 负载均衡服务,例如 WAF 防护、SNI 多域名证书,弹性网卡等能力。

CLB 触发器绑定限制

CLB 负载均衡中,一条 CLB 负载均衡路径规则仅能绑定一个云函数,但一个云函数可以被多个 CLB 负载均衡规则绑定为后端。相同路径、相同监听器及主机被视为同一个规则,无法重复绑定。
目前 CLB 负载均衡触发器仅支持同地域云函数绑定。例如,广州地区创建的云函数,仅支持被广州地区创建的 CLB 负载均衡中规则所绑定和触发。

请求与响应

CLB 负载均衡发送到云函数的请求处理方式,和云函数响应给 CLB 负载均衡的返回值处理方式,称为请求方法和响应方法。请求方法和响应方法都为 CLB 触发器自动处理。CLB 触发器触发云函数时,必须按照响应方法返回数据结构。
注意:
X-VipX-VportX-UriX-MethodX-Real-Port 字段必须先在 CLB 控制台进行自定义配置后才可以进行传递,自定义配置可参考 CLB 产品文档

CLB 触发器的集成请求事件消息结构

在 CLB 负载均衡触发器接收到请求时,会将类似以下 JSON 格式的事件数据发送给绑定的云函数。
注意:
在 CLB 触发场景下,所有的请求和响应由于需要以 JSON 方式传递,对于一些图片、文件等数据,直接放入 JSON 会导致不可见字符丢失,需要进行 Base64 编码,此处规定如下:
如果 Content-type 为 text/*、application/json、application/javascript、application/xml,CLB 不会对 body 内容进行转码。
其他类型一律进行 Base64 转码再转发。
{  
  "headers": { 
    "Content-type": "application/json",  
    "Host": "test.clb-scf.com",  
    "User-Agent": "Chrome",  

    "X-Stgw-Time": "1591692977.774",  
    "X-Client-Proto": "http",  
    "X-Forwarded-Proto": "http",  
    "X-Client-Proto-Ver": "HTTP/1.1",  
  "X-Real-IP": "9.43.175.219",
    "X-Forwarded-For": "9.43.175.xx"  

    "X-Vip": "121.23.21.xx",  
    "X-Vport": "xx",  
    "X-Uri": "/scf_location",  
    "X-Method": "POST"    
    "X-Real-Port": "44347",  
  },  
  "payload": {  
    "key1": "123",  
    "key2": "abc"  
  },
}  
数据结构内容详细说明如下:
结构名
内容
X-Stgw-Time
请求发起的时间戳
X-Forwarded-Proto
请求的 scheme 结构体
X-Client-Proto-Ver
协议类型
X-Real-IP
客户端 IP 地址
X-Forward-For
经过的代理 IP 地址
X-Real-Port
记录在 CLB 中配置过的 Path 参数以及实际取值。(可选,CLB 个性化配置)
X-Vip
CLB 负载均衡的 VIP 地址(可选,CLB 个性化配置)
X-Vport
CLB 负载均衡的 Vport(可选,CLB 个性化配置)
X-Url
请求 CLB 负载均衡的 PATH(可选,CLB 个性化配置)
X-Method
请求 CLB 负载均衡的 method(可选,CLB 个性化配置)
注意:
在 CLB 负载均衡迭代过程中,内容可能会增加更多。目前会保证数据结构内容仅增加,不删除,不对已有结构进行破坏。
实际请求时的参数数据可能会在多个位置出现,可根据业务需求选择使用。

集成响应

集成响应,是指 CLB 负载均衡会将云函数的返回内容进行解析,并根据解析内容构造 HTTP 响应。通过使用集成响应,可以通过代码自主控制响应的状态码、headers、body 内容,可以实现自定义格式的内容响应,例如响应 XML、HTML、JSON 甚至 JS 内容。在使用集成响应时,需要按照 CLB 负载均衡触发器的集成响应返回数据结构,才可以被成功解析,否则会出现 {"errno":403,"error":"Analyse scf response failed."} 错误信息。

CLB 触发器的集成响应返回数据结构

在 CLB 负载均衡设置为集成响应时,需要返回类似如下内容的数据结构。
{
"isBase64Encoded": false,
"statusCode": 200,
"headers": {"Content-Type":"text/html"},
"body": "<html><body><h1>Heading</h1><p>Paragraph.</p></body></html>"
}
数据结构内容详细说明如下:
结构名
内容
isBase64Encoded
指明 body 内的内容是否为 Base64 编码后的二进制内容,取值需要为 JSON 格式的 true 或 false。
statusCode
HTTP 返回的状态码,取值需要为 Integer 值。
headers
HTTP 返回的头部内容,取值需要为多个 key-value 对象,或 key:[value,value] 对象。其中 key、value 均为字符串。
body
HTTP 返回的 body 内容。
在需要返回 key 相同的多个 headers 时,可以使用字符串数组的方式描述不同 value,例如:
{
"isBase64Encoded": false,
"statusCode": 200,
"headers": {"Content-Type":"text/html","Key":["value1","value2","value3"]},
"body": "<html><body><h1>Heading</h1><p>Paragraph.</p></body></html>"
}


帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈