本文以常用的访问阿里云对象存储(OSS)服务为例,详细讲解如何使用边缘函数计算访问阿里云服务,完成本地文件上传和云端文件下载能力。
前提条件
背景信息
物联网边缘计算提供边缘函数计算能力,更方便地访问阿里云各种云服务,支持将设备在边缘端运行时生成的各类文件(统计报表、日志、图片、视频等)传输到云端,或从云端下载配置文件作为程序的输入来影响边缘端程序的行为。通过边缘函数计算访问OSS服务,可以选择永久存储设备数据。
使用边缘函数计算访问阿里云各种云服务的操作流程主要分为三步:
步骤一:创建OSS Bucket
- 创建存储空间,具体操作,请参见控制台创建存储空间。
本示例中部分参数按如下表设置,其余参数可以使用默认值。
参数 描述 Bucket 名称 设置为le-fc-bucket。 地域 从下拉框中选择该存储空间的数据中心。 可以选择离您近的数据中心,访问速度更有保障。
重要 选择地域后,该参数下方会显示您已选地域对应的Endpoint值,请复制该值到本地文件中,用于后续编辑函数代码。 - 在本地创建一个名为ossCloudFile.txt的TXT格式的文件,文件内容可随意设置。该文件为后续通过函数下载OSS文件,提供文件源。
- 将ossCloudFile.txt文件上传到已创建的le-fc-bucket存储空间中,具体操作,请参见控制台上传文件。
步骤二:创建访问OSS的函数
- 下载访问OSS函数accessAliOSS-code.zip。该函数用于访问OSS,完成本地文件上传OSS和云端文件下载到本地的操作。
- 登录函数计算控制台。如尚未开通该服务,请阅读并选中我已阅读并同意,单击立即开通,开通服务。
- (可选)在左侧导航栏单击服务及函数,在服务及函数页面服务列表区域,单击新增服务,创建一个服务。其中,服务名称必须填写,此处设置为EdgeFC,其余参数可根据您的需求设置,也可以不设置。说明
- 若您首次在函数计算中创建服务,请根据配置向导配置参数。
- 若已操作过其他应用场景示例或小程序示例,即已创建EdgeFC服务,则无需重复创建。
- 创建服务成功后,在服务与函数页面的EdgeFC区域,单击新增函数,然后单击事件函数区域中的配置部署。
- 设置访问OSS函数的基础管理配置参数。
参数 描述 函数类型保持默认选项。所在服务选择已创建的EdgeFC服务。函数名称设置为accessAliOSS。 运行环境设置函数的运行环境,此示例中选择Node.JS 8.x。 在上传代码右侧选择上传代码包,单击上传代码,上传步骤1中下载的accessAliOSS-code.zip代码包。
函数入口使用默认值index.handler。其余参数的值请根据您的实际需求设置,也可以不设置。更多信息,请参见函数计算。
确认函数信息后,单击新建完成操作。
- 创建函数完成后,系统自动跳转到函数详情页面。您可在代码执行页签的代码执行管理区域下,选中在线编辑单选框,查看源码。
其中:
- 将<Your OSS Region>替换为创建OSS Bucket中,创建存储空间时保存到本地的Endpoint值。
- 将<Your OSS Bucket>替换为创建OSS Bucket中创建存储空间时设置的Bucket名称,即le-fc-bucket。
- 登录前提条件中已完成的网关,执行如下命令生成本地测试文件,为样例代码中的本地上传文件功能,准备一个名为localFile.txt的本地文件。
sudo echo "Hi, this is the file from edge GW." > /linkedge/run/localFile.txt
说明 在函数计算代码中访问网关宿主机的文件时,对文件所在的路径有约束。在Link IoT Edge标准版(LE Standard)中,函数计算的代码是运行在与宿主机隔离的文件系统环境中,只有/linkedge/run目录是函数计算和宿主机环境共享并且拥有可读写权限。所以在测试时,请把测试文件的路径指到/linkedge/run目录下。 - 返回函数计算控制台,在accessAliOSS函数的代码执行页签代码执行管理区域中,单击保存。
- (可选)如需体验下载云端OSS文件到本地功能,可以在accessAliOSS函数的代码执行页签在线编辑框中,注释掉第45行的
client.put
代码,去掉第48行开头的注释符"//"
,调用OSS SDK的get方法(client.get('ossCloudFile.txt', "/linkedge/run/fileFromCloud.txt");
)。其中ossCloudFile.txt是创建OSS Bucket中上传到le-fc-bucket存储空间的文件名,/linkedge/run/fileFromCloud.txt是文件下载后保存在边缘端的文件名。
说明 样例代码解读如下,其逻辑分为三步:
- 获取Credential,作为访问云服务的临时Token。
credChain.resolvePromise()
- 填写您的OSS Region信息和OSS Bucket信息。
region: '<Your OSS Region>', bucket: '<Your OSS Bucket>',
- 调用OSS SDK的put方法,将本地文件上传到OSS。
client.put('fileFromEdge.txt', "/linkedge/run/localFile.txt");
其中fileFromEdge.txt是文件上传后在云端保存的文件名,/linkedge/run/localFile.txt是本地需要上传的文件,两个文件名都可根据需求做修改,前提是本地文件必须存在。
步骤三:分配函数到边缘实例
首先,需要为边缘实例分配包含管理对象存储服务(OSS)权限权限的角色,或者在已分配到边缘实例的角色中添加管理对象存储服务(OSS)权限权限。具体操作,请参见云资源访问。
- 登录边缘计算控制台。
- 在左侧导航栏单击应用管理。
- 使用本文上方步骤二中已创建的函数,创建函数计算类型的边缘应用。具体操作,请参见函数计算应用。
应用信息参数说明如下:
参数 描述 应用名称 设置您应用的名称,例如accessAliOSS。 应用类型 选择函数计算。 地域 选择您创建的服务所在的地域。 服务 选择EdgeFC服务。 函数 选择accessAliOSS函数。 授权 选择AliyunIOTAccessingFCRole。 应用版本 设置应用的版本,必须是该应用唯一的版本号,即一个应用不可以设置两个相同的版本号。 函数配置说明如下:参数 描述 启用默认配置 选择否。 运行模式 运行模式有两种。此处选择持续运行模式。程序部署后会立即执行。 超时限制(秒) 函数收到事件后的最长处理时间,此处使用默认值5秒。如超过该时间函数仍未返回结果,该函数计算程序将会被强制重启。 定时运行 打开定时运行开关,文本框中填入 * * * * *
。表示该函数会被定时触发运行,每分钟执行一次。Cron表达式详细信息请参见CRONTAB 网页内容。其余参数无需配置。
- 在左侧导航栏单击边缘实例。
- 在本文“前提条件”中创建的边缘实例右侧,单击查看。
- 在实例详情页面,选择设置,单击添加角色与权限,为边缘实例分配AliyunIOTAccessingFCRole角色。操作详情,请参见云资源访问。
- 在实例详情页面的边缘应用页签,单击分配应用。
- 在分配应用面板,找到已创建的访问OSS的函数accessAliOSS,单击对应操作栏中的分配,然后单击关闭。
步骤四:部署边缘实例
- 在实例详情页面,单击右上角部署后,在弹出对话框中单击确定,将子设备、函数计算等资源下发到边缘端。
- 实例部署成功约一分钟后,可以在对象存储控制台, 页面,可以看到fileFromEdge.txt文件已经成功上传。可以选择文件右侧的,将文件下载到PC上查看文件内容。
至此您已经完整地体验了使用边缘函数计算实现阿里云OSS服务的访问功能。
常见问题
如果在OSS文件管理页没有看到fileFromEdge.txt文件,可能有如下几种原因:
- 函数触发时间还没到:函数定时每分钟运行一次,如果刚部署完成,函数有可能还没有运行。请等待2分钟刷新页面查看。
- 网关本地系统时间不正确:本地时间可通过
date
命令查看,如果时间和网络时间差距过大,OSS会拒绝请求。 - 本地待上传文件不存在:如果在网关上执行
ls /linkedge/run/localFile.txt
命令,显示文件不存在,请参考本文上方生成本地测试文件内容创建。 - OSS配置信息填写有误:请参考本文上方在线编辑代码内容填写正确的OSS配置信息。
- 如果上述配置都检查无误,可通过
cat /linkedge/run/logger/fc-base/accessAliOSS/log.INFO
命令查看函数运行日志,定位问题。
文档内容是否对您有帮助?