1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

IBM Cloud Functionsのシーケンスを使ってアプリを実行する(コマンドを使って構築)

Posted at

はじめに

以前に投稿した記事「IBM Cloud Functionsのシーケンスを使ってアプリを実行する」では、UIのみで作業を行いました。
本記事では上述の作業をコマンドを利用して行います。

前提

準備

  1. リンク先の手順に従って、IBM Cloud コマンド・ライン・インターフェース (CLI) をインストールします。
  2. リンク先の手順に従って、Cloud Functions プラグインをインストールします。
  3. 2の手順に従い、IBM Cloudへのログインし名前空間のターゲットを指定します。

Cloudantデータベースにデータを登録するシーケンスの作成

Acionの作成

次の内容のJavascriptファイルprepareEntityForSaveCmd.jsを作成します。

prepareEntityForSaveCmd.js
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

シーケンスの作成

以下の順番にActionが実行されるシーケンスSaveEntitySequenceCmdを作成します。

  1. 上述で作成したprepareEntityForSaveCmd
  2. 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

シーケンスと各Actionが実行されていることが確認できました。
念のためCloudantにデータが登録されていることを画面から確認します。
image.png

Cloudantデータベースのデータを参照するシーケンスの作成

Acionの作成

Actionを2つ作成します。
1つ目のActionを作成します。次の内容のJavascriptファイルsetResultInputCmd.jsを作成します。

setResultInputCmd.js
function main(params) {
  return {
    params: {
      include_docs: true
    }
  };
}

Javascriptファイルからアクションを作成します。

ibmcloud fn action create setResultInputCmd setResultInputCmd.js
ok: created action setResultInputCmd

2つ目のActionを作成します。次の内容のJavascriptファイルformatEntityCmd.jsを作成します。

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
  2. IBM Cloud FunctionsのCloudantトリガーを使ってアプリを実行する(コマンドを使って構築)でバインドしたパッケージsampleCloudantに含まれるlist-documents Action
  3. 上述で作成した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

シーケンスと各Actionが実行されていることが確認できました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?