BSAM-CLI使用示例
所有文档

          函数计算 CFC

          BSAM-CLI使用示例

          BSAM CLI是一个基于BCE SAM规范的命令行工具,它提供了本地开发环境,帮助您在把函数上传到百度智能云CFC之前,在本地进行函数的开发、分析和执行。

          工具安装

          1.安装Python3.6及以上

          2.安装Docker

          BSAM CLI依赖Docker,所以您需要提前安装并运行Docker服务,关于各个操作系统Docker的安装可以参考Docker官网

          为了查看Docker服务是否已运行,您可在安装完成后执行docker ps等命令进行验证。

          1. 安装 BSAM CLI

          执行 pip3 install bce-sam-cli 即可完成安装。

          安装完成后,执行bsam命令,出现下面的提示说明安装成功。

          Usage: bsam [OPTIONS] COMMAND [ARGS]...
          
            BCE Serverless Application Model (SAM) CLI
          
            The BCE Serverless Application Model provide a simplified way of defining
            the CFC functions, triggers and other services needed by your serverless
            application.You can find more in-depth guide about the SAM specification
            here: https://github.com/bcelabs/serverless-application-model.
            
            ... ...
            

          使用流程

          初始化

          通过init命令初始化一个工作目录,指定runtime为nodejs10。

          $ bsam init --runtime nodejs10

          该命令会在当前目录下生成一个bsam-app文件夹,目录结构如下:

          $ cd bsam-app
          $ tree
          .
          ├── README.md
          ├── src
          │   ├── app.js
          │   ├── package.json
          │   └── tests
          │       └── unit
          │           └── test_handler.js
          └── template.yaml

          app.js是函数代码文件。

          template.yaml是BCE SAM模型文件,定义了函数的函数名、runtime、handler等元信息。BSAM CLI从模型文件中获取函数配置,从而对正确地执行函数。

          生成事件

          为了使您更方便的开发测试CFC函数,您可以创建并自定义触发源事件。

          bsam local generate-event <service> <event> [options]

          目前支持的service有bosdueroshttp。每种服务的事件类型不同,以dueros为例,它支持四种event:

          event 含义
          start-session Generates a DuerOS Start Session Event
          end-session Generates a DuerOS End Session Event
          intent-answer Generates a DuerOS Intent Answer Event
          event-report Generates a DuerOS Report Event

          安装依赖/编译

          在执行函数之前,需要做一些额外工作来扫清障碍。若您的函数依赖第三方库,BSAM CLI可帮您自动安装这些依赖。

          bsam local install

          该命令会在当前目录查找和读取BCE SAM模型文件template.yaml,若模型文件不在当前目录,您可使用-t参数指定文件的路径。

          您可使用CodeUri字段指定函数所在目录,BSAM CLI会读取该目录中的package.json(Node.js函数)或requirements.txt(Python函数),根据其中的配置下载所需的模块。 您也可以手动在该目录中放置依赖文件。

          Java

          Java是编译型语言,在执行前需要编译函数。执行install命令时,BSAM CLI使用maven下载依赖、编译函数,后者会读取本地的pom.xml文件。 若您的Java函数依赖本地jar包,可将jar包放在bsam-app目录下,在pom.xml文件中指定jar包的位置,示例如下:

          <dependency>  
          	<groupId>org.ibm</groupId>  
          	<artifactId>jms</artifactId>  
          	<version>1.0.0</version>
          	<scope>system</scope>
          	<systemPath>${project.basedir}/lib/user-local.jar</systemPath>
          </dependency>

          本地jar包只能放在bsam-app目录范围内,放到其它位置不会被挂载到容器中,无法被maven找到。

          install命令执行完毕后,bsam-app下会新建一个target目录,其中的 xx-xx-jar-with-dependencies.jar为编译好的包含依赖的jar包。

          执行函数

          在执行函数时,需要传递函数的Logical ID和event json文件,bsam local invoke也接受stdin作为event输入。

          每次执行函数前,BSAM CLI会自动检查是否有可更新的镜像,您可通过--skip-pull-image参数取消检查。

          示例:

          # invoke时传入event json文件
          $ bsam local invoke bsam-app -e event.json
          
          # 使用stdin传入event
          $ echo '{"msg":"hello, cfc"}' | bsam local invoke bsam-app
          
          # 查看更多选项
          $ bsam local invoke --help

          该命令会在当前目录查找和读取BCE SAM模型文件template.yaml,若模型文件不在当前目录,您可使用-t参数指定文件的路径。

          若您执行Java函数,请用CodeUri字段指定上一步中编译好的jar包文件路径。

          创建配置文件

          函数部署功能需要您在home目录下预先创建好bce config和credentials文件,将access key、secret key和region信息写入其中。

          执行bsam config命令可帮助您快速创建这两个文件。

          函数打包与部署

          在本地开发和测试完函数后,可以使用bsam packagebsam deploy命令部署到CFC。

          package命令将压缩您的代码文件,生成一个.zip文件。

          deploy命令会将.zip文件上传到CFC,若该函数不存在则创建一个新的函数,若您在模型文件中定义了触发器,那么触发器也会被一并创建。若该函数已存在,则会更新该函数的代码和配置。

          deploy支持指定部署到华北-北京、华东-苏州或华南-广州机房。

          函数调试

          bsam local invoke 命令支持调试功能,您可借助本地IDE完成调试,下面以VS Code为例介绍如何调试。

          调试Node.js函数

          1. 用VS Code打开工作目录bsam-app。
          2. 执行命令bsam local invoke -e event.json --debug-port 5858 bsam-app,这里指定容器暴露的调试端口为5858。
          3. 在VS Code的菜单栏中,选择"Debug" ,"Open Configurations",在打开的launch.json中编辑内容如下:

            {
                "version": "0.2.0",
                "configurations": [
                    {
                        "name": "BSAM CLI Node.js Debug",
                        "type": "node",
                        "request": "attach",
                        "address": "localhost",
                        "port": 5858,
                        "localRoot": "${workspaceRoot}/bsam-app/src",
                        "remoteRoot": "/var/task",
                        "protocol": "inspector",
                        "stopOnEntry": false,
                    }
                ]
            }

            其中,"port"字段值要和第二步中指定的端口保持一致,"localRoot"是代码文件所在的目录。 "protocol"表示Node.js使用的调试协议,请指定为"inspector"。 "localRoot" 表示函数源码所在的本地路径,其中${workspaceRoot}是VSCode的一个环境变量,表示您当前的工作空间路径,<FUNCTION_PATH> 是函数在当前工作空间的相对路径。 关于每个字段的详细解释和VS Code Debugger的更多用法,您可参考Node.js debugging in VS Code

          4. 在您的代码中打上断点,然后选择"Debug","Start Debugging" ,开始调试。

          调试Python函数

          1. 用VS Code打开工作目录bsam-app。
          2. 执行命令bsam local invoke -e event.json --debug-port 5890 bsam-app,这里指定容器暴露的调试端口为5890。
          3. 在VS Code的菜单栏中,选择"Debug" ,"Open Configurations",在打开的launch.json中编辑内容如下:

            {
                "version": "0.2.0",
                "configurations": [    
                    {
                       "name": "BSAM CLI Python Debug",
                       "type": "python",
                       "request": "attach",
                       "port": 5890,
                       "host": "localhost",
                       "pathMappings": [
                           {
                               "localRoot": "${workspaceFolder}/bsam-app/src",
                               "remoteRoot": "/var/task"
                           }
                       ]
                    }
                ]
             }

            其中,"port"字段值要和第二步中指定的端口保持一致,"localRoot"是代码文件所在的目录。 关于每个字段的详细解释和VS Code Debugger的更多用法,您可参考Python debugging in VS Code

          4. 在代码中添加断点,在VS Code菜单栏中选择"Debug","Start Debugging",程序会自动停在代码中的断点,开始调试。

          调试Java函数

          1. 用VS Code打开工作目录bsam-app。
          2. 执行命令bsam local invoke -e event.json --debug-port 8890 bsam-app,这里指定容器暴露的调试端口为8890。
          3. 在VS Code的菜单栏中,选择"Debug" ,"Open Configurations",在打开的launch.json中编辑内容如下:

            {
                "version": "0.2.0",
                "configurations": [
                    {
                        "type": "java",
                        "name": "Debug Java (Attach)",
                        "request": "attach",
                        "hostName": "localhost",
                        "port": 8890
                    }
                ]
            }

            其中,"port"字段值要和第二步中指定的端口保持一致。
            关于每个字段的详细解释和VS Code Debugger的更多用法,您可参考Debugging Java in VS Code

          4. 在您的代码中打上断点,然后选择"Debug","Start Debugging" ,开始调试。
          上一篇
          BCE-Serverless-Application-Model规范
          下一篇
          创建部署程序包