开发函数计算的正确姿势 —— 本地运行、调试、发布 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 架构模式
目录
相关文章
|
14天前
|
存储 Serverless 文件存储
我购买了函数计算FC和NAS资源包不起作用,几天没用了还在持续扣我费用
【1月更文挑战第2天】【1月更文挑战第9篇】我购买了函数计算FC和NAS资源包不起作用,几天没用了还在持续扣我费用
368 1
|
10月前
|
存储 人工智能 Serverless
将Stable Diffusion模型文件转存到FC环境的NAS
本文将会指导你开通基于NAS的Stable Diffusion 函数计算FC环境,并且可以将SD模型库的模型转存下载到FC应用下的NAS存储空间
3304 2
将Stable Diffusion模型文件转存到FC环境的NAS
|
14天前
|
存储 运维 Serverless
Serverless 应用引擎产品使用之在函数计算中绑定非本地域的 NAS 存储如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
14天前
|
运维 Serverless 文件存储
Serverless 应用引擎产品使用之阿里函数计算中stable. diffusion应用的服务器可以使用那种99元100G一年的道用型nas如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
8月前
|
人工智能 关系型数据库 Serverless
阿里函数计算FC、文件存储NAS和RDS PostgreSQL的应用体验报告
本次体验的目的,旨在详细介绍如何通过阿里函数计算FC部署ChatGLM6B大语言模型,并借助文件存储NAS和RDS PostgreSQL搭建一个AI知识库问答应用,以实现PDF、TXT、HTML等文件和URL类型资料的轻松读取和处理。
251 62
|
14天前
|
Serverless 网络安全 文件存储
函数计算FC部署问题之挂载nas失败如何解决
函数计算FC部署是指在阿里云Function Compute服务上部署函数或应用程序的过程,它提供了一个无需管理服务器即可运行代码的平台;本合集将介绍和总结函数计算FC部署中常见的问题与解决方案,指导用户如何高效部署和管理Serverless函数。
|
8月前
|
关系型数据库 MySQL Serverless
使用函数计算挂载NAS并搭建照片管理平台
本场景主要介绍如何基于函数计算、数据库RDS和文件存储NAS一键部署相册应用。
753 0
|
9月前
|
存储 Serverless 文件存储
将 Stable Diffusion 服务部署在 FC+NAS
将 Stable Diffusion 服务部署在 FC+NAS
193 1
|
文件存储 容器 测试技术
阿里云 Serverless 应用引擎(SAE)发布 v1.2.0,支持一键启停、NAS 存储、小规格实例等实用特性
11月26日,阿里云 Serverless 应用引擎(SAE)发布 v1.2.0版本,新版本实现了以下新功能/新特性: 一键启停开发测试环境:企业开发测试环境一般晚上不常用,长期保有应用实例,闲置浪费很高。
阿里云 Serverless 应用引擎(SAE)发布 v1.2.0,支持一键启停、NAS 存储、小规格实例等实用特性
|
Serverless 文件存储 PHP
ServerLess实战:函数计算+NAS搭建无服务器thinkphp5
如果太忙都有可能忘记续费主机或者服务器,而且每次买配置过低或者过高都不合适,所以这次用函数计算+NAS搭建无需续费无存储大小限制无需考虑带宽CPU等性能瓶颈,来搭建常用的tp5 先放懒人包下载,上传即用 1、必备条件 A、开通函数计算与NAS服务 B、绑定函数计算域名 C、挂载NAS到同区域节点的ECS上方便文件的复制粘贴修改操作 D、给账户充钱。
1957 1

热门文章

最新文章

相关产品

  • 函数计算