全部产品
云市场

NAS示例

更新时间:2019-05-31 14:45:27

阿里云文件存储(Network Attached Storage) 简称 NAS ,是高可靠、高可用的分布式文件系统,提供标准的文件访问协议。在支持服务挂载 NAS 之后,函数计算的用户可以通过编写代码,像访问本地文件系统一样访问共享的文件系统,从而支持更多用户的场景。

以下是在函数计算中使用 NAS 的详细实例:

Contents

开始之前,请您阅读 NAS 简介

这个示例将展示如何创建两个读写 NAS 的函数,共分为四步:

创建 NAS 挂载点

  1. 登陆 NAS 控制台.
  2. 选择一个区域。
  3. 点击右上角的“创建文件系统”按钮。NAS console
  4. 在弹出的对话框中填入相应的内容。协议类型选择 NFS (包含 NFSv3 和 NFSv4 )。更多配置说明,请参考 (NAS 产品说明)create file system
  5. 点击确定。
  6. 进入创建好的文件系统后,点击“添加挂载点”以创建供函数计算使用的挂载点.add mp
  7. 在弹出的窗口中,填写相应内容:
    • 挂载点类型选择“VPC”。
    • 请确认 权限组 中选中的 默认VPC权限组 允许访问 VPC 内所有的 IP 地址。
    • 请记住您选择的 VPC 具体信息,之后的步骤中会再次使用到。add mp2
  8. 点击确定,新的挂载点就创建好了。

创建挂载NAS的服务

  1. 登陆 函数计算控制台.
  2. 选择您创建的 NAS 文件系统所在的区域,
  3. 新建服务,并使用您在 step 7 中创建的 NAS 文件系统:

    1. 输入服务名和描述.
    2. 打开高级配置.
    3. 在 VPC 配置中填写在 step 7 中选择的 VPC 的具体信息.
    4. 填写完 VPC 配置后,NAS 配置会显示出来。create service
  4. 填写 NAS 的相关配置。

    • UserId 是函数运行所用的 uid。uid 决定了在 NAS 文件系统创建文件时的创建者。建议填默认值 -1,函数计算会随机分配 uid。

    • GroupId 是函数运行所用的 gid。为了一个服务下所有函数能便捷且安全得更像 NAS 文件,建议选择合适的 gid,并开放合适的权限。

    • NAS挂载点 下拉框中包含了选中的 VPC 中可访问的所有 NAS 挂载点。

    • 远程目录 是 NAS 文件系统中的目录,如果不填写,缺省是根目录。

    • 本地目录 是函数用来访问远程目录的本地挂载目录。

      一个服务可以配置最多 5 个不同的 NAS 远程挂载目录,NAS 挂载点可以相同.

  5. 填写其它的服务配置.
  6. 点击确认.

创建一个写 NAS 的函数

以下 python2.7 函数是一个写 NAS 文件系统的示例。通过事件传入的 root_dirstep 4 中配置好的本地挂载路径。通过本示例可以看出挂载 NAS 的服务就可以支持函数像访问本地文件系统一样访问 NAS 。

  1. import json
  2. import logging
  3. import random
  4. import string
  5. import os
  6. def handler(event, context):
  7. logger = logging.getLogger()
  8. evt = json.loads(event)
  9. root_dir = evt["root_dir"]
  10. sub_dir = randomString(16)
  11. logger.info('uid : ' + str(os.geteuid()))
  12. logger.info('gid : ' + str(os.getgid()))
  13. file_name = randomString(6)+'.txt'
  14. newDir = root_dir + '/' + sub_dir + '/'
  15. content = "NAS here I come"
  16. os.mkdir(newDir)
  17. fw = open(newDir+file_name, "w+")
  18. fw.write(content)
  19. fw.close()
  20. return sub_dir + '/' + file_name
  21. def randomString(n):
  22. return ''.join(random.SystemRandom().choice(string.ascii_uppercase + string.digits) for _ in range(n))

创建一个读 NAS 的函数

同样的方法,创建一个读 NAS 文件系统的函数。以下是 Node.js 函数读 NAS 文件系统的示例 。事件中包含了同样的 root_dirfile_path写 NAS 函数 的路径。整个过程中您不需要依赖任何 NAS SDK。

  1. module.exports.handler = function(event, context, callback) {
  2. var fs = require('fs');
  3. var path = require('path');
  4. var eventObj = JSON.parse(event.toString());
  5. var root = eventObj["root_dir"]
  6. var file = eventObj["file_path"]
  7. var contents = fs.readFileSync(path.join(root, file), 'utf8');
  8. callback(null, contents);
  9. };

invoke 结果如图所示。输出结果是上一个函数写入的内容。nas result