云服务器内容精选

  • 执行结果 执行结果由3部分组成:函数返回、执行摘要和日志。 表23 执行结果说明 参数项 执行成功 执行失败 函数返回 返回函数中定义的返回信息。 返回包含错误信息和堆栈异常报错信息的JSON文件。格式如下: { "errorMessage": "", "stackTrace": [] } errorMessage:Runtime返回的错误信息 stackTrace:Runtime返回的堆栈异常报错信息 执行摘要 显示请求ID、配置内存、执行时长、实际使用内存和收费时长。 显示请求ID、配置内存、执行时长、实际使用内存和收费时长。 日志 打印函数日志,最多显示4KB的日志。 打印报错信息,最多显示4KB的日志。
  • 函数定义 函数有明确的接口定义,如下: 作用域 返回参数 函数名(函数参数,Context参数) 作用域:提供给FunctionGraph调用的用户函数必须定义为public。 返回参数:用户定义,FunctionGraph负责转换为字符串,作为HTTP Response返回。对于返回参数对象类型,HTTP Response该类型的JSON字符串。 函数名:用户定义函数名称。 用户定义参数,当前函数只支持一个用户参数。对于复杂参数,建议定义为对象类型,以JSON字符串提供数据。FunctionGraph调用函数时,解析JSON为对象。 Context:runtime提供函数执行上下文,其接口定义在SDK接口说明。 创建Java函数时,函数入口参数需要提供函数完整的名字空间,参数格式为:包名.类名.函数名。
  • Java的initializer入口介绍 函数服务目前支持以下Java运行环境。 Java 8 (runtime = Java8) Java 11(runtime = Java11) Initializer格式为: [包名].[类名].[执行函数名] 示例:创建函数时指定的initializer为com.huawei.Demo.my_initializer,那么FunctionGraph会去加载com.huawei包,Demo类中定义的my_initializer函数。 在函数服务中使用Java实现initializer接口,需要定义一个java函数作为initializer入口,一个最简单的initializer示例如下。 public void my_initializer(Context context) { RuntimeLogger log = context.getLogger(); log.log(String.format("ak:%s", context.getAccessKey())); } 函数名 my_initializer需要与实现initializer接口时的initializer字段相对应。 示例:实现initializer接口时指定的Initializer入口为com.huawei.Demo.my_initializer,那么FunctionGraph会去加载com.huawei包,Demo类中定义的my_initializer函数。 context参数 context参数中包含一些函数的运行时信息,例如:request id、临时AccessKey、function meta等。
  • SDK接口 Context类中提供了许多上下文方法供用户使用,其声明和功能如表1所示。 表1 Context类上下文方法说明 方法名 方法说明 getRequestID() 获取请求ID。 getRemainingTimeInMilliSeconds () 获取函数剩余运行时间。 getAccessKey() 获取用户委托的AccessKey(有效期24小时),使用该方法需要给函数配置委托。 说明: 当前 函数工作流 已停止维护Runtime SDK 中getAccessKey接口,您将无法使用getAccessKey获取临时AK。 getSecretKey() 获取用户委托的SecretKey(有效期24小时),使用该方法需要给函数配置委托。 说明: 当前函数工作流已停止维护Runtime SDK 中getSecretKey接口,您将无法使用getSecretKey获取临时SK。 getSecurityAccessKey() 获取用户委托的SecurityAccessKey(有效期24小时),使用该方法需要给函数配置委托。 getSecuritySecretKey() 获取用户委托的SecuritySecretKey(有效期24小时),使用该方法需要给函数配置委托。 getSecurityToken() 获取用户委托的SecurityToken(有效期24小时),使用该方法需要给函数配置委托。 getUserData(string key) 通过key获取用户通过环境变量传入的值。 getFunctionName() 获取函数名称。 getRunningTimeInSeconds () 获取函数超时时间。 getVersion() 获取函数的版本。 getMemorySize() 分配的内存。 getCPUNumber() 获取函数占用的CPU资源。 getPackage() 获取函数组。 getToken() 获取用户委托的token(有效期24小时),使用该方法需要给函数配置委托。 getLogger() 获取context提供的logger方法,返回一个日志输出类,通过使用其info方法按“时间-请求ID-输出内容”的格式输出日志。 如调用info方法输出日志: logg = context.getLogger() logg.info("hello") getAlias 获取函数的别名 getToken()、getAccessKey()和getSecretKey()方法返回的内容包含敏感信息,请谨慎使用,避免造成用户敏感信息的泄露。
  • Node.js的initializer入口介绍 FunctionGraph目前支持以下Node.js运行环境: Node.js6.10 (runtime = Node.js6) Node.js8.10 (runtime = Node.js8) Nodejs10.16(runtime = Node.js10) Nodejs12.13(runtime = Node.js12) Node.js14.18(runtime = Node.js14) Node.js16.17(runtime = Node.js16) Node.js18.15(runtime = Node.js18)
  • 执行结果 执行结果由3部分组成:函数返回、执行摘要和日志。 表2 执行结果说明 参数项 执行成功 执行失败 函数返回 返回函数中定义的返回信息。 返回包含错误信息和错误类型的JSON文件。格式如下: { "errorMessage": "", "errorType":"", } errorMessage:Runtime返回的错误信息 errorType:错误类型 执行摘要 显示请求ID、配置内存、执行时长、实际使用内存和收费时长。 显示请求ID、配置内存、执行时长、实际使用内存和收费时长。 日志 打印函数日志,最多显示4KB的日志。 打印报错信息,最多显示4KB的日志。
  • Python Runtime集成的非标准库 表3 Python Runtime集成的非标准库 模块 功能 版本号 dateutil 日期/时间处理 2.6.0 requests http库 2.7.0 httplib2 httpclient 0.10.3 numpy 数学计算 1.13.1 redis redis客户端 2.10.5 obsclient OBS客户端 - smnsdk 访问 SMN 服务 1.0.1
  • 函数样例工程包下载 本手册使用样例工程包下载地址如表4所示,可以下载到本地,创建函数时上传使用。 表4 样例工程包下载 函数 工程包下载 软件包校验文件 Node.js函数 fss_examples_nodejs.zip fss_examples_nodejs.sha256 Python函数 fss_examples_python2.7.zip fss_examples_python2.7_sha256 Java函数 fss_example_java8.jar fss_example_java8_sha256 Go函数 fss_examples_go1.8.zip fss_examples_go1.8_sha256 C#函数 fss_example_csharp2.0、fss_example_csharp2.1 fss_example_csharp2.0_sha256 fss_example_csharp2.1_sha256 PHP函数 fss_examples_php7.3.zip fss_examples_php7.3_sha256
  • 函数支持的运行时语言 FunctionGraph函数Runtime支持多种运行时语言:Python 、Node.js、Java、Go、C#、PHP及自定义运行时,说明如表1所示。 建议使用相关语言的最新版本。 表1 运行时说明 运行时语言 支持版本 SDK下载 Node.js 6.10、8.10、10.16、12.13、14.18、16.17、18.15 - Python 2.7、3.6、3.9、3.10 - Java 8、11、17(当前仅支持华北-乌兰察布二零二) Java SDK下载(软件包检验文件:fss-java-sdk_sha256) 说明: Java SDK集成了云服务OBS SDK。 Go 1.x Go1.x SDK(软件包检验文件:Go SDK_sha256) C# .NET Core 2.1、.NET Core 3.1、.NET Core 6.0(当前仅支持华北-乌兰察布二零二) CsharpSDK(软件包检验文件:fssCsharp_sha256) PHP 7.3 - 定制运行时 - -
  • Node.js Runtime集成的三方件 表2 Node.js Runtime集成的三方件 名称 功能 版本号 q 异步方法封装 1.5.1 co 异步流程控制 4.6.0 lodash 常用工具方法库 4.17.10 esdk-obs-nodejs OBS SDK 2.1.5 express 极简web开发框架 4.16.4 fgs-express 在FunctionGraph和API Gateway之上使用现有的Node.js应用程序框架运行无服务器应用程序和REST API 。提供的示例允许您使用Express框架轻松构建无服务器Web应用程序/服务和RESTful API 。 1.0.1 request 简化http调用,支持HTTPS并默认遵循重定向 2.88.0
  • ZIP工程包示例 Nods.js工程ZIP包目录示例 Example.zip 示例工程包 |--- lib 业务文件目录 |--- node_modules npm三方件目录 |--- index.js 入口js文件(必选) |--- package.json npm项目管理文件 PHP工程ZIP包目录示例 Example.zip 示例工程包 |--- ext 扩展库目录 |--- pear PHP扩展与应用仓库 |--- index.php 入口PHP文件 Python工程ZIP包目录示例 Example.zip 示例工程包 |--- com 业务文件目录 |--- PLI 第三方依赖PLI目录 |--- index.py 入口py文件(必选) |--- watermark.py 实现打水印功能的py文件 |--- watermark.png 水印图片 Java工程ZIP包目录示例 Example.zip 示例工程包 |--- obstest.jar 业务功能JAR包 |--- esdk-obs-java-3.20.2.jar 第三方依赖JAR包 |--- jackson-core-2.10.0.jar 第三方依赖JAR包 |--- jackson-databind-2.10.0.jar 第三方依赖JAR包 |--- log4j-api-2.12.0.jar 第三方依赖JAR包 |--- log4j-core-2.12.0.jar 第三方依赖JAR包 |--- okhttp-3.14.2.jar 第三方依赖JAR包 |--- okio-1.17.2.jar 第三方依赖JAR包 Go工程ZIP包目录示例 Example.zip 示例工程包 |--- testplugin.so 业务功能包 C#工程ZIP包目录示例 Example.zip 示例工程包 |--- fssExampleCsharp2.0.deps.json 工程编译产生文件 |--- fssExampleCsharp2.0.dll 工程编译产生文件 |--- fssExampleCsharp2.0.pdb 工程编译产生文件 |--- fssExampleCsharp2.0.runtimeconfig.json 工程编译产生文件 |--- Handler 帮助文件,可直接使用 |--- HC.Serverless.Function.Common.dll 函数工作流提供的dll 定制运行时 Example.zip 示例工程包 |--- bootstrap 可执行引导文件
  • 打包规范说明 函数除了支持在线编辑代码,还支持上传ZIP、JAR、引入OBS文件等方式上传代码,函数工程的打包规范说明如表1所示。 表1 函数工程打包规范 编程语言 JAR包 ZIP包 OBS文件 Node.js 不支持该方式 假如函数工程文件保存在“~/Code/”文件夹下,在打包的时候务必进入Code文件夹下选中所有工程文件进行打包,这样做的目的是:入口函数是程序执行的入口,确保解压后,入口函数所在的文件位于根目录。 如果函数工程引入了第三方依赖,可以将第三方依赖打成ZIP包,在函数代码界面设置外部依赖包;也可以将第三方依赖和函数工程文件一起打包。 将工程打成ZIP包,上传到OBS存储桶。 PHP 不支持该方式 假如函数工程文件保存在“~/Code/”文件夹下,在打包的时候务必进入Code文件夹下选中所有工程文件进行打包,这样做的目的是:入口函数是程序执行的入口,确保解压后,入口函数所在的文件位于根目录。 如果函数工程引入了第三方依赖,可以将第三方依赖打成ZIP包,在函数代码界面设置外部依赖包;也可以将第三方依赖和函数工程文件一起打包。 将工程打成ZIP包,上传到OBS存储桶。 Python 2.7 不支持该方式 假如函数工程文件保存在“~/Code/”文件夹下,在打包的时候务必进入Code文件夹下选中所有工程文件进行打包,这样做的目的是:入口函数是程序执行的入口,确保解压后,入口函数所在的文件位于根目录。 如果函数工程引入了第三方依赖,可以将第三方依赖打成ZIP包,在函数代码界面设置外部依赖包;也可以将第三方依赖和函数工程文件一起打包。 将工程打成ZIP包,上传到OBS存储桶。 Python 3.6 不支持该方式 假如函数工程文件保存在“~/Code/”文件夹下,在打包的时候务必进入Code文件夹下选中所有工程文件进行打包,这样做的目的是:入口函数是程序执行的入口,确保解压后,入口函数所在的文件位于根目录。 如果函数工程引入了第三方依赖,可以将第三方依赖打成ZIP包,在函数代码界面设置外部依赖包;也可以将第三方依赖和函数工程文件一起打包。 将工程打成ZIP包,上传到OBS存储桶。 Java 8 如果函数没有引用第三方件,可以直接将函数工程编译成Jar包。 如果函数引用第三方件,将函数工程编译成Jar包后,将所有依赖三方件和函数jar包打成ZIP包。 将工程打成ZIP包,上传到OBS存储桶。 Go 1.x 不支持该方式 必须在编译之后打zip包,编译后的二进制文件必须与执行函数入口保持一致,例如二进制名称为Handler,则执行入口为Handler。 将工程打成ZIP包,上传到OBS存储桶。 C# 不支持该方式 必须在编译之后打zip包,必须包含“工程名.deps.json”,“工程名.dll”,“工程名.runtimeconfig.json”,“工程名.pdb”和“HC.Serverless.Function.Common.dll”文件。 将工程打成ZIP包,直接上传到OBS存储桶。 定制运行时 不支持该方式 打zip包,必须包含“bootstrap”可执行引导文件。 将工程打成ZIP包,直接上传到OBS存储桶。
  • 免费额度 每个月您都能免费使用一定额度的函数工作流服务,免费额度是子主账户共同使用。 请求次数:每月100万次的免费请求。 计量时间:每月400,000GB-秒的免费执行时间。如果函数内存规格为1GB时,免费额度为400,000秒,如果函数内存规格为512MB时,免费额度为800,000秒,其它内存规格以此类推。 免费额度不会按月累积,在每个自然月开始时,上月未使用的免费额度清零,重新计算。 当函数是预留实例模式且开启空闲模式时,在预留实例生命周期内中,空闲时间产生的计量时间不包含在每月400,000GB-秒的免费额度里。 表1显示了函数工作流配置不同内存规格时的免费执行秒数。 表1 免费执行秒数 内存(MB) 每个月的免费执行秒数 128 3,200,000 256 1,600,000 512 800,000 768 533,333 1024 400,000 1280 320,000 1536 266,667 其他内存规格X(MB) 1024*400,000/X(S) 节点执行次数(标准函数流):每月5000次的免费执行次数。
  • 函数监控指标 表1 FunctionGraph支持的监控指标 指标ID 指标名称 指标含义 取值范围 测量对象 监控周期(原始指标) count 调用次数 该指标用于统计函数调用次数。 单位:次 ≥ 0 counts 函数 5分钟 failcount 错误次数 该指标用于统计函数调用错误次数。 以下两种情况都会记入错误次数: 函数请求异常,导致无法执行完成且返回200。 函数自身语法错误或者自身执行错误。 单位:次 ≥ 0 counts 函数 5分钟 failRate 错误率 该指标用于统计函数调用错误次数在总调用次数中的占比率。 单位:% 0% ≤X≤ 100% 函数 5分钟 rejectcount 被拒绝次数 该指标用于统计函数调用被拒绝次数。 被拒绝次数是指并发请求太多,系统流控而被拒绝的请求次数。 单位:次 ≥ 0 counts 函数 5分钟 concurrency 并发数 该指标用于统计函数同时调用处理的最大并发请求个数。 单位:个 ≥ 0 counts 函数 5分钟 reservedinstancenum 预留实例个数 该指标用于统计函数配置的预留实例个数。 单位:个 ≥ 0 counts 函数 5分钟 duration 平均运行时间 该指标用于统计函数调用平均运行时间。 单位:毫秒 ≥ 0 ms 函数 5分钟 maxDuration 最大运行时间 该指标用于统计函数调用最大运行时间。 单位:毫秒 ≥ 0 ms 函数 5分钟 minDuration 最小运行时间 该指标用于统计函数最小运行时间。 单位:毫秒 ≥ 0 ms 函数 5分钟 systemErrorCount 系统错误次数 该指标用于统计函数请求异常,导致无法执行完成的错误次数。单位:次 ≥ 0counts 函数 5分钟 functionErrorCount 函数错误次数 该指标用于统计函数自身语法错误或者自身执行错误次数。单位:次 ≥ 0counts 函数 5分钟 payPerUseInstance 弹性实例个数 该指标用于统计函数使用的弹性实例个数。单位:个 ≥ 0 counts 函数 5分钟 表2 函数流支持的监控指标 指标ID 指标名称 指标含义 取值范围 测量对象 监控周期(原始指标) toalCount 调用次数 用于统计函数流调用次数。 单位:次 ≥ 0 counts 函数流 1分钟 errorCount 错误次数 该指标用于统计函数调用错误次数。 单位:次 ≥ 0 counts 函数流 1分钟 running 正在运行数量 该指标用于统计正在运行状态的函数流。 单位:个 ≥ 0 counts 函数流 1分钟 rejectCount 被拒绝次数 该指标用于统计函数流调用被拒绝次数。 单位:个 ≥ 0 counts 函数流 1分钟 averageDuration 平均运行时间 该指标用于统计函数流调用平均耗时。 单位:毫秒 ≥ 0 ms 函数流 1分钟
  • 函数运行资源限制 表3 函数运行资源限制说明 资源 默认值 是否可通过用户自己调整配额 临时磁盘空间(“/tmp”空间) 512MB 否,如需调整请咨询函数工作流服务客服。 文件描述符 1024 否,如需调整请咨询函数工作流服务客服。 进程和线程数(总和) 1024 否,如需调整请咨询函数工作流服务客服。 单个请求最大执行时长 259200秒 是 函数同步调用请求正文有效负载大小 6MB 否,如需调整请咨询函数工作流服务客服。 函数同步调用响应正文有效负载大小 6MB 否,如需调整请咨询函数工作流服务客服。 函数异步调用请求正文有效负载大小 256KB 否,如需调整请咨询函数工作流服务客服。 函数导入的资源大小 zip格式压缩文件,大小50MB以内 否,如需调整请咨询函数工作流服务客服。 单个 自定义镜像 函数最大允许镜像大小 10GB 否,如需调整请咨询函数工作流服务客服。 函数导出资源包大小 50MB以内 否,如需调整请咨询函数工作流服务客服。 租户级别实例数限制 1000 是 函数最大申请内存 10G 否,如需调整请咨询函数工作流服务客服。 带宽 无限制 - 单条日志大小 无限制 - Initializer最大运行时间 259200秒 是 函数同步调用响应正文有效负载大小:返回的字符串或返回体序列化后的json字符串默认不大于6MB。具体数据大小会随FunctionGraph系统后台设置产生变化,因为系统后台判断的是序列化之后的数据大小,所以会存在字节级别的误差,误差范围为6MB±100bytes。 FunctionGraph控制台不建议调用执行时间超过90秒的函数;若需要调用执行时间超过90秒的函数,请使用异步调用的方式。 Kafka/DDS/GeminiDB Mongo/DIS触发器调用的请求正文有效负载大小为6M,APIG触发器调用的请求正文有效负载大小为4M。