Funfile文件中包含了一系列命令,这些命令指定了构造函数计算交付物的步骤。Funcraft会执行这些命令,最终产出交付物,例如完成项目开发及打包编译后需要发布的内容。本文介绍如何通过Funfile文件安装第三方依赖。

前提条件

您已完成以下操作:
注意 本文介绍的内容后期将不再维护。如果您的函数计算资源是使用Funcraft管理的,建议您将资源迁移至Serverless Devs管理。

关于如何将函数计算的相关资源从Funcraft迁移到Serverless Devs进行管理的详细操作,请参见从Funcraft迁移到Serverless Devs

关于Serverless Devs的详细信息,请参见什么是Serverless Devs

关于如何使用Serverless Devs安装依赖,请参见多语言安装依赖示例

由此带来的不便,敬请谅解!

Funfile支持的语法

Dockerfile支持的命令,例如COPYRUNENVUSERWORKDIR等,Funfile也同样支持。Dockerfile用于构造Docker镜像,Funfile可以用于构造函数计算的交付产物。您可以通过安装rlang了解Funfile支持的一些语法命令,详细信息,请参见rlang

相较于Dockerfile命令,Funfile只需要在原来的apt-getpip安装包的命令前加fun-install前缀即可。

使用Funfile的优势

  • 标准化:通过Funfile文件描述安装依赖的详细步骤,有利于标准化开发流程。
  • 便捷性:通过构建Funfile文件而不是将具体的某些依赖提交到版本控制系统中,也更有利于函数代码的维护。
  • 原生态:Funfile文件的编写,与Dockerfile的编写类似,却更接近原生体验。结合fun install sbox,您可以先在交互式环境中进行各种尝试,然后将最终安装步骤编写到Funfile文件内。
  • 高效性:Funfile也支持Dockerfile的Cache功能,如果项目的改动对Funfile不影响,那么Funfile可以利用Cache直接跳过相应的命令执行过程。这有助于加速对Funfile文件的执行过程,提升开发效率。

操作步骤

  1. 构建Funfile文件。
    1. 在项目目录中执行fun install init命令,初始化构建安装Funfile文件。
    2. 选择函数的运行环境。
      ? Select a runtime (Use arrow keys)
      > nodejs6
        nodejs8
        nodejs10
        nodejs12
        python2.7
        python3
        java8
      (Move up and down to reveal more choices)
      以安装python2.7为例,介绍如何安装第三方依赖。当选择python2.7后,会在当前目录中生成一个名为Funfile的文件,内容如下:
      RUNTIME python2.7
      说明 由于Funfile是一个文本文件,您可以直接创建Funfile的文件,按需修改运行环境。
  2. 使用Funfile文件安装pip依赖。
    1. 安装PIP依赖时需要修改Funfile文件,内容如下。
      RUNTIME python2.7
      RUN fun-install pip install flask                    
      说明 如果需要安装APT依赖,您只需将pip修改为apt-get即可。
    2. 执行以下命令安装依赖。
      fun install
      预期输出:
      using template: template.yml
      start installing function dependencies without docker
      
      building pyzbar-srv/pyzbar-fun
      Funfile exist, Fun will use container to build forcely
      Step 1/2 : FROM aliyunfc/runtime-python3.6:build-1.6.1
       ---> 2110e9fa9393
      Step 2/2 : RUN fun-install pip install flask
       ---> Using cache
       ---> 992b0d65136d
      sha256:992b0d65136dfa63b9566b8280881bb4cf22c4f1b68155713545e4b61ada****
      Successfully built 992b0d65136d
      Successfully tagged fun-cache-e95a9bfa-a6fa-4d70-b5b4-0084613e****:latest
      copying function artifact to /Users/tan/code/fun/examples/install/pyzbar_example
      
      could not find any manifest file for pyzbar-srv/pyzbar-fun, [install] stage for manifest will be skipped
      
      Tips for next step
      ======================
      * Invoke Event Function: fun local invoke
      * Invoke Http Function: fun local start
      * Build Http Function: fun build
      * Deploy Resources: fun deploy                    

更多信息

执行fun install命令后会将依赖安装到代码目录中。同时,您可以通过fun local的相关命令进行本地调试,也可以通过fun deploy将项目部署到云端。相关信息,请参见使用fun local实现本地调试使用fun deploy部署应用