全部产品
阿里云办公

fcli

更新时间:2018-05-30 11:59:26

fcli 是阿里云函数计算的命令行工具,帮助您便捷的管理函数计算中的资源。本手册作为一份详细的使用文档,以便开发者需要时查阅。开发者也可以通过 fcli --help 操作来查看命令的详细信息。

注意:

  • 本手册主要提供了 fcli 交互模式下的命令帮助信息。fcli 也提供了完整的非交互模式命令。
  • 执行 fcli shell 进入交互模式。

初次使用fcli

您可以在这里下载fcli,在fcli可执行文件所在的文件夹下,./fcli shell 进入交互模式。如果您是第一次使用,请按照提示信息输入配置信息。

  1. Please input the endpoint (example: https://account_id.cn-shanghai.fc.aliyuncs.com):
  2. https://123456.cn-shanghai.fc.aliyuncs.com
  3. Please input the access key id: access key idaccess key secret 在阿里云控制台的右上角->小人头像->accesskeys即可获取)
  4. fakeaccesskeyid
  5. Please input the access key secret:
  6. fakeaccesskeysecret
  7. Store the configuration in: /Users/testuser/.fcli
  8. Welcome to the function compute world. Have fun!
  9. >>>

也可以去~/.fcli/config.yaml中直接修改。

  1. endpoint: https://account_id.cn-shanghai.fc.aliyuncs.com
  2. api_version: 2016-08-15
  3. access_key_id: fakeaccesskeyid
  4. access_key_secret: fakeaccesskeyid
  5. security_token: ""
  6. user_agent: fcli-0.1
  7. debug: false
  8. timeout: 60
  9. sls_endpoint: cn-shanghai.log.aliyuncs.com

通用操作

1. cd 目录跳转命令

  • cd为切换 FC 的实体的层次关系,而不是在本地目录下切换。比如,cd到serviceName下就可以看到当前service下所有的函数,cd到functionName下就可以看到当前function下的所有触发器
  1. >>> cd serviceName //进入相应serviceName服务的目录下
  2. >>> ls //在service目录下ls,列出当前serviceName的服务下的所有函数的名称
  3. >>> cd functionName //进入相应functionName函数的目录下
  4. >>> ls //在function目录下ls,列出当前functionName的服务下的所有触发器的名称

2. ls 列出当前目录下文件

  • -l —limit int32 指定列出文件的最大数目(默认是100)
  • -t —next-token string 列出名字从next-token开始的文件
  • -p —prefix string 列出指定前缀的文件
  • -k —start-key string 列出名字从此文件名开始的文件
  1. >>> cd myService
  2. >>> ls
  3. aFunction
  4. bFunction
  5. cFunction
  6. cFuncion2
  7. dFunction
  8. eFunction
  9. >>> ls -l 4 //指定列出文件的最大数目为4
  10. aFunction
  11. bFunction
  12. cFunction
  13. cFuncion2
  14. NextToken: dFunction
  15. >>> ls -t dFunction //列出名字从dFunction开始的文件
  16. dFunction
  17. eFunction
  18. >>> ls -p c //列出前缀为c的文件
  19. cFunction
  20. cFuncion2
  21. >>> ls -k dFunction //列出名字从dFunction开始的文件
  22. dFunction
  23. eFunction

3. pwd 查看当前所在目录

查看当前所在目录

4. info 查看资源的详细信息

  • 参数可以是服务名称serviceName,函数名称funcionName,触发器名称triggerName等。
  1. >>> info serviceName //查看此服务的详细信息
  2. >>> info functionName //查看此函数的详细信息
  3. >>> info triggerName //查看此触发器的详细信息

5. config 配置fcli

  • 可以更改config.yaml中的配置信息
  1. >>> config --access-key-id 12345678 //修改access-key-id为12345678

6. rm 删除资源

  • 删除函数前需要保证函数下没有触发器,删除服务前需要保证服务下没有函数。
  • -f —forced 删除前无需确认。
  1. >>> rm myFunction //删除资源前需要确认
  2. Do you want to remove the resource /fc/myService/myFunction [y/n]:
  3. >>> rm -f myFunction //删除资源前无需确认,直接删除

7. sbox

fcli为您提供了一个本地的沙盒环境,和函数计算服务中的函数运行环境保持一致。在沙盒环境中,您可以方便的安装第三方库,进行本地调试等操作。

  • -d —code-dir string 指定代码所在目录,它将被挂载到沙盒环境的”/code”位置。
  • -t —runtime string 指定语言类型。
  1. >>> sbox -d code -t nodejs6 //在code目录下安装依赖,语言为nodejs6
  2. Entering the container. Your code is in the /code direcotry.
  3. root@df9fc6428140:/code# npm init -f //nodejs6需要生成package.json
  4. npm info it worked if it ends with ok
  5. npm info using npm@3.10.10
  6. npm info using node@v6.10.3
  7. npm WARN using --force I sure hope you know what you are doing.
  8. Wrote to /code/package.json:
  9. {
  10. "name": "code",
  11. "version": "1.0.0",
  12. "description": "",
  13. "main": "index.js",
  14. "dependencies": {
  15. "jimp": "^0.2.28"
  16. },
  17. "devDependencies": {},
  18. "scripts": {
  19. "test": "echo \"Error: no test specified\" && exit 1"
  20. },
  21. "keywords": [],
  22. "author": "",
  23. "license": "ISC"
  24. }
  25. npm info init written successfully
  26. npm info ok
  27. root@df9fc6428140:/code# npm install jimp //安装jimp依赖库
  28. npm info it worked if it ends with ok
  29. ...
  30. npm info lifecycle jimp@0.2.28~postinstall: jimp@0.2.28
  31. code@1.0.0 /code
  32. -- jimp@0.2.28
  33. npm WARN code@1.0.0 No description
  34. npm WARN code@1.0.0 No repository field.
  35. npm info ok
  36. root@df9fc6428140:/code# exit //退出sbox环境
  37. exit

8. help

  • help 可以列出所有的命令
  • command --help 列出此操作下的所有参数的介绍

9. clear 清屏

清屏

10. exit 退出fcli

退出fcli

Service 相关命令

1. mks 创建服务

  • -d —description string 描述信息。
  • -p —log-project string 指定服务对应的日志项目log project。
  • -l —log-store string 指定服务对应的日志项目的log store。
  • -r —role string 指定服务对应的角色。
  1. >>> mks myService //新建一个服务,不带任何高级配置内容
  2. >>> mks myService -d 'my description' -p my-log-project -l my-log-store -r acs:ram::myID:role/myRoleName //新建服务,其中描述信息为my description,日志项目为my-log-project,日志存储my-log-store,角色为myRoleName

2. ups 更新服务

  • 参数与mks的参数完全相同
  • -d —description string 描述信息
  • -p —log-project string 指定服务对应的日志项目log project
  • -l —log-store string 指定服务对应的日志项目的log store
  • -r —role string 指定服务对应的角色
  1. >>> ups myService -d 'my description' -p my-log-project -l my-log-store -r acs:ram::myID:role/myRoleName //更新服务,其中描述信息为my description,日志项目为my-log-project,日志存储my-log-store,角色为myRoleName

Function 相关命令

1. mkf 创建函数

  • -b —code-bucket string 代码所在的oss bucket。
  • -o —code-object string 指定了代码在bucket中的object key。
  • -d —code-dir string 代码所在的目录。
  • -f —code-file string 压缩的代码文件。
  • -h —handler string 设置函数handler,handler 格式为“文件名.函数名”。例如 hello_world.handler 指定了函数的调用入口为 hello_world.js 文件中的 handler 函数。
  • -m —memory int32 设置函数执行的内存大小。
  • -t —runtime string 指定语言类型。
  1. // 在相应service目录下
  2. >>> mkf myFunction -t nodejs6 -h myFunction.handler -b ossBucketName -o objectKey //代码存储在oss上,-t指定runtime,-h指定函数入口,-b指定代码所在的oss bucket,-o 指定了代码在bucket中的object key
  3. >>> mkf myFunction -t nodejs6 -h myFunction.handler -d codeDir/myFunction -m 512 //代码存储在本地,-d指定了代码所在目录,-m设置函数执行的内存大小
  4. >>> mkf myFunction -h myFunction.handler -f code.zip -t nodejs6 //代码在本地的code.zip中

2. upf 更新函数

  • 参数与mkf的参数完全相同
  • -b —code-bucket string 代码所在的oss bucket
  • -o —code-object string 指定了代码在bucket中的object key
  • -d —code-dir string 代码所在的目录
  • -f —code-file string 压缩的代码文件
  • -h —handler string 设置函数handler,handler 格式为“文件名.函数名”。例如 hello_world.handler 指定了函数的调用入口为 hello_world.js 文件中的 handler 函数
  • -m —memory int32 设置函数执行的内存大小
  • -t —runtime string 指定语言类型
  1. // 在相应service目录下
  2. >>> upf myFunction -t nodejs6 -h myFunction.handler -b ossBucketName -o objectKey //代码存储在oss上,-t指定runtime,-b指定代码所在的oss bucket,-o 指定了代码在bucket中的object key
  3. >>> upf myFunction -t nodejs6 -h myFunction.handler -d codeDir/myFunction -m 512 //代码存储在本地,-d指定了代码所在目录,-m设置函数执行的内存大小
  4. >>> upf myFunction -h myFunction.handler -f code.zip -t nodejs6 //代码在本地的code.zip中

3. invk 触发函数执行

  • -e —encode 对函数的返回值进行base64编码。
  • -f —event-file string 从文件中读取触发事件内容。
  • -s —event-str string 从字符串中读取触发事件内容。
  • -o —output-file string 将返回结果写入文件的文件名称。
  • -t —type string 触发类型,Sync/Async同步触发或者异步触发函数,默认是Sync。
  1. >>> invk myFunction //如果不需要输入参数,不需要触发事件的话,直接invoke就可以
  2. >>> invk myFunction -e //对函数的返回值进行base64编码
  3. >>> invk myFunction -s 'hello,world'//从字符串中读取触发事件内容
  4. >>> invk myFunction -f event.json //从文件中读取触发事件内容
  5. >>> invk myFunction -o code/result.txt //将返回结果写入result.txt文件中
  6. >>> invk myFunction -t Async //设置触发类型为异步触发

Trigger 相关命令

1. mkt 创建触发器

  • -r —invocation-role string 设置触发角色
  • -s —source-arn string 事件源的资源符号,例如acs:oss:cn-shanghai:1671011226853360:myBucketName
  • -c —trigger-config string 设置trigger配置文件
  • -t —type string 触发器类型,默认是oss
  1. >>> mkt myFunction/myFunctionTrigger -t oss -r acs:ram::account_id:role/AliyunOSSEventNotificationRole -s acs:oss:cn-region:account_id:bucketName -c code/trigger.yaml
  2. //Example
  3. >>> mkt myFunction/myFunctionTrigger -t oss -r acs:ram::1671011226853360:role/AliyunOSSEventNotificationRole -s acs:oss:cn-shanghai:1671011226853360:myOssBucket -c code/ossTrigger.yaml
  4. //其中yaml的文件内容如下
  5. triggerConfig:
  6. events:
  7. - oss:ObjectCreated:PutObject
  8. - oss:ObjectRemoved:DeleteObject
  9. filter:
  10. key:
  11. prefix: myPrefix
  12. suffix: mySuffix

2. upt 更新触发器

  • -r —invocation-role string 设置触发角色
  • -s —source-arn string 事件源的资源符号,例如acs:oss:cn-shanghai:1671011226853360:myBucketName
  • -c —trigger-config string 设置trigger配置文件
  • -t —type string 触发器类型,默认是oss
  1. >>> upt myFunction/myFunctionTrigger -t oss -r acs:ram::account_id:role/AliyunOSSEventNotificationRole -s acs:oss:cn-region:account_id:bucketName -c code/trigger.yaml

log 相关命令

1. mkl

  • 创建函数服务service对应的日志项目log project和日志库log store
  • -p 创建日志项目log project
  • -s 创建日志库log store
  1. >>> mkl -p my-log-project -s my-log-store myService
  2. // 为服务新建日志项目和日志库
  3. // 注意: log project的名字是全局唯一的,如果此名字被其他人占有了,那么会创建失败

2. logs 查看日志

  • -c —count int 设置返回日志数目的最大行数(默认是1000行)
  • -d —duration int 返回从这段时间之前一直到现在的函数日志,单位为秒(默认是86400,即24h)
  • -e —end string 设置查看日志的截止时间,格式为UTC RFC3339,例如2017-01-01T01:02:03Z
  • -s —start string 设置查看日志的起始时间,格式为UTC RFC3339,例如2017-01-01T01:02:03Z
  • -t —tail 设置从倒数第i行开始打印日志
  1. // 在相应service目录下
  2. logs myFunction //默认打印一天内的前1000条日志
  3. logs -d 60 -c 5000 myFunction //打印一分钟内执行的日志,最多打印5000条
  4. logs -t -c 100 myFunction // 打印倒数100行日志
  5. logs -s 2018-01-22T18:00:00Z -e 2018-01-22T19:00:00Z myFunction //打印从2018-01-22T18:00:00Z到2018-01-22T19:00:00Z的函数日志信息

角色授权相关命令

1. mkrp 创建ram policy

  • -a —action string 设置policy的操作名称
  • -r —resource string 设置policy的操作对象
  • policy详细信息可参考Policy语法结构
  1. mkrp myPolicy -a '["oss:GetObject", "oss:PutObject"]' -r '"*"' //新建policy,对所有资源有oss的GetObject和PutObject权限

2. mksr 创建函数计算对应的角色

  • 函数计算服务可以使用此角色去访问云资源
  1. mksr roleName

3. attach 将ram策略赋予角色

  • -p ram策略
  • -r ram角色
  1. attach -p /ram/policies/myPolicy -r /ram/roles/myRole //将myPolicy策略赋予myRole角色

4. detach 为ram角色解除策略授权

  • -p —policy string ram策略
  • -r —role string ram角色
  1. detach -p /ram/policies/myPolicy -r /ram/roles/myRole //为myRole角色解除myPolicy授权

5. grant 为函数计算服务授权

  1. grant myService
  2. Please input the role name:
  3. myRole
  4. Please input the policy name:
  5. myPolicy
  6. Permission grant scenarios:
  7. 1. Allow FC write function logs to your log store.
  8. 2. Allow FC copy code from your OSS location.
  9. Please input your choice [1-2]:
  10. 1
  11. Please input the log project: my-log-project
  12. Please input the log store: my-log-store

开发者指南的服务管理,函数管理,触发器管理等文档中,您能看到更详细的讲解和示例。遇到的问题欢迎去项目中讨论。