开发函数计算的正确姿势 —— 本地运行、调试、发布 NAS 函数

本文涉及的产品
简介:

前言

首先介绍下在本文出现的几个比较重要的概念:

__函数计算(Function Compute)__: 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。函数计算更多信息 参考

__Fun__: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API 网关、日志服务等资源。它通过一个资源配置文件(template.yml),协助您进行开发、构建、部署操作。Fun 的更多文档 参考

__Fun Local__: Fun Local 作为 Fun 的一个子命令存在,可以直接通过 fun local 命令使用。Fun Local 工具可以将函数计算中的函数在本地完全模拟运行,并提供单步调试的功能,旨在弥补函数计算相对于传统应用开发体验上的短板,并为用户提供一种解决函数计算问题排查的新途径。

在本文,我们会介绍本地调试运行配置了 NAS 的函数。更多文章请参考:《开发函数计算的正确姿势》 系列。

备注: 本文介绍的技巧需要 Fun 版本大于等于 2.8.0。

NAS 规范的定义可以参考

为函数计算配置 Nas 服务

首先,我们假定您首先按照官方教程描述的,已经开通并创建好了 Nas 服务。

然后在 template.yml 中添加如下配置即可( nas 的规范定义请参考):

NasConfig: 
  UserId: -1
  GroupId: -1
  MountPoints: 
    - ServerAddr: '012194b28f-ujc20.cn-hangzhou.nas.aliyuncs.com:/'
      MountDir: '/mnt/test'

上面配置表示将 nas 远程目录挂载到函数计算的 /mnt/test 下。UserId、GroupId 为 -1 表示的是由系统随机分配 uid 以及 gid。

本地运行

事件触发的方式运行

事件触发运行 nas 函数的示例代码可以参考

其中 template 描述内容为:

ROSTemplateFormatVersion: '2015-09-01'
Transform: 'Aliyun::Serverless-2018-04-03'
Resources:
  nasDemo:
    Type: 'Aliyun::Serverless::Service'
    Properties:
      Description: 'fc nas test'
      Policies: 
        - AliyunECSNetworkInterfaceManagementAccess
      VpcConfig:
        VpcId: 'vpc-bp12hm92gdpcjtai7ua82'
        VSwitchIds: [ 'vsw-bp1gitru7oicyyb4uiylj' ]
        SecurityGroupId: 'sg-bp1243pi65bw4cjj4bks'
      NasConfig: 
        UserId: -1
        GroupId: -1
        MountPoints: 
          - ServerAddr: '012194b28f-ujc20.cn-hangzhou.nas.aliyuncs.com:/'
            MountDir: '/mnt/test'

    readNas:
      Type: 'Aliyun::Serverless::Function'
      Properties:
        Handler: read.handler
        Runtime: nodejs8
        CodeUri: './read.js'
        Timeout: 100
        EnvironmentVariables:
          ROOT_DIR: /mnt/test

    writeNas:
      Type: 'Aliyun::Serverless::Function'
      Properties:
        Handler: write.handler
        Runtime: python2.7
        CodeUri: './write.py'
        Timeout: 100
        EnvironmentVariables:
          ROOT_DIR: /mnt/test

可以看到,在 template.yml 中描述了一个服务,以及两个函数,并且服务配置了 VPC、NAS。

事件触发运行配置了 nas 的函数的方法很简单,可以直接使用 fun local invoke 运行。

以下是一个本地事件触发运行该 nas demo 的动态演示:

Http Trigger 的方式运行

Http Trigger 触发运行 nas 函数的示例代码可以参考

其中 template 描述内容为:

ROSTemplateFormatVersion: '2015-09-01'
Transform: 'Aliyun::Serverless-2018-04-03'
Resources:
  nasHttpDemo:
    Type: 'Aliyun::Serverless::Service'
    Properties:
      Description: 'fc nas test'
      Policies: 
        - AliyunECSNetworkInterfaceManagementAccess
      VpcConfig:
        VpcId: 'vpc-bp12hm92gdpcjtai7ua82'
        VSwitchIds: [ 'vsw-bp1gitru7oicyyb4uiylj' ]
        SecurityGroupId: 'sg-bp1243pi65bw4cjj4bks'
      NasConfig: 
        UserId: -1
        GroupId: -1
        MountPoints: 
          - ServerAddr: '012194b28f-ujc20.cn-hangzhou.nas.aliyuncs.com:/'
            MountDir: '/mnt/test'

    readNas:
      Type: 'Aliyun::Serverless::Function'
      Properties:
        Handler: read.handler
        Runtime: nodejs8
        CodeUri: './read.js'
        Timeout: 100
        EnvironmentVariables:
          ROOT_DIR: /mnt/test
      Events:
        http-test: # trigger name
          Type: HTTP # http trigger
          Properties:
              AuthType: ANONYMOUS
              Methods: ['GET', 'POST', 'PUT']

    writeNas:
      Type: 'Aliyun::Serverless::Function'
      Properties:
        Handler: write.handler
        Runtime: python3
        CodeUri: './write.py'
        Timeout: 100
        EnvironmentVariables:
          ROOT_DIR: /mnt/test
      Events:
        http-test: # trigger name
          Type: HTTP # http trigger
          Properties:
              AuthType: ANONYMOUS
              Methods: ['GET', 'POST', 'PUT']

可以看到,在 template.yml 中描述了一个名为 nasHttpDemo 的服务,以及两个分别叫做 readNas、writeNas 的函数,并且服务配置了 VPC、NAS。这两个函数的 runtime 分别为 nodejs8、python2.7,并且都配置了 Http Trigger 触发器。

Http Trigger 的方式触发运行函数也很简单,可以直接在项目下使用 fun local start 运行,fun local 会自动识别到这两个函数配置了 Http Trigger,以及配置了 nas 服务,并会根据配置挂载相应的目录给函数使用。

以下是一个 Http Trigger 触发运行该 nas http demo 的动态演示:

Api 的方式运行

Api 触发配置了 Nas 的函数运行的方法与 Http Trigger 类似,只需要使用 fun local start,当函数没有配置 Http Trigger 时,会被自动注册为 api。将提示的 url 配置到 sdk 中并编写相关代码即可完成调用。

本地调试

本地调试的方法与事件触发函数、Http Trigger 触发函数、Api 触发函数的方法一致,更多信息参考

发布

无论是什么类型的 nas 函数,发布只需要通过 fun deploy 即可。

对于事件触发的函数,发布日志如下:

事件触发的函数发布成功,即可通过函数计算控制台、fcli、api 等方式进行调用。

对于 Http Trigger 触发的函数,发布日志如下:

打开日志中的 url,即可完成相应函数的调用。

本地模拟 Nas 原理介绍

fun local 本地模拟函数运行前,会首先扫描 template 中的配置,如果检测到包含 nas 配置,则会首先在本地创建一个目录,用来模拟 nas 服务的挂载点,并挂载到函数所在的容器,当函数运行时,就可以访问到该目录。

fun local 创建的 nas 模拟目录位置为:.fun/nas/{ServerAddr}

比如,对于我们上面的例子,nas 模拟目录为 .fun/nas/012194b28f-ujc20.cn-hangzhou.nas.aliyuncs.com

知道该规则后,就可以为函数运行做一些准备工作。比如当函数运行依赖一些资源时,比如机器学习模型、数据文件、php 代码等,可以提前将资源复制到 nas 模拟目录,以便于更快的验证函数的行为。

本文作者:小默

相关实践学习
基于函数计算一键部署掌上游戏机
本场景介绍如何使用阿里云计算服务命令快速搭建一个掌上游戏机。
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
7月前
|
关系型数据库 MySQL Serverless
使用函数计算挂载NAS并搭建照片管理平台
本场景主要介绍如何基于函数计算、数据库RDS和文件存储NAS一键部署相册应用。
749 0
|
Serverless 文件存储 PHP
ServerLess实战:函数计算+NAS搭建无服务器thinkphp5
如果太忙都有可能忘记续费主机或者服务器,而且每次买配置过低或者过高都不合适,所以这次用函数计算+NAS搭建无需续费无存储大小限制无需考虑带宽CPU等性能瓶颈,来搭建常用的tp5 先放懒人包下载,上传即用 1、必备条件 A、开通函数计算与NAS服务 B、绑定函数计算域名 C、挂载NAS到同区域节点的ECS上方便文件的复制粘贴修改操作 D、给账户充钱。
1939 1
|
Serverless 文件存储
开发函数计算的正确姿势 —— 使用 Fun NAS 管理 NAS 资源
前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。
3869 0
|
Serverless 文件存储
开发函数计算的正确姿势 —— Fun 自动化 NAS 配置
开发函数计算的正确姿势 —— Fun 自动化 NAS 配置 1. 前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。
2989 0
|
存储 Serverless Shell
开发函数计算的正确姿势 —— 开发 NAS 文件管理应用
前言 首先介绍下在本文出现的几个比较重要的概念: __函数计算(Function Compute)__: 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。
12128 2
|
9月前
|
存储 运维 监控
阿里云的文件存储NAS使用心得
阿里云的文件存储NAS使用心得
249 0
|
8月前
|
运维 文件存储 对象存储
【运维知识进阶篇】用阿里云部署kod可道云网盘(配置Redis+MySQL+NAS+OSS)(三)
【运维知识进阶篇】用阿里云部署kod可道云网盘(配置Redis+MySQL+NAS+OSS)(三)
225 0
|
9月前
|
存储 机器学习/深度学习 弹性计算
阿里云文件存储NAS简介和购买流程
阿里云文件存储NAS是一个可共享访问,弹性扩展,高可靠,高性能的分布式文件系统。兼容POSIX文件接口,可支持上千台弹性计算ECS、容器服务ACK等计算节点共享访问,您无需修改应用程序,即可无缝迁移业务系统上云。 支持智能冷热数据分层,有效降低数据存储成本。广泛应用于企业级应用数据共享、容器、AI机器学习、Web 服务和内容管理、应用程序开发和测试、媒体和娱乐工作流、数据库备份等场景。
|
8月前
|
存储 运维 数据安全/隐私保护
【运维知识进阶篇】用阿里云部署kod可道云网盘(配置Redis+MySQL+NAS+OSS)(四)
【运维知识进阶篇】用阿里云部署kod可道云网盘(配置Redis+MySQL+NAS+OSS)(四)
205 0
|
7月前
|
存储 Apache 文件存储
Apache On Windows 如何使用阿里云NAS作为WEB站点目录
在Windows操作系统运行Apache WEB服务器的用户如何使用阿里云NAS共享作为WEB 站点目录。
207 0

相关产品

  • 函数计算