前言

fcli 是阿里云函数计算的命令行工具,官方文档,功能一览:

image.png

准备

1、下载:github连接

fcli-v1.0.2-darwin-amd64.zip
fcli-v1.0.2-linux-amd64.zip
fcli-v1.0.2-win-386.zip

2、配置信息

初次使用可能会让输入各种参数,如果之前在fun里面配置过,这里就可以忽略。
用户可以通过 ~/.fcli/config.yaml 进行查看和更改

3、进入命名行

  1. ./fcli shell

通用操作

  1. cd serviceName //进入相应serviceName服务的目录下
  2. ls //在service目录下ls,列出当前serviceName的服务下的所有函数的名称
  3. pwd
  4. info funName // 查看所有信息
  5. rm funName
  6. clear 清屏
  7. exit 退出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' \
  3. -p my-log-project \
  4. -l my-log-store \
  5. -r acs:ram::myID:role/myRoleName
  6. //新建服务,其中描述信息为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 \
  2. -d 'my description' \
  3. -p my-log-project \
  4. -l my-log-store \
  5. -r acs:ram::myID:role/myRoleName
  6. //更新服务,其中描述信息为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 函数。
  • -e --initializationTimeout int32 初始化函数超时时间(默认 30s)
  • -i --initializer string 设置初始化函数
  • -m --memory int32 设置函数执行的内存大小。
  • -t --runtime string 指定语言类型。
  • --timeout int32 函数超时时间(默认 30s)
  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:12345678:myBucketName
  • -c —trigger-config string 设置 trigger 配置文件
  • -t —type string 触发器类型,默认是 oss

OSS Trigger 的创建:

  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::12345678:role/AliyunOSSEventNotificationRole -s acs:oss:cn-shanghai:12345678: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

HTTP Trigger 的创建:

  1. >>> mkt myFunction/myFunctionTrigger -t http -c code/httpTrigger.yaml
  2. //其中yaml的文件内容如下
  3. triggerConfig:
  4. authType: anonymous
  5. methods:
  6. - GET

2. upt 更新触发器

  • -r —invocation-role string 设置触发角色
  • -s —source-arn string 事件源的资源符号,例如acs:oss:cn-shanghai:12345678:myBucketName
  • -c —trigger-config string 设置trigger配置文件
  • -t —type string 触发器类型,默认是oss
  1. >>> upt myFunction/myFunctionTrigger \
  2. -t oss \
  3. -r acs:ram::account_id:role/AliyunOSSEventNotificationRole \
  4. -s acs:oss:cn-region:account_id:bucketName \
  5. -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 \
  2. -a '["oss:GetObject", "oss:PutObject"]' \
  3. -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