使用IBM Cloud Functions的序列,以命令方式构建和执行应用程序

首先

在之前发布的文章《使用IBM Cloud Functions序列执行应用程序》中,我仅使用了UI进行操作。
而在本文中,我们将使用命令来执行上述操作。

前提 tí)

    • IBM Cloudが提供している2022/11/16時点の機能を用いています。

 

    • テスト用Cloudantデータベースが作成されている。

 

    「IBM Cloud FunctionsのCloudantトリガーを使ってアプリを実行する(コマンドを使って構築)

准备就绪

    1. 请按照链接中的步骤,安装IBM Cloud命令行界面(CLI)。

 

    1. 请按照链接中的步骤,安装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。

    1. 使用上述创建的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
image.png

创建一个用于查看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。

    1. 使用上述的setResultInputCmd

 

    1. 以使用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

我可以确认顺序和每个动作都已经执行了。

广告
将在 10 秒后关闭
bannerAds