使用IBM Cloud Functions的序列,以命令方式构建和执行应用程序
首先
在之前发布的文章《使用IBM Cloud Functions序列执行应用程序》中,我仅使用了UI进行操作。
而在本文中,我们将使用命令来执行上述操作。
前提 tí)
-
- IBM Cloudが提供している2022/11/16時点の機能を用いています。
-
- テスト用Cloudantデータベースが作成されている。
- 「IBM Cloud FunctionsのCloudantトリガーを使ってアプリを実行する(コマンドを使って構築)
准备就绪
-
- 请按照链接中的步骤,安装IBM Cloud命令行界面(CLI)。
-
- 请按照链接中的步骤,安装Cloud Functions插件。
- 请按照第二步的指示,登录IBM Cloud并指定目标命名空间。
创建用于将数据存储到Cloudant数据库的序列。
创建Acion
创建一个名为prepareEntityForSaveCmd.js的Javascript文件,其内容如下。
function main(params) {
if (!params.name || !params.comment) {
return Promise.reject({ error: 'no name or comment'});
}
return {
doc: {
createdAt: new Date(),
name: params.name,
email: params.email,
comment: params.comment
}
};
}
从JavaScript文件中创建动作。
ibmcloud fn action create prepareEntityForSaveCmd prepareEntityForSaveCmd.js
ok: created action prepareEntityForSaveCmd
显示动作列表,并确认已创建了3个动作。
ibmcloud fn action list
actions
<NAMESPACE>/prepareEntityForSaveCmd private nodejs:16
创建序列
我要创建一个名为SaveEntitySequenceCmd的序列,其中按照以下顺序执行Action。
-
- 使用上述创建的prepareEntityForSaveCmd
- 在使用IBM Cloud Functions的Cloudant触发器执行应用程序时,将绑定到包含在sampleCloudant中的create-document Action中。
ibmcloud fn action create SaveEntitySequenceCmd --sequence prepareEntityForSaveCmd,sampleCloudant/create-document
ok: created action SaveEntitySequenceCmd
确认已创建了序列。
ibmcloud fn action list
actions
<NAMESPACE>/SaveEntitySequenceCmd private sequence
确认运行
确认已生成的序列正在运行并且数据已成功注册。
ibmcloud fn action invoke SaveEntitySequenceCmd -p name "Taro Tanaka" -p email "taro@sample.com" -p comment "this is Taro's comment."
ok: invoked /_/SaveEntitySequenceCmd with id XXXXXXXXXXXXXXXXXXXXXXX
我将检查激活日志。
ibmcloud fn activation list
Datetime Activation ID Kind Start Duration Status Entity
2022-11-22 22:47:31 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX nodejs:12 cold 1.001s success <NAMESPACE>/create-document:0.0.548
2022-11-22 22:47:31 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX nodejs:16 cold 34ms success <NAMESPACE>/prepareEntityForSaveCmd:0.0.1
2022-11-22 22:47:31 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX sequence warm 1.267s success <NAMESPACE>/SaveEntitySequenceCmd:0.0.1
创建一个用于查看Cloudant数据库数据的序列。
创建Acion
创建两个操作。
创建第一个操作。创建一个名为setResultInputCmd.js的Javascript文件,其内容如下。
function main(params) {
return {
params: {
include_docs: true
}
};
}
从Javascript文件中创建动作。
ibmcloud fn action create setResultInputCmd setResultInputCmd.js
ok: created action setResultInputCmd
创建第二个动作。创建以下内容的Javascript文件formatEntityCmd.js。
const md5 = require('spark-md5');
function main(params) {
return {
entries: params.rows.map((row) => { return {
name: row.doc.name,
email: row.doc.email,
comment: row.doc.comment,
createdAt: row.doc.createdAt,
icon: (row.doc.email ? `https://secure.gravatar.com/avatar/${md5.hash(row.doc.email.trim().toLowerCase())}?s=64` : null)
}})
};
}
从JavaScript文件中创建一个动作。
ibmcloud fn action create formatEntityCmd formatEntityCmd.js
ok: created action formatEntityCmd
展示动作列表,并确保所创建的动作已被创建。
ibmcloud fn action list
actions
<NAMESPACE>/formatEntityCmd private nodejs:16
<NAMESPACE>/setResultInputCmd private nodejs:16
创建序列
我们将按照以下顺序创建执行Action的序列ReadEntitySequenceCmd。
-
- 使用上述的setResultInputCmd
-
- 以使用IBM Cloud Functions的Cloudant触发器来执行应用程序(使用命令构建)并绑定到包含在sampleCloudant中的list-documents Action的包。
- 使用上述的formatEntityCmd进行操作。
ibmcloud fn action create ReadEntitySequenceCmd --sequence setResultInputCmd,sampleCloudant/list-documents,formatEntityCmd
ok: created action ReadEntitySequenceCmd
确认已创建了序列。
ibmcloud fn action list
actions
<NAMESPACE>/ReadEntitySequenceCmd private sequence
确认运行
确认创建的序列正在运行,并且数据可以被访问。
ibmcloud fn action invoke ReadEntitySequenceCmd -r
{
"entries": [
{
"comment": "this is Hanako's comment",
"createdAt": "2022-08-30T12:00:17.584Z",
"email": "hanako@sample.com",
"icon": "https://secure.gravatar.com/avatar/190f9f022b4bfb762e152f1c3d6dd35a?s=64",
"name": "Hanako Suzuki"
},
{
"comment": "this is Taro's comment.",
"createdAt": "2022-11-22T13:47:31.157Z",
"email": "taro@sample.com",
"icon": "https://secure.gravatar.com/avatar/4179319e919e011a1aec1ca4d34100b1?s=64",
"name": "Taro Tanaka"
}
]
}
执行SaveEntitySequenceCmd命令后,我们成功获取到包含已注册数据的数据。接下来,我们将查看激活日志。
ibmcloud fn activation list
Datetime Activation ID Kind Start Duration Status Entity
2022-11-22 23:04:15 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX nodejs:16 cold 32ms success <NAMESPACE>/formatEntityCmd:0.0.1
2022-11-22 23:04:13 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX nodejs:12 cold 1.994s success <NAMESPACE>/list-documents:0.0.547
2022-11-22 23:04:13 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX nodejs:16 cold 68ms success <NAMESPACE>/setResultInputCmd:0.0.1
2022-11-22 23:04:13 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX sequence warm 2.315s success <NAMESPACE>/ReadEntitySequenceCmd:0.0.1
我可以确认顺序和每个动作都已经执行了。