云服务器内容精选

  • 引入依赖库示例 对于标准库和FunctionGraph内置的非标准库,可以在代码中直接引入使用。 Python引入依赖库示例如下: from com.obs.client.obs_client import ObsClient Node.js引入依赖库示例如下: const ObsClient = require('esdk-obs-nodejs'); 对于FunctionGraph暂没有内置的非标准三方库,请参见创建依赖包步骤先添加依赖包,再参见配置函数依赖引入使用。
  • 使用限制 单账号跟踪的事件可以通过 云审计 控制台查询。多账号的事件只能在账号自己的事件列表页面去查看,或者到组织追踪器配置的OBS桶中查看,也可以到组织追踪器配置的 CTS /system日志流下面去查看。 用户通过云审计控制台只能查询最近7天的操作记录。如果需要查询超过7天的操作记录,您必须配置转储到 对象存储服务 (OBS)或 云日志 服务(LTS),才可在OBS桶或LTS日志组里面查看历史事件信息。否则,您将无法追溯7天以前的操作记录。 云上操作后,1分钟内可以通过云审计控制台查询管理类事件操作记录,5分钟后才可通过云审计控制台查询数据类事件操作记录。 CTS新版事件列表不显示数据类审计事件,您需要在旧版事件列表查看数据类审计事件。
  • 操作步骤 登录 FunctionGraph 控制台,配置 Java 函数,并打开“快照式冷启动”开关。 图1 开启快照式冷启动 (可选)配置 Restore Hook,并在函数代码中实现对应的 Hook 逻辑。 图2 开启Restore Hook 函数代码中Restore Hook示例如下: 函数发布新版本后,触发快照的自动化制作。 图3 发布新版本 请耐心等待快照制作完成(5min 超时时间)。 图4 快照制作中 图5 快照制作成功 调用 Java 函数,体验快照优化后的性能提升。
  • 概述 华为云发布的基于进程级快照的冷启动加速方案,是一种性能优化服务,用户无需额外付费,只需进行简单的配置、少量的代码修改,即可享受到该创新方案带来的冷启动性能提升。 当用户 Java 函数打开冷启动加速的配置开关后,华为云 FunctionGraph 会预先执行函数对应的初始化代码,获取其初始化执行上下文环境的快照,并进行加密缓存。后续调用该函数并触发冷启动扩容时,会直接从提前初始化后的应用快照来恢复执行环境,而非重新走一遍初始化流程,以此达到极大提升启动性能的效果。
  • 概述 函数工作流 提供了按量和预留两种类型的实例。 按量实例是由函数工作流根据用户使用函数的实际情况来创建和释放,当函数工作流收到函数的调用请求时,自动为此请求分配执行环境。 预留实例是将函数实例的创建和释放交由用户管理,当您为某一函数创建了预留实例,函数工作流收到此函数的调用请求时,会优先将请求转发给您的预留实例,当请求的峰值超过预留实例处理能力时,剩余部分的请求将会转发给按量实例,由函数工作流自动为您分配执行环境。 预留实例在创建完成后,会自动加载该函数的代码、依赖包以及执行初始化入口函数,且预留实例会常驻环境,消除冷启动对业务的影响。(注意:不要依赖预留实例本身的初始化函数去执行一次性业务。) 预留实例当前支持配置固定数量的预留实例,也支持配置定时伸缩的预留实例、配置按指标弹性伸缩的预留实例和配置智能推荐的预留实例。 用户默认没有权限使用指标策略和智能推荐策略,如果需要使用该功能,请在工单系统提交工单添加白名单。
  • 概述 心跳函数用于检测用户函数运行时的异常,例如以下场景: 用户函数死锁,无法正常运行。 用户函数内存溢出,无法正常运行。 用户函数网络异常,无法正常运行。 在配置了自定义心跳函数后,当用户函数运行时,FunctionGraph每隔5s向函数实例发送一次心跳请求,触发心跳函数。如果心跳请求返回异常,FunctionGraph会认为函数实例异常,终止此函数实例。 FunctionGraph心跳请求的超时时间是3s,如果连续6次心跳请求未响应,函数实例将被终止。
  • FunctionGraph V1和V2版本支持管理函数日志的区别 FunctionGraph V1版本的函数支持 应用运维管理 服务( AOM )管理函数日志及云日志服务(LTS)管理函数日志。 图9 应用运维管理服务(AOM)管理函数日志页面 图10 云日志服务(LTS)管理函数日志页面 FunctionGraph V2版本的函数支持云日志服务(LTS)管理函数日志。 图11 云日志服务(LTS)管理函数日志页面
  • 云日志服务(LTS)管理函数日志 FunctionGraph支持开通云日志服务(LTS),使用更丰富的函数日志管理功能。开通云日志服务后,FunctionGraph会自动创建1个日志组(functiongraph开头),创建函数后,会默认生成一个日志流(函数名称开头)。 您也可以针对某个函数自行关联日志组和日志流,管理函数日志,即进行函数调用后,调用日志会保存到指定的日志组和日志流下。具体操作请参见配置日志组、日志流和查看函数日志。 约束与限制: 默认创建的20个日志流,您无法自定义。您可以在函数的“日志”页签下,按“F12”,找到query接口里的日志流ID,再到lts里找到对应的日志流ID。 若在LTS控制台误删函数日志组,之前的日志数据不可找回,FunctionGraph服务不感知该操作。此时您可以通过修改函数常规设置中的描述信息,保存后触发重建函数日志组。 FunctionGraph V1版本支持“切换旧版”,将会停用云日志服务(LTS) ,并切换为应用运维管理服务(AOM) 管理函数日志。 函数运行过程中产生的日志管理费用将按需收取。 FunctionGraph V2版本当前只支持使用LTS管理函数日志。 用户普通实例的初始化阶段的日志大小限制为(10MB),超过大小限制的日志进行滚动更新,为您保留最新的日志。 开通云日志服务(LTS)管理函数日志。 FunctionGraph V1版本开通:在“日志”页签,单击“使用 云日志服务(LTS) 管理函数日志”,页面直接切换至LTS管理函数日志的页面。 FunctionGraph V2版本开通:在“日志”页签,直接单击“点击开通”。继续单击“确认”,右上角弹出“开通成功”。 设置查询条件。 请求列表:支持设置请求ID、调用结果(执行成功、执行失败)、原因分析(初始化失败、加载失败、系统错误、调用超时、内存超限、磁盘超限、代码异常)。 请求日志:支持关键字、请求ID、实例ID。 表3 调用结果 调用结果 说明 执行成功 函数执行成功打印的日志。 执行失败 函数执行失败打印的日志,包含调用超时、内存超限、磁盘超限、代码异常四种情况。 若想查看调用超时的日志信息,请将“日志类型”切换为调用超时,另外3种执行失败下的日志类型查看方法相同。 表4 原因分析 原因分析 说明 初始化失败 函数初始化失败打印的日志。 加载失败 runtime加载用户函数文件失败打印的日志 系统错误 内部错误。 调用超时 函数调用时间超过配置的“执行超时时间”打印的日志。 内存超限 函数内存大小超过配置的“内存”大小打印的日志。 磁盘超限 磁盘超出限制大小打印的日志。 代码异常 代码出现异常情况打印的日志。 支持的时间条件:最近1小时、最近1天、最近3天及自定义。 您可以单击“到LTS进行 日志分析 等更多操作”,前往LTS控制台管理函数日志。
  • 约束与限制 HTTP函数当前不区分编程语言,函数执行入口必须在bootstrap文件中设置,用户直接写启动命令,端口统一开放成8000,绑定IP为127.0.0.1。 bootstrap文件是HTTP函数的启动文件,HTTP函数仅支持读取bootstrap 作为启动文件名称,其它名称将无法正常启动服务,bootstrap启动文件请参见bootstrap文件示例。 HTTP函数支持多种开发语言。 用户函数需要返回一个合法的http响应报文。 关于Go语言构建FunctionGraph HTTP函数,请参考使用Go构建FunctionGraph HTTP函数。 函数发起HTTP请求时,如果是内网访问,则请求IP地址是动态;如果是公网访问,则请求IP地址是固定。如需了解更多详情请咨询技术支持工程师。
  • 准备Terraform环境 安装Terraform执行环境 Terraform提供了多种环境的安装包,具体可以参考官网(https://developer.hashicorp.com/terraform/downloads)。 下面以Linux CentOS (系统需要有访问公网权限)为例指导安装Terraform。 使用root用户登录系统,新建目录/home/Terraform,cd到Terraform目录执行如下命令: sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo sudo yum -y install terraform 基本的Terraform命令 执行Terraform后会显示Terraform命令详情,查看更多命令详情请参考https://developer.hashicorp.com/terraform/cli。 基础Terraform语法 Terraform配置语言主要基于HCL语法,具有配置简单、可读性强等特点,并且兼容JSON语法。详情参见官网介绍https://developer.hashicorp.com/terraform/language,此文不做赘述。
  • 更新函数镜像 在容器镜像函数的代码配置页面中,选择“代码”页签,右侧单击“部署新镜像”,在输入框中输入新镜像的URL,单击“确定”完成部署。镜像URL获取方式如下: 登录 容器镜像服务 控制台,左侧导航栏选择“我的镜像”。 选择“自有镜像”或“他人共享”页签,在镜像列表中单击镜像名称,进入详情页面。 选择“镜像版本”页签,在镜像版本列表中复制下载指令,指令中去掉“docker pull”,即为镜像URL。
  • 约束与限制 请参见配置函数的委托权限,创建一个包含“SWR Admin容器 镜像服务 (SWR)管理员”权限的委托,因为用户镜像储存在SWR服务中,只有拥有“SWR Admin”权限,才能调用与获取,拉取镜像。 自定义容器镜像需包含HTTP Server,监听端口为8000。 HTTP函数只允许创建APIG/APIC的触发器类型,其他触发器不支持。 事件函数需创建一个HTTP Server并实现Method为POST和Path为/invoke的函数执行入口,可实现Method为POST和Path为/init的函数初始化入口。 通过APIG服务调用函数服务时,isBase64Encoded的值默认为true,表示APIG传递给FunctionGraph的请求体body已经进行Base64编码,需要先对body内容Base64解码后再处理。 函数必须按以下结构返回字符串。 { "isBase64Encoded": true|false, "statusCode": httpStatusCode, "headers": {"headerName":"headerValue",...}, "body": "..." } Command、Args、Working dir三个参数之和不能超过5120。 初次执行时需要从SWR中拉取镜像,且冷启动时需要启动容器,所以 自定义镜像 冷启动比较慢。后续每次冷启动,如果节点上没有镜像,都需要从SWR中拉取。 镜像类型支持公开和私有,具体详情请参考编辑镜像属性。 自定义容器镜像开放端口限定为8000。 可支持的镜像包最大为10G,当镜像包过大时可以采取一些方式缩容,比如在线题库场景中,可以把原来加载在容器中的题库数据通过外部文件系统挂载盘方式挂载到容器中。 FunctionGraph通过LTS日志采集容器输出到控制台的所有日志,可以通过标准输出或者开源日志框架重定向到控制台的方式打印业务信息。打印的内容建议包括系统时间、组件名称、代码行、关键数据等来方便定位。 oom错误时,内存占用大小可以在函数执行结果中查看。 用户函数需要返回一个合法的http响应报文。
  • 创建委托 创建委托的具体步骤请参见如何创建委托。此处以为FunctionGraph服务授予VPC访问权限为例,介绍如何为FunctionGraph服务创建委托。 登录 统一身份认证 服务( IAM )控制台。 在统一身份认证服务(IAM)的左侧导航窗格中,选择“委托”页签,单击右上方的“创建委托”。 图1 创建委托 如所示,配置委托参数。完成参数配置后单击“完成”,系统弹出“创建成功”提示,单击“立即授权”。 委托名称:serverless-trust。 委托类型:选择“云服务”。 云服务:选择“函数工作流 FunctionGraph”。 持续时间:选择“永久”。 描述(可选):填写描述信息。 图2 填写基本信息 进入“选择策略”页面,在右方搜索框中搜索需要添加的权限并勾选,此处以添加VPC Administrator权限为例。选择完成后单击“下一步”。 图3 选择策略 表2 委托权限示例 权限名称 使用描述/场景 VPC Administrator 虚拟私有云服务管理员。 进入“设置最小授权范围”页面,建议根据业务部署的区域选择“指定区域项目资源”,并勾选所需区域。选择完成后单击“确定”,进入“授权成功”界面。 图4 根据业务需要选择对应的权限
  • 应用场景授权项 若您在FunctionGraph服务中使用如表1的场景,请先创建委托。 创建委托时授予的权限类型请您根据实际业务需要进行调整,生产环境中建议您调整为细粒度最小使用权限,保证业务所需权限的同时,也降低权限过大的风险。具体对应授权项参见表1 常见授权项选择进行选择。 表1 常见授权项选择 场景 Admin权限 细粒度最小使用权限 说明 使用自定义镜像 SWR Administrator 暂不支持 SWR Admin:容器镜像服务(SWR)管理员,拥有该服务下的所有权限。 如何创建自定义镜像,请参见使用容器镜像创建函数。 挂载SFS文件系统 SFS Administrator 暂不支持 SFS Administrator:弹性文件服务(SFS)管理员,拥有该服务下的所有权限。 如何挂载SFS文件系统,请参见挂载SFS容量型文件系统。 挂载SFS Turbo文件系统 SFS Turbo ReadOnlyAccess sfsturbo:shares:getShare(查询单个文件系统详细信息) sfsturbo:shares:showFsDir(查询目录是否存在) SFS Turbo ReadOnlyAccess:弹性文件服务SFS Turbo的只读权限。 sfsturbo:shares:getShare:您拥有SFS服务下查询单个文件系统信息的权限。 sfsturbo:shares:showFsDir:您拥有SFS服务下查询目录是否存在的权限。 如何挂载挂载sfs turbo文件系统,请参见挂载SFS Turbo文件系统。 挂载E CS 共享目录 ECS ReadOnlyAccess ecs:cloudServers:get(查询云服务器详情) ECS ReadOnlyAccess:弹性云服务器的只读访问权限。 ecs:cloudServers:get:您拥有ECS服务下查询云服务器信息的权限。 如何挂载ECS共享目录,请参见挂载ECS共享目录。 配置预留实例策略 AOM ReadOnlyAccess aom:metric:get(查询指标) aom:metric:list(查询指标列表) AOM ReadOnlyAccess:应用运维管理服务只读权限。 aom:metric:get:您拥有AOM服务下查询某个指标信息的权限。 aom:metric:list:您拥有AOM服务下查询指标列表详情的权限。 使用DIS触发器 DIS Administrator 暂不支持 数据接入服务 (DIS)管理员,拥有该服务下的所有权限。 如何创建DIS触发器,请参见使用DIS触发器。 使用DMS触发器 DMS ReadOnlyAccess dms:instance:get(查看实例详情信息) DMS ReadOnlyAccess:分布式消息服务只读权限。 dms:instance:get:您拥有DMS服务下查看实例详情信息的权限。 配置跨域VPC访问 VPC Administrator vpc:ports:get(查询端口) vpc:ports:create(创建端口) vpc:vpcs:get(查询VPC) vpc:subnets:get(查询子网) vpc:vips:delete(虚IP解绑VM) vpc:securityGroups:get(查询安全组列表或详情) 拥有VPC Administrator权限的用户可以对VPC内所有资源执行任意操作。在函数配置跨VPC访问时,则函数必须配置具备VPC管理权限的委托。 VPC细粒度最小使用权限:您拥有VPC服务下虚IP解绑VM、查询端口、创建端口、查询VPC、查询子网、查询安全组列表或详情的权限。 如何配置跨域VPC访问,请参见配置网络。 DNS 域名 解析 DNS ReadOnlyAccess dns:recordset:get(查询租户Record Set资源) dns:zone:get(查询租户zone) dns:recordset:list(查询Record Set列表) dns:zone:list(查询zone列表) DNS ReadOnlyAccess:云解析服务只读权限,拥有该权限的用户仅能查看云解析服务资源。在函数配置调用DNS服务的接口解析内网域名时,则函数必须具备读取DNS资源权限的委托。 DNS细粒度最小使用权限:您拥有DNS服务下查询租户Record Set资源列表和查询租户zone列表的权限。 如何调用DNS服务的接口解析内网域名,请参见解析DNS内网域名。 开启异步通知 目标服务为OBS时: OBS Administrator obs:bucket:HeadBucket(获取桶元数据) obs:bucket:CreateBucket(创建桶) obs:object:PutObject(PUT上传、POST上传、复制对象、追加写对象、初始化上传段任务、上传段、合并段) OBS Administrator:对象存储服务管理员,拥有该服务下的所有权限。 OBS细粒度最小使用权限:您拥有OBS服务下获取桶元数据、创建桶、PUT上传、POST上传、复制对象、追加写对象、初始化上传段任务、上传段、合并段的权限。 如何配置异步通知请参见配置函数的异步调用策略。 目标服务为 SMN 时: SMN Administrator smn:topic:publish(发布消息) smn:topic:list(查询主题列表) SMN Administrator: 消息通知 服务管理员,拥有该服务下的所有权限。 SMN细粒度最小使用权限:您拥有SMN服务下发布消息、查询主题列表的权限。 如何配置异步通知请参见配置函数的异步调用策略。 目标服务为DIS时: DIS Administrator 暂不支持 DIS Administrator:数据接入服务管理员,拥有该服务下的所有权限。 如何配置异步通知请参见配置函数的异步调用策略。
  • 支持引入的依赖库说明 FunctionGraph支持引入标准库及第三方依赖库。 标准库 对于标准库,无论是在线编辑或是本地开发打包上传至FunctionGraph,均可以直接在代码中引入使用。 FunctionGraph内置的非标准库 FunctionGraph内置了部分非标准库,如表1、表2所示。使用方法如同标准库一样,在编写代码时直接引入即可。 表1 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 表2 Python Runtime支持的非标准库 模块 功能 版本号 dateutil 日期/时间处理 2.6.0 requests http库 2.7.0 httplib2 httpclient 0.10.3 numpy 数学计算 pip2.7,numpy==1.16.6 pip3.10,numpy==1.24.2 pip3.9,numpy==1.18.5 pip3.6,numpy==1.18.5 redis redis客户端 2.10.5 obsclient OBS客户端 3.0.3 smnsdk 访问公有云smn服务 1.0.1 其他第三方库 建议在本地将依赖的第三方库打包,上传至OBS桶或直接在函数控制台上传,在“代码”页签下添加相关的依赖包,即可在函数代码中使用。