更新时间:2025-09-08 GMT+08:00
分享

使用容器镜像创建函数

FunctionGraph支持加载并运行容器镜像中的函数,相较于直接上传代码的方式,用户能够使用自定义代码包,灵活且减少了迁移成本。

支持使用公开和私有的镜像类型,具体详情请参考编辑镜像属性

约束与限制

表1 约束与限制

限制类别

具体限制

自定义容器镜像端口约束限制

  • 自定义容器镜像需包含HTTP Server,监听端口为8000。
  • 自定义容器镜像开放端口限定为8000。

容器镜像函数约束限制

  • 事件函数需创建一个HTTP Server并实现Method为POST和Path为/invoke的函数执行入口,可实现Method为POST和Path为/init的函数初始化入口。
  • 函数返回要求:函数必须返回一个符合以下结构的合法HTTP响应。
    {
        "isBase64Encoded": true|false,
        "statusCode": httpStatusCode,
        "headers": {"headerName":"headerValue",...},
        "body": "..."
    }
  • Command、Args、Working dir三个参数之和不能超过5120。
  • 初次执行时需要从SWR中拉取镜像,且冷启动时需要启动容器,所以自定义镜像冷启动比较慢。后续每次冷启动,如果节点上没有镜像,都需要从SWR中拉取。
  • 可支持的镜像包最大为10G,当镜像包过大时可以采取一些方式缩容,比如在线题库场景中,可以把原来加载在容器中的题库数据通过外部文件系统挂载盘方式挂载到容器中。
  • oom错误时,内存占用大小可以在函数执行结果中查看。

前提条件

  • 使用函数工作流控制台的所有操作均默认具有操作权限,请确保您登录的用户已有“FunctionGraph Administrator”权限,即FunctionGraph服务所有权限,更多权限的说明请参考权限管理
  • 请参见配置函数的委托权限,创建一个包含“SWR Admin容器镜像服务(SWR)管理员”权限的委托。用户镜像储存在容器镜像服务SWR中,函数需拥有“SWR Admin”权限才能调用与获取镜像。

创建函数

  1. 登录函数工作流控制台,在左侧的导航栏选择“函数 > 函数列表”。
  2. 单击右上方的“创建函数”,进入“创建函数”页面。
  3. 创建方式选择“容器镜像”,配置信息参见表2
    表2 容器镜像配置信息

    参数

    说明

    取值样例

    函数类型

    支持以下两种类型:

    • 事件函数:通常为JSON格式的请求,事件函数不受触发器类型的限制,当前FunctionGraph支持的所有类型触发器均可用于触发事件函数。
    • HTTP函数:用户可以直接发送HTTP请求到URL触发函数执行。

    事件函数

    区域

    选择要部署代码的区域。

    不同区域的资源之间内网不互通,请就近选择靠近您业务的区域,可以降低网络时延、提高访问速度。

    华东-上海一

    函数名称

    函数名称,命名规则如下:

    • 可包含字母、数字、下划线和中划线,长度不超过60个字符。
    • 以大/小写字母开头,以字母或数字结尾。

    SWR-demo

    企业项目

    选择函数所属的企业项目。企业项目是一种云资源管理方式,由企业项目管理服务提供统一的云资源按项目管理功能,支持对项目内的资源和成员进行管理。

    默认为“default”,支持用户选择已创建的企业项目。

    如果您没有开通企业管理服务,将无法看到企业项目选项。开通方法请参见如何开通企业项目

    default

    委托

    选择函数的委托。通过委托函数工作流来访问其他云服务,需选择包含SWR Admin权限的委托,如需创建委托,请参见创建委托

    当华为云账号下无函数默认委托时,FunctionGraph提供快速创建默认委托“fgs_default_agency”的功能,详情请参见默认委托

    fgs_default_agency

    容器镜像

    输入镜像URL,即用于函数的容器镜像的位置。您可以单击“查看镜像”,查看自有镜像及共享镜像。同时,也支持单击“选择镜像”功能,用户可在镜像列表中选择公开或私有镜像,选择成功后会自动填充镜像URL。如何制作镜像,请参见制作镜像

    SWR中的镜像名,例如swr.region_id.myhuaweicloud.com/my_group/my_image:latest。

    swr.region_id.myhuaweicloud.com/my_group/my_image:latest

    监听端口

    当前仅支持“中东-利雅得”区域支持配置该参数。

    配置代码中的HTTP Server所监听的端口,需要与镜像中配置的“EXPOSE”端口保持一致,端口取值范围是1025~65535,默认值为8000。

    8000

    容器镜像覆盖

    可选参数。

    此处如果配置,则会覆盖dockerfile文件中的镜像配置,如果不配置则使用镜像默认配置。

    • CMD:容器的启动命令,例如"/bin/sh"。该参数为可选参数,不填写,则默认使用镜像中的Entrypoint/CMD。字符串数组,以逗号分开。
    • Args:容器的启动参数,例如"-args,value1"。该参数为可选参数,不填写,则默认使用镜像中的CMD。字符串数组,以逗号分开。
    • Working Dir:容器的工作目录。该参数为可选参数,不填写,则默认使用镜像中的配置。文件夹路径,以/开头。
    • 用户ID:镜像运行时的用户ID,若不填写,默认为1003。
    • 用户组ID:镜像运行时的用户组ID,若不填写,默认为1003。

    -

    参考表3配置函数高级设置参数。

    图1 创建函数高级设置参数说明

    表3 创建函数高级设置参数说明

    参数

    说明

    取值样例

    函数访问公网

    开启时,函数可以通过默认网卡访问公网上的服务,其公网访问带宽为用户间共享,仅适用于测试场景。

    开启

    函数访问VPC内资源

    开启此参数需要函数配置包含VPC管理权限的委托,若基本信息的委托中选择“未使用任何委托”则无法开启。

    开启时,函数将使用配置的VPC所绑定的网卡进行网络访问,同时禁用函数工作流的默认网卡,即开关“函数访问公网”参数将不生效。

    开启后可选择函数需访问的VPC及其子网。

    未开启

    日志记录

    启用日志功能后,函数运行过程中产生的日志会上报到云日志服务(LTS)。

    注意:

    LTS将按需收取日志管理费用,详情请参见云日志服务价格详情

    开启后可配置以下参数:

    • 日志配置方式
      • 自动配置:使用默认日志组和日志流。
      • 自定义配置:选择自定义创建的日志组和日志流。
    • 日志标签

      函数执行时,会将日志标签配置上报到LTS,可通过标签在LTS控制台对函数日志进行过滤筛选,日志标签详情请参见日志管理

      标签键/标签值只能包含数字、字母、下划线和中划线,标签最大长度为64。最多支持添加10个标签。

    未开启

    KMS静态加密代码

    当前仅“拉美-圣保罗一”区域支持配置该参数。

    选择是否使用KMS静态加密函数代码。

    注意:

    数据加密服务DEW将按需收取费用,详情请参见数据加密服务计费说明

    支持选择以下加密类型:

    • (默认)functiongraph/default:函数会在您账号下的DEW服务中自动创建默认密钥,您无需手动创建。

      首次使用该默认密钥进行加解密,需确保函数委托中拥有以下权限:kms:dek:decrypt、 kms:dek:create、 kms:cmk:create、kms:cmk:get、 kms:cmk:list。

    • 使用用户主密钥:支持选择已创建的密钥加密函数代码,创建用户主密钥可参考创建自定义密钥。使用用户主密钥,需确保函数委托中拥有以下权限:kms:dek:decrypt、 kms:dek:create、 kms:cmk:get、 kms:cmk:list。
      注意:

      若选择“使用用户主密钥”,在后续使用中请勿在DEW服务中删除用于函数加密的主密钥,否则将因加密数据无法解密而导致函数执行失败。

    请参考JSON视图配置自定义策略前往IAM控制台配置函数的委托权限策略。

    (默认)functiongraph/default

  4. 配置完成后单击“创建函数”,页面跳转至函数详情配置页面,各配置项操作请参见配置函数

更新函数镜像

在容器镜像函数的代码配置页面中,选择“代码”页签,右侧单击“部署新镜像”,在输入框中输入新镜像的URL,单击“确定”完成部署。镜像URL获取方式如下:
  1. 登录容器镜像服务控制台,左侧导航栏选择“我的镜像”。
  2. 选择“自有镜像”或“他人共享”页签,在镜像列表中单击镜像名称,进入详情页面。
  3. 选择“镜像版本”页签,在镜像版本列表中复制下载指令,指令中去掉“docker pull”,即为镜像URL。

相关文档

相关文档