云服务器内容精选
-
编辑函数程序 打开创建的函数iotdemo,复制以下坐标转换代码,仅供测试不建议用于生产用途,用户也可以根据自己的需要修改。 # -*- coding:utf-8 -*- import json import math from math import pi def handler(event, context): data = event["notify_data"]["body"] lat = data["lat"] lng = data["lng"] print(f" WGS84: ({lng},{lat})") gcj_lng, gcj_lat = transform(lng, lat) print(f" GCJ02: ({gcj_lng},{gcj_lat})") body = { "gcj_lng": gcj_lng, "gcj_lat": gcj_lat } return { "statusCode": 200, "isBase64Encoded": False, "body": json.dumps(body), "headers": { "Content-Type": "application/json" } } def transform(lon, lat): a = 6378245.0 ee = 0.00669342162296594323 dlat = transform_lat(lon - 105.0, lat - 35.0) dlon = transform_lon(lon - 105.0, lat - 35.0) rad_lat = lat / 180.0 * pi magic = math.sin(rad_lat) magic = 1 - ee * magic * magic sqrt_magic = math.sqrt(magic) dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrt_magic) * pi) dlon = (dlon * 180.0) / (a / sqrt_magic * math.cos(rad_lat) * pi) mg_lon = lon + dlon mg_lat = lat + dlat return mg_lon, mg_lat def transform_lon(x, y): ret = 300.0 + x + 2.0 * y + 0.1 * x * x + \ 0.1 * x * y + 0.1 * math.sqrt(math.fabs(x)) ret += (20.0 * math.sin(6.0 * pi * x) + 20.0 * math.sin(2.0 * pi * x)) * 2.0 / 3.0 ret += (20.0 * math.sin(pi * x) + 40.0 * math.sin(pi / 3.0 * x)) * 2.0 / 3.0 ret += (150.0 * math.sin(pi / 12.0 * x) + 300.0 * math.sin(pi / 30.0 * x)) * 2.0 / 3.0 return ret def transform_lat(x, y): ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + \ 0.1 * x * y + 0.2 * math.sqrt(math.fabs(x)) ret += (20.0 * math.sin(6.0 * pi * x) + 20.0 * math.sin(2.0 * pi * x)) * 2.0 / 3.0 ret += (20.0 * math.sin(pi * y) + 40.0 * math.sin(pi / 3.0 * y)) * 2.0 / 3.0 ret += (160.0 * math.sin(pi / 12.0 * y) + 320 * math.sin(pi / 30.0 * y)) * 2.0 / 3.0 return ret
-
创建函数流 返回函数工作流控制台,在左侧导航栏选择“函数流”,进入函数流列表界面。 单击“创建快速函数流”,进入创建快速函数流流程。 图2 创建快速函数流 拖拽一个函数节点,单击函数节点配置元信息: 应用:默认“default”; 函数:选择上一步创建好的函数test-rotate; 版本:默认“latest”; 其他参数默认值即可。 图3 配置元信息 参数配置完成后,单击“确定”。 函数流节点创建完成后,单击右上角“保存”,配置如下函数流基本信息,完成后单击“确定”,完成函数流创建。 名称:test-rotate-workflow; 企业项目:默认“default”; 日志记录:默认“ALL”; 其他参数保持默认值。 图4 保存函数流
-
创建程序包 本例使用Python语言实现为图片打水印的功能,有关函数开发的过程请参考Python函数开发。本例不再介绍业务功能实现的代码,样例代码目录如图1所示。 图1 样例代码目录 其中index.py为函数执行的入口文件,index.py中入口函数的代码片段如下,参数“obs_output_bucket”为打水印后的图片存储地址,需要在创建函数时配置自定义参数。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 def handler(event, context): srcBucket, srcObjName = getObjInfoFromObsEvent(event) outputBucket = context.getUserData('obs_output_bucket') client = newObsClient(context) # download file uploaded by user from obs localFile = "/tmp/" + srcObjName downloadFile(client, srcBucket, srcObjName, localFile) outFileName, outFile = watermark_image(localFile, srcObjName) # 将转换后的文件上传到新的obs桶中 uploadFileToObs(client, outputBucket, outFileName, outFile) return 'OK'
-
创建委托 如下示例表示:为FuntionGraph赋予Tenant Administrator权限,仅在授权区域生效。 按照如下参数设置委托,创建委托的具体步骤请参见如何创建委托。 登录统一身份认证服务(IAM)控制台。 在统一身份认证服务(IAM)的左侧导航窗格中,选择“委托”页签,单击右上方的“+创建委托”。 图1 创建委托 开始配置委托。 图2 填写基本信息 委托名称:serverless-trust。 委托类型:选择“云服务”。 云服务:选择“函数工作流 FunctionGraph”。 持续时间:选择“永久”。 描述:填写描述信息。 单击“下一步”,进入委托选择页面,在右方搜索框中搜索需要添加的权限并勾选。此处以添加Tenant Administrator权限为例。 图3 选择策略 表2 委托权限示例 权限名称 使用描述/场景 Tenant Administrator 全部云服务管理员(除IAM管理权限),拥有该权限的用户可以对企业拥有的所有云资源执行任意操作。 单击“下一步”,选择权限的作用范围。 图4 根据业务需要选择对应的权限
-
应用场景 若您在FunctionGraph服务中使用如下场景,请先创建委托。创建委托时授予的权限类型请您根据实际业务需要进行调整,比如前期您在开发阶段授予Admin权限,后期在生产环境中建议您调整为细粒度最小使用权限,保证业务所需权限的同时,也降低权限过大的风险。具体对应授权项参见表1 常见授权项选择进行选择。 表1 常见授权项选择 场景 Admin权限 细粒度最小使用权限 说明 使用自定义镜像 SWR Admin 暂不支持 SWR Admin:容器镜像服务(SWR)管理员,拥有该服务下的所有权限。 如何创建自定义镜像,请参见使用容器镜像部署函数。 挂载SFS文件系统 SFS Administrator 暂不支持 SFS Administrator:弹性文件服务(SFS)管理员,拥有该服务下的所有权限。 如何挂载SFS文件系统,请参见添加SFS容量型文件系统。 挂载sfs turbo文件系统 SFS Administrator sfsturbo:shares:getShare(查询单个文件系统详细信息) SFS Administrator:弹性文件服务(SFS)管理员,拥有该服务下的所有权限。 sfsturbo:shares:getShare:您拥有SFS服务下查询单个文件系统信息的权限。 如何挂载挂载sfs turbo文件系统,请参见添加sfs turbo文件系统。 挂载ECS共享目录 Tenant Guest及VPC Administrator ecs:cloudServers:get(查询云服务器详情) Tenant Guest:全部云服务只读权限(除IAM权限) VPC Administrator:网络管理员 ecs:cloudServers:get:您拥有ECS服务下查询云服务器信息的权限。 如何挂载ECS共享目录,请参见添加ECS共享目录。 使用APM调用链 APM Administrator 暂不支持 APM Administrator:应用性能管理服务管理员。 该功能无需配置委托,只需您账号拥有APM服务相关权限以及函数“设置”修改权限即可配置和查询。 如何开通APM调用链,请参见调用链管理。 使用DIS触发器 DIS Administrator 暂不支持 数据接入服务(DIS)管理员,拥有该服务下的所有权限。 如何创建DIS触发器,请参见使用DIS触发器。 配置跨域VPC访问 VPC Administrator vpc:ports:delete(删除端口) vpc:ports:get(查询端口) vpc:ports:create(创建端口) vpc:vpcs:get(查询VPC) vpc:subnets:get(查询子网) 拥有VPC Administrator权限的用户可以对VPC内所有资源执行任意操作。在函数配置跨VPC访问时,则函数必须配置具备VPC管理权限的委托。 VPC细粒度最小使用权限:您拥有VPC服务下删除端口、查询端口、创建端口、查询VPC、查询子网的权限。 如何配置跨域VPC访问,请参见配置网络。 读取云解析服务(DNS)的资源 DNS ReadOnlyAccess dns:recordset:get(查询租户Record Set资源列表) dns:zone:get(查询租户zone) DNS ReadOnlyAccess:云解析服务只读权限,拥有该权限的用户仅能查看云解析服务资源。在函数配置调用DNS服务的接口解析内网域名时,则函数必须具备读取DNS资源权限的委托。 DNS细粒度最小使用权限:您拥有DNS服务下查询租户Record Set资源列表和查询租户zone的权限。 如何调用DNS服务的接口解析内网域名,请参见解析DNS内网域名。 创建OBS桶和OBS触发器 OBS Administrator obs:bucket:GetBucketLocation(获取桶区域位置) obs:bucket:ListAllMyBuckets(获取桶列表) obs:bucket:GetBucketNotification(获取桶的消息通知配置) obs:bucket:PutBucketNotification(设置桶的消息通知配置) OBS Administrator:对象存储服务管理员。 OBS细粒度最小使用权限:你拥有OBS服务下获取桶区域位置、获取桶列表、获取桶的消息通知配置、设置桶的消息通知配置的权限。 如何创建OBS触发器,请参见使用OBS触发器。
-
添加ECS共享目录 添加委托 挂载ECS共享目录需要给函数设置委托(至少拥有tenant guest以及VPC administrator权限),如果没有对应权限的委托,需要新创建,详情请参见创建委托。 配置VPC 添加ECS共享目录前,也需要给函数配置ECS对应的VPC,可以到ECS详情页的“基本信息”页签中查看“虚拟私有云”。单击虚拟私有云名称,进入虚拟私有云的详情页,查看子网。 获取到这两个信息后,可以在函数配置中配置对应的VPC。 添加挂载-ECS 需要在界面上输入ECS上的共享目录路径信息和函数访问路径。 图1 填写路径信息
-
场景介绍 使用磁盘挂载功能需要开放如下端口: 111、445、2049、2051、2052、20048。 对于Ubuntu系统还需再开放3个端口,获取方式请在任意目录下执行如下命令。 rpcinfo -p|grep mountd|grep tcp 具体请参见弹性文件服务会占用用户的哪些资源。 目前FunctionGraph函数支持以下文件系统配置。 SFS文件系统 弹性文件服务(Scalable File Service,SFS)提供按需扩展的高性能文件存储(NAS),可为云上多个弹性云服务器(Elastic Cloud Server,ECS),容器(CCE&CCI),裸金属服务器(BMS)提供共享访问。SFS为用户提供一个完全托管的共享文件存储,能够弹性伸缩至PB规模,具备高可用性和持久性,为海量数据、高带宽型应用提供有力支持。适用于多种应用场景,包括HPC、媒体处理、文件共享、内容管理和Web服务等。 SFS Turbo文件系统 SFS Turbo分为SFS Turbo标准型(500GB~32TB)、SFS Turbo标准型-增强版(10TB~320TB)、SFS Turbo性能型(500GB~32TB)和SFS Turbo性能型-增强版(10TB~320TB)。SFS Turbo为用户提供一个完全托管的共享文件存储,能够弹性伸缩至320TB规模,具备高可用性和持久性,为海量的小文件、低延迟高IOPS型应用提供有力支持。适用于多种应用场景,包括高性能网站、日志存储、压缩解压、DevOps、企业办公、容器应用等。详情请参见SFS产品介绍。 ECS共享目录 ECS共享目录是通过nfs服务,把ECS上的指定目录设置为共享文件系统(详情请参见添加ECS共享目录),函数(和ECS相同的VPC配置)可以挂载对应目录进行读写等操作,实现计算资源的动态扩展。此类型适合业务不太频繁的场景。 使用文件系统挂载功能具有以下优势: 函数执行空间相比于/tmp,可以极大扩展存储空间。 多个函数之间可以共享访问已经配置好的文件系统。 ECS计算资源动态扩展,利用ECS已有的存储能力实现更大的计算能力。 您可以在/tmp路径下写临时文件,最大不能超过10,240MB。
-
添加sfs turbo文件系统 设置委托 挂载sfs turbo文件系统需要给函数设置委托(至少拥有sfs administrator以及VPC administrator权限)。如果没有对应权限的委托,需要新创建。 设置VPC sfs turbo涉及VPC内部网络访问,添加sfs turbo文件系统前需要给函数配置sfs turbo对应的VPC。 在弹性文件服务中,获取需要挂载的文件系统的VPC和子网信息,具体操作请参见管理文件系统。 参见配置网络开启VPC访问,输入1中获取的VPC和子网。 添加挂载-SFS Turbo 添加sfs turbo和添加sfs过程相似,只要选好需要挂载的文件系统,设置好函数访问路径即可。
-
创建程序包 本例使用Python语言实现图片压缩的功能,有关函数开发的过程请参考Python函数开发。本例不再介绍业务功能实现的代码,样例代码目录如图1所示。 图1 样例代码目录 其中index.py为函数执行的入口文件,index.py中入口函数的代码片段如下,参数“output_bucket”为压缩后的图片存储地址,需要在创建函数时配置自定义参数。 def handler(event, context): ak = context.getAccessKey() sk = context.getSecretKey() if ak == "" or sk == "": context.getLogger().error('Failed to access OBS because no temporary ' 'AK, SK, or token has been obtained. Please ' 'set an agency.') return 'Failed to access OBS because no temporary AK, SK, or token ' \ 'has been obtained. Please set an agency. ' obs_endpoint = context.getUserData('obs_endpoint') if not obs_endpoint: return 'obs_endpoint is not configured' output_bucket = context.getUserData('output_bucket') if not output_bucket: return 'output_bucket is not configured' compress_handler = ThumbnailHandler(context) records = event.get("Records", None) return compress_handler.run(records[0])
-
请求参数代码定义示例 在FunctionGraph中开发函数,以python2.7语言为例,函数代码需要满足如下条件。 函数有明确的接口定义,如下所示: def handler (event, context) 入口函数名(handler):入口函数名称,需和函数执行入口处用户自定义的入口函数名称一致。 执行事件(event): 函数执行界面由用户输入的执行事件参数, 格式为JSON对象。 上下文环境(Context):Runtime提供的函数执行上下文,其接口定义在SDK接口说明。 执行事件(event)支持三种请求参数定义,格式为: Header中的请求参数:event["headers"]["参数名"] Query中的请求参数:event["queryStringParameters"]["参数名"] 您自定义的用户数据:event["user_data"] 函数代码获取的三种请求参数与API网关自定义认证中的参数关系如下所示: Header中的请求参数:对应自定义认证中参数位置为Header的身份来源,其参数值在您调用使用该前端自定义认证的API时传入 Query中的请求参数:对应自定义认证中参数位置为Query的身份来源,其参数值在您调用使用该前端自定义认证的API时传入 您自定义的用户数据:对应自定义认证中的用户数据,其参数值在您创建自定义认证时输入 函数的返回值不能大于1M,必须满足如下格式: { "statusCode":200, "body": "{\"status\": \"allow\", \"context\": {\"user\": \"abc\"}}" } 其中,body字段的内容为字符串格式,json解码之后为: { "status": "allow/deny", "context": { "user": "abc" } } “status”字段为必选,用于标识认证结果。只支持“allow”或“deny”,“allow”表示认证成功,“deny”表示认证失败。 “context”字段为可选,只支持字符串类型键值对,键值不支持JSON对象或数组。 context中的数据为您自定义的字段,认证通过后作为认证参数映射到API网关后端参数中,其中context中的参数名称与系统参数名称必须完全一致,且区分大小写,context中的参数名称必须以英文字母开头,支持英文大小写字母、数字、下划线和中划线,且长度为1 ~ 32个字符。 Header中的请求参数定义代码示例: # -*- coding:utf-8 -*- import json def handler(event, context): if event["headers"].get("auth")=='abc': resp = { 'statusCode': 200, 'body': json.dumps({ "status":"allow", "context":{ "user":"success" } }) } else: resp = { 'statusCode': 200, 'body': json.dumps({ "status":"deny", }) } return json.dumps(resp) Query中的请求参数定义代码示例: # -*- coding:utf-8 -*- import json def handler(event, context): if event["queryStringParameters"].get("test")=='abc': resp = { 'statusCode': 200, 'body': json.dumps({ "status":"allow", "context":{ "user":"abcd" } }) } else: resp = { 'statusCode': 200, 'body': json.dumps({ "status":"deny", }) } return json.dumps(resp) 用户数据定义代码示例: # -*- coding:utf-8 -*- import json def handler(event, context): if event.get("user_data")=='abc': resp = { 'statusCode': 200, 'body': json.dumps({ "status":"allow", "context":{ "user":"abcd" } }) } else: resp = { 'statusCode': 200, 'body': json.dumps({ "status":"deny", }) } return json.dumps(resp)
-
创建函数 登录函数工作流控制台,在左侧导航栏选择“总览”,单击“创建函数”进入创建函数界面。 选择“创建空白函数”,在创建函数界面配置如下信息:函数类型选择“事件函数”、输入函数名“access-redis-demo”,选择运行时“Python3.9”,最后单击创建函数。 图1 创建函数 创建函数选择的“区域”与要访问的Redis实例所在的区域一致。 根据Redis实例类型选择示例代码覆盖函数代码详情页中index.py内的代码。 图2 替换代码 在函数代码详情页,单击“添加依赖包”,选择私有依赖包源,添加创建依赖包创建的redis-py-4.6.0依赖包。 图3 添加依赖包 在“设置”页签下修改“常规设置”,内存调整为256MB,执行超时时间为30s,然后单击保存。 图4 常规设置 在“设置”页签下配置“权限”,添加一个有VPC Administrator权限的委托,然后单击保存。 图5 配置委托 在“设置”页签下配置“网络配置”,选择待访问Redis实例所在的虚拟私有云(VPC)和子网。 图6 网络配置 在“设置”页签下添加“环境变量”,添加待访问Redis实例的redis_ip_address(Redis IP地址)和redis_password(Redis连接密码)环境变量,同时开启“redis_password”的“加密参数”功能,最后单击“保存”。 表1 环境变量说明 环境变量 说明 redis_ip_address Redis的IP地址。 redis_password Redis连接密码。 在“设置”页签下配置“高级设置”。开启“配置初始化函数”,“设置初始化超时时间”为“60s”,“函数初始化入口”为index.initializer。 图7 高级设置 父主题: 使用函数访问Redis数据库
-
程序打包 使用Eclipse生成Jar包,步骤如下图所示,得到Table Tester.jar文件。 图5 Export 图6 选择类型 图7 发布 将函数依赖打包,方法如下。 下载程序包(fss_examples_dis_cloudtable.zip)文件,解压缩目录如图8所示。使用Table Tester.jar替换DIS Test.jar,替换文件目录后如图9所示。打ZIP包,如图10所示,得到disdemo.zip文件。 图8 文件目录 图9 替换后文件目录 图10 打ZIP包
-
特征 在离线异步应用场景中,工作负载具有以下一个或多个特征: 执行时间长 业务的处理耗时一般在分钟~小时级,Response Time不敏感。 提交后立即返回 在触发调用后立即得到返回,从而不因长耗时处理阻塞业务主逻辑的执行。 实时感知任务状态 无 并行处理 离线GPU任务需要处理大量数据,对GPU资源供给要求高,通过API调用并行运行加快处理速度。 数据源集成 离线GPU任务对数据源的需求多种多样,处理过程中需要与多种存储产品(例如对象存储OBS)和多种消息产品(例如消息队列)进行频繁交互。
-
概述 华为云发布的基于进程级快照的冷启动加速方案,是一种性能优化服务,用户无需额外付费,只需进行简单的配置、少量的代码修改,即可享受到该创新方案带来的冷启动性能提升。 当用户 Java 函数打开冷启动加速的配置开关后,华为云 FunctionGraph 会预先执行函数对应的初始化代码,获取其初始化执行上下文环境的快照,并进行加密缓存。后续调用该函数并触发冷启动扩容时,会直接从提前初始化后的应用快照来恢复执行环境,而非重新走一遍初始化流程,以此达到极大提升启动性能的效果。
-
操作步骤 登录 FunctionGraph 控制台,配置 Java 函数,并打开“快照式冷启动”开关。 (可选)配置 Restore Hook,并在函数代码中实现对应的 Hook 逻辑。 图1 开启Restore Hook 函数代码中Restore Hook示例如下: 函数发布新版本后,触发快照的自动化制作。 图2 发布新版本 请耐心等待快照制作完成(5min 超时时间)。 调用 Java 函数,体验快照优化后的性能提升。
更多精彩内容
CDN加速
GaussDB
文字转换成语音
免费的服务器
如何创建网站
域名网站购买
私有云桌面
云主机哪个好
域名怎么备案
手机云电脑
SSL证书申请
云点播服务器
免费OCR是什么
电脑云桌面
域名备案怎么弄
语音转文字
文字图片识别
云桌面是什么
网址安全检测
网站建设搭建
国外CDN加速
SSL免费证书申请
短信批量发送
图片OCR识别
云数据库MySQL
个人域名购买
录音转文字
扫描图片识别文字
OCR图片识别
行驶证识别
虚拟电话号码
电话呼叫中心软件
怎么制作一个网站
Email注册网站
华为VNC
图像文字识别
企业网站制作
个人网站搭建
华为云计算
免费租用云托管
云桌面云服务器
ocr文字识别免费版
HTTPS证书申请
图片文字识别转换
国外域名注册商
使用免费虚拟主机
云电脑主机多少钱
鲲鹏云手机
短信验证码平台
OCR图片文字识别
SSL证书是什么
申请企业邮箱步骤
免费的企业用邮箱
云免流搭建教程
域名价格