更新时间:2024-11-11 GMT+08:00

创建HTTP函数

概述

HTTP函数专注于优化 Web 服务场景,用户可以直接发送 HTTP 请求到 URL 触发函数执行,从而使用自己的Web服务。HTTP函数只允许创建APIG/APIC的触发器类型,其他触发器不支持。

  • HTTP函数当前不区分编程语言,函数执行入口必须在bootstrap文件中设置,用户直接写启动命令,端口统一开放成8000,绑定IP为127.0.0.1。
  • bootstrap文件是HTTP函数的启动文件,HTTP函数仅支持读取bootstrap 作为启动文件名称,其它名称将无法正常启动服务,bootstrap启动文件请参见bootstrap文件示例
  • HTTP函数支持多种开发语言。
  • 用户函数需要返回一个合法的http响应报文。
  • 该章节均以Nodejs为样例,若需要使用其他语言,则更换语言路径即可,代码包路径无需更换。其他各语言路径请参见表1
  • 关于Go语言构建FunctionGraph HTTP函数,请参考使用Go构建FunctionGraph HTTP函数
  • 函数发起HTTP请求时,如果是内网访问,则请求IP地址是动态;如果是公网访问,则请求IP地址是固定。如需了解更多详情请咨询技术支持工程师。

前提条件

在调用API前,确保您的业务系统所在网络与API的访问域名或地址互通。

  • 若业务系统与HTTP函数在相同VPC内时,可直接访问API。
  • 若业务系统与HTTP函数在同一区域的不同VPC内时,可通过创建VPC对等连接,将两个VPC的网络打通,实现同一区域跨VPC访问API。具体步骤请参考VPC对等连接说明
  • 若业务系统与HTTP函数在不同区域的不同VPC内时,可通过创建云连接实例并加载需要互通的VPC,将两个VPC的网络打通,实现跨区域跨VPC访问API。具体步骤请参考跨区域VPC互通
  • 若业务系统与HTTP函数通过公网互通,请确保HTTP函数已绑定弹性IP。
  1. 准备一个node脚本,代码示例如下:
    const http = require('http'); // Import Node.js core module
     
    var server = http.createServer(function (req, res) {   //create web server
        res.writeHead(200, { 'Content-Type': 'text/html' });
        res.write('<html><body><h2>This is http function.</h2></body></html>');
        res.end();
    });
     
    server.listen(8000, '127.0.0.1'); //6 - listen for any incoming requests
     
    console.log('Node.js web server at port 8000 is running..')
  2. 准备一个bootstrap启动文件,作为HTTP函数的启动文件。

    示例:

    bootstrap文件内容如下

    /opt/function/runtime/nodejs12.13/rtsp/nodejs/bin/node $RUNTIME_CODE_ROOT/index.js
  3. 将上述两个文件打成zip包。
    图1 文件打成zip包

    如果执行HTTP类型是Python函数,则bootstrap文件中执行函数时,建议增加“-u”参数确保日志落盘。例如:

    /opt/function/runtime/python3.6/rtsp/python/bin/python3 -u $RUNTIME_CODE_ROOT/index.py

    若需要使用其他语言,则参见表1更换语言路径,代码包路径无需更换。

    表1 多语言路径说明

    语言

    路径

    Java8

    /opt/function/runtime/java8/rtsp/jre/bin/java

    Java11

    /opt/function/runtime/java11/rtsp/jre/bin/java

    Node.js6

    /opt/function/runtime/nodejs6.10/rtsp/nodejs/bin/node

    Node.js8

    /opt/function/runtime/nodejs8.10/rtsp/nodejs/bin/node

    Node.js10

    /opt/function/runtime/nodejs10.16/rtsp/nodejs/bin/node

    Node.js12

    /opt/function/runtime/nodejs12.13/rtsp/nodejs/bin/node

    Node.js14

    /opt/function/runtime/nodejs14.18/rtsp/nodejs/bin/node

    Node.js16

    /opt/function/runtime/nodejs16.17/rtsp/nodejs/bin/node

    Node.js18

    /opt/function/runtime/nodejs18.15/rtsp/nodejs/bin/node

    Python2.7

    /opt/function/runtime/python2.7/rtsp/python/bin/python

    Python3.6

    /opt/function/runtime/python3.6/rtsp/python/bin/python3

    Python3.9

    /opt/function/runtime/python3.9/rtsp/python/bin/python3

    PHP7.3

    /opt/function/runtime/php7.3/rtsp/php/bin/php

操作步骤

  1. 创建函数
    1. 创建HTTP函数,详细配置信息请参见创建函数,如下参数需注意。
      • 函数类型:HTTP函数
      • 区域:选择要部署代码的区域
    2. 上传代码,此处以“从Zip文件”上传为例,上传准备好的zip包,完成后单击“部署”。
      图2 上传自Zip文件

      当如果使用“OBS地址”方式进行代码源部署时,请确保创建函数选择的“区域”与创建OBS桶选择的“区域”一致。

  2. 创建触发器

    HTTP函数只允许创建APIG/APIC的触发器类型,其他触发器不支持。

    1. 进入函数详情页面,选择“设置 > 触发器”页签,单击“创建触发器”。
    2. 配置触发器信息,此处以创建“API网关服务(APIG)”触发器为例,其他配置信息请参见使用APIG触发器

      图3 创建触发器

      示例中“安全认证”暂时选择“None”,用户在配置时应根据实际情况选择。

      • App:采用 Appkey&Appsecret 认证,安全级别高,推荐使用。
      • IAM:IAM 认证,只允许IAM用户能访问,安全级别中等。
      • None:无认证模式,所有用户均可访问。
    3. 配置完成后,单击“确定”。API触发器创建完成后,会在API网关生成API“API_test_http”。
  3. 发布API
    1. 单击“触发器”页签下的API名称,跳转至API的总览页面。
      图4 API触发器
    2. 单击右上方的“编辑”,进入“基本信息”页面。
      图5 编辑API
    3. 单击“下一步”,进入“定义api请求”页面,修改“请求Path”为“/user/get”并单击“立即完成”。
      图6 定义API请求
    4. 单击“发布API”,在发布页面继续单击“发布”。
  4. 触发函数
    1. 返回函数工作流控制台,在左侧导航栏选择“函数 > 函数列表”,单击创建的HTTP函数进入函数详情页。
    2. 选择“设置 > 触发器”,复制“调用URL”,在浏览器访问。
      图7 复制URL
    3. 查看请求结果。
      图8 查看请求结果

函数公共请求头

HTTP函数请求头默认携带如下字段。

表2 默认请求头

字段

描述

X-CFF-Request-Id

当前请求ID

X-CFF-Memory

分配的内存

X-CFF-Timeout

函数超时时间

X-CFF-Func-Version

函数版本

X-CFF-Func-Name

函数名称

X-CFF-Project-Id

ProjectID

X-CFF-Package

函数组

X-CFF-Region

当前region