云服务器内容精选

  • 创建程序包 本例使用Python语言实现图片压缩的功能,有关函数开发的过程请参考Python函数开发。本例不再介绍业务功能实现的代码,样例代码目录如图1所示。 图1 样例代码目录 其中index.py为函数执行的入口文件,index.py中入口函数的代码片段如下,参数“output_bucket”为压缩后的图片存储地址,需要在创建函数时配置自定义参数。 # -*-coding:utf-8 -*- import os import string import random import urllib.parse from PIL import Image from obs import ObsClient LOCAL_MOUNT_PATH = '/tmp/' def handler(event, context): ak = context.getSecurityAccessKey() sk = context.getSecuritySecretKey() st = context.getSecurityToken() if ak == "" or sk == "" or st == "": 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])
  • 告警消息推送 在 SMN 消息通知服务创建主题,此处以主题名称fss_test为例,创建过程请参考创建SMN日志主题。 在SMN 消息通知 服务订阅主题,用于将告警消息推送至该主题下的订阅终端,此处以添加邮件订阅终端为例,订阅fss_test主题,订阅过程请参考订阅主题。 SMN主题名称需添加在函数的环境变量中,以便将告警消息推送至该主题下的订阅终端。环境变量名称为“SMN_Topic”,环境变量值为SMN主题名称。以主题名称fss_test为例,在函数的环境变量配置中添加:“SMN_Topic”:“fss_test”。 订阅主题可选择通过邮件、短信、HTTP/HTTPS等形式推送告警消息 本案例中推送告警消息的事件是:当日志事件通过LTS触发器触发函数执行时,函数中过滤告警日志,产生的告警消息推送至SMN主题的订阅终端。
  • 创建委托 登录 统一身份认证 服务控制台。 在统一身份认证服务的左侧导航窗格中,选择“委托”页签,单击右上方的“+创建委托”。 图2 创建委托 开始配置委托。 委托名称:输入您自定义的委托名称,此处以“LtsOperation”为例。 委托类型:选择“云服务”。 云服务:选择“ 函数工作流 FunctionGraph”。 持续时间:选择“永久”。 描述:填写描述信息。 单击“下一步”,进入委托选择页面,在右方搜索框中搜索“LTS Administrator”权限和“SMN Administrator”并勾选。 选择“LTS Administrator”,由于该策略有依赖,在勾选LTS Administrator时,还会自动勾选依赖的策略:Tenant Guest。 单击“下一步”,请根据业务需要选择权限的作用范围。
  • 告警消息推送 在SMN消息通知服务创建主题,此处以主题名称cts_test为例,创建过程请参考创建主题。 在SMN消息通知服务订阅主题,用于将告警消息推送至该主题下的订阅终端,此处以添加邮件订阅终端为例,订阅cts_test主题,订阅过程请参考订阅主题。 订阅主题可选择通过邮件、短信、HTTP/HTTPS等形式推送告警消息 本案例中推送告警消息的事件是:当日志事件通过 CTS 触发器触发函数执行时,函数中过滤白名单告警日志,产生的告警消息推送至SMN主题的订阅终端。
  • 创建委托 登录统一身份认证服务控制台,在左侧导航栏单击“委托”,进入“委托”界面。 单击“创建委托”,进入“创建委托”界面。 填写委托信息。 委托名称:输入您自定义的委托名称,此处以“serverless_trust”为例。 委托类型:选择“云服务”。 云服务:选择“函数工作流 FunctionGraph”。 持续时间:选择“永久”。 描述:填写描述信息。 单击“下一步”,进入委托选择页面,在“配置权限”界面勾选“CTS Administrator”和“SMN Administrator”。 SMN Administrator:拥有该权限的用户可以对SMN服务下的资源执行任意操作。 选择“CTS Administrator”,由于该策略有依赖,在勾选时,还会自动勾选依赖的策略:Tenant Guest。 单击“下一步”,根据实际业务需求选择资源授权范围,单击“确定”,完成权限委托设置。
  • 创建函数流 返回函数工作流控制台,在左侧导航栏选择“函数流”,进入函数流列表界面。 单击“创建快速函数流”,进入创建快速函数流流程。 图2 创建快速函数流 拖拽一个函数节点,单击函数节点配置元信息: 应用:默认“default”; 函数:选择上一步创建好的函数test-rotate; 版本:默认“latest”; 其他参数默认值即可。 图3 配置元信息 参数配置完成后,单击“确定”。 函数流节点创建完成后,单击右上角“保存”,配置如下函数流基本信息,完成后单击“确定”,完成函数流创建。 名称:test-rotate-workflow; 企业项目:默认“default”; 日志记录:默认“ALL”; 其他参数保持默认值。 图4 保存函数流
  • 创建OBS桶 注意事项 上传图片的源桶、输出图片的目标桶和函数必须处于同一个区域下。 必须使用两个不同的桶。如果使用一个桶,会无限执行函数。(源桶上传图片会触发函数执行,从而无限循环)。 操作步骤 登录 对象存储服务 控制台,单击“创建桶”,进入“创建桶”界面。 在“创建桶”界面,填写存储桶信息。 区域:根据实际情况设置 桶名称输入:输入您自定义的桶名称,此处以“your-bucket-input”为例。 数据冗余存储策略:“单AZ存储” 默认存储类别:“标准存储” 桶策略:"私有" 服务端加密:“不开启加密” 归档数据直读:“关闭” 其余参数保持默认,单击“立即创建”,完成源桶创建。 重复2,创建目标桶。 区域及存储类别与源桶保持一致,输入您自定义的桶名称,此处以“your-bucket-output”为例。 完成桶创建以后,OBS桶列表有your-bucket-input、your-bucket-output两个桶。
  • 创建委托 登录统一身份认证服务控制台。 在统一身份认证服务的左侧导航窗格中,选择“委托”菜单,单击右上方的“+创建委托”,如图2所示。 图2 创建委托 开始配置委托。 委托名称:输入您自定义的委托名称,此处以“LtsOperation”为例。 委托类型:选择“云服务”。 云服务:选择“函数工作流 FunctionGraph”。 持续时间:选择“永久”。 描述:填写描述信息。 单击“下一步”,进入委托权限选择页面,在右方搜索框中搜索并勾选“LTS Administrator”权限。 选择“LTS Administrator”,由于该策略有依赖,在勾选LTS Administrator时,还会自动勾选依赖的策略:Tenant Guest。 单击“下一步”,根据实际业务需求选择资源授权范围,单击“确定”,完成权限委托设置。
  • 日志采集和存储 在 云日志 服务创建日志组,此处以test1206、test-1121为例,创建过程请参考创建日志组。 在云日志服务创建日志流,此处以test-206、test-1121为例,创建过程请参考创建日志流。 创建函数A,负责写入日志到test-206。函数A代码样例请参考write_log.py。 创建函数B,挂载LTS触发器,接收test-206的日志,处理日志并发结果写入test-1121。函数B代码样例请参考lts_cleanse.py。 在云日志服务配置Agent,快速将E CS 等服务器上日志采集到指定的日志组,配置过程请参考安装ICAgent。 图1 流程图
  • 创建OBS桶 注意事项 上传图片的源桶、输出图片的目标桶和函数必须处于同一个区域下。 必须使用两个不同的桶。如果使用一个桶,会无限执行函数。(源桶上传图片会触发函数执行,从而无限循环)。 操作步骤 登录对象存储服务控制台,单击“创建桶”,进入“创建桶”界面。 在“创建桶”界面,填写存储桶信息。 区域:根据实际情况设置 数据冗余存储策略:“单AZ存储” 桶名称输入:输入您自定义的桶名称,此处以“hugb-bucket-input”为例。 默认存储类别:“标准存储” 桶策略:"私有" 服务端加密:“关闭” 归档数据直读:“关闭” 单击“立即创建”,完成源桶创建。 重复步骤2,创建目标桶。 区域及存储类别与源桶保持一致,桶名称命名为“hugb-bucket-output”。 完成桶创建以后,OBS桶列表有hugb-bucket-input、hugb-bucket-output两个桶。
  • 添加事件源 函数创建以后,可以为函数添加事件源,本例通过配置DIS测试事件,模拟DIS输入数据,步骤如下。 用户进入DISDemo函数详情页,在“代码”页签下,选择配置测试事件,如图1所示,弹出“配置测试事件页”。 图1 配置测试事件 在“配置测试事件页”,输入配置信息,如图2所示。 配置测试事件:选择“创建新的测试事件”。 事件模板:选择“ 数据接入服务 (DIS)”。 事件名称:输入您自定义的事件名称,此处以“dis-test”为例。 图2 测试事件 单击“创建”,完成测试事件配置。 父主题: 使用函数处理DIS数据
  • 构建程序 创建功能函数。 创建定时开启或者关闭华为公有云虚拟机的函数,上传定时开启华为公有云虚拟机的程序包或者定时关闭华为公有云虚拟机的程序包,并选择创建的委托EcsOperation。创建过程请参考创建函数。 运行时语言选择“Python3.6”,委托名称选择上一步创建的委托“EcsOperation”。 设置环境变量。 在“配置”页签配置环境变量,说明如表1所示。 表1 环境变量说明 环境变量 说明 region ECS所在的区域,如cn-north-4 projectId ECS所在的Project ID,获取方法请参见获取项目ID。 whiteLists 当定时开启华为公有云虚拟机时,填写需开启的虚拟机ID,以英文逗号分隔 当定时关闭华为公有云虚拟机时,填写需关机的虚拟机ID,以英文逗号分隔 type 仅需在定时关机时确认是否需要配置。 关机类型: SOFT:普通关机(默认) HARD:强制关机 环境变量的设置过程请参考使用环境变量。 本案例对函数执行的区域没有要求,若函数和待开关机节点在同一region,按照上述操作即可。若函数和待开关机节点不在同一region,如函数运行在北京一,想要开启或者关闭北京四的弹性云服务的虚拟机,只需要将projectId、region更改为北京四区域的信息,并在环境变量中添加ak、sk(获取AK/SK),再去掉配置的委托即可。 AK/SK认证就是使用AK/SK对请求进行签名,在请求时将签名信息添加到消息头,从而通过身份认证。 AK(Access Key ID):访问密钥ID。与私有访问密钥关联的唯一标识符;访问密钥ID和私有访问密钥一起使用,对请求进行加密签名。 SK(Secret Access Key):与访问密钥ID结合使用的密钥,对请求进行加密签名,可标识发送方,并防止请求被修改。 图3 配置环境变量 如果开启或者关闭的虚拟机数量过多,则需要增大超时时间。 表1中除whiteLists以外的环境变量必须添加,whiteLists根据实际情况选择添加或者不添加,whiteLists为需开机/关机的ecs服务器ID,以逗号分隔。 {region}.{domain}组成ECS的终端节点Endpoint,如:cn-north-4.myhuaweicloud.com,具体Endpoint信息,请参考地区和终端节点。 选择依赖包。 在“代码”页签,添加“huaweicloudsdk_ecs_core_py3.6”依赖包。 添加依赖包详细操作请参见配置函数依赖。 如果您所在区域无法添加“huaweicloudsdk_ecs_core_py3.6”依赖包,请联系客服具体咨询。
  • 创建委托 登录统一身份认证服务控制台。 在统一身份认证服务的左侧导航窗格中,选择“委托”页签,单击右上方的“+创建委托”。 图1 创建委托 开始配置委托。 委托名称:输入您自定义的委托名称,此处以“EcsOperation”为例。 委托类型:选择“云服务”。 云服务:选择“函数工作流 FunctionGraph”。 持续时间:选择“永久”。 描述:填写描述信息。 单击“下一步”,进入委托选择页面,在右方搜索框中搜索“ECS FullAccess”权限并勾选。 图2 选择权限 单击“下一步”,根据实际业务需求选择资源授权范围,单击“确定”,完成权限委托设置。
  • 创建OBS桶 上传文件的源桶、输出文件的目标桶和函数必须处于同一个区域下。 必须使用两个不同的桶。如果使用一个桶,会无限执行函数。(源桶上传文件会触发函数执行,从而无限循环)。 操作步骤 登录对象存储服务控制台,单击“创建桶”,进入“创建桶”界面。 在“创建桶”界面,填写存储桶信息。 区域:根据实际情况设置。 数据冗余存储策略:“单AZ存储”。 桶名称:输入您自定义的桶名称,此处以“dew-bucket-input”为例。 默认存储类别:“标准存储”。 桶策略选择:"私有"。 归档数据直读:“关闭”。 单击“立即创建”,完成源桶创建。 重复步骤2,创建目标桶。 区域及存储类别与源桶保持一致,桶名称命名为“dew-bucket-output”。 完成桶创建以后,OBS桶列表有dew-bucket-input、dew-bucket-output两个桶。
  • 创建程序包 本例使用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'