LoginSignup
0
0

More than 1 year has passed since last update.

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

Posted at

はじめに

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

前提

  • IBM Cloudが提供している2022/11/16時点の機能を用いています。
  • テスト用Cloudantデータベースが作成されている。

準備

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

Acionの作成

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

outputInvokedLogForCloudantCmd.js
function main(params) {
    var date = new Date();
    var changes = params.changes;
    console.log("Invoked at: " + date.toLocaleString());
    console.log("param dbname: " + params.dbname);
    console.log("param id: " + params.id);
    console.log("param seq: " + params.seq);
    for (var change of changes) {
        console.log("rev: " + change.rev);
    }
    return { message: 'Invoked at: ' + date.toLocaleString() };
}

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

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

アクションの一覧を表示し、アクションが作成されていることを確認します。

ibmcloud fn action list
actions
<NAMESPACE>/outputInvokedLogForCloudantCmd   private nodejs:16

Triggerの作成

Cloudantのデータ更新をトリガーとするため、該当するフィードを公開されたパッケージから探します。
公開されたパッケージの一覧を取得します。

ibmcloud fn package list /whisk.system
packages
/whisk.system/cloudant                                                 shared
/whisk.system/utils                                                    shared
/whisk.system/samples                                                  shared
/whisk.system/websocket                                                shared
/whisk.system/weather                                                  shared
/whisk.system/slack                                                    shared
/whisk.system/cos                                                      shared
/whisk.system/messaging                                                shared
/whisk.system/alarms                                                   shared

/whisk.system/cloudantに含まれるフィードを確認します。

ibmcloud fn package get --summary /whisk.system/cloudant
package /whisk.system/cloudant: Cloudant database service
   (parameters: *apihost, *bluemixServiceName, dbname, host, iamApiKey, iamUrl, overwrite, password, username)
                             :
 feed   /whisk.system/cloudant/changes: Database change feed
   (parameters: dbname, filter, iamApiKey, iamUrl, query_params)

/whisk.system/cloudant/changes フィードを使ってトリガーを作成します。
このフィードを実行するには資格情報(iamApiKey)などが必要です。実行の都度パラメータを渡すのを避けるため、パッケージのバインドを行います。

パラメータに設定する値を確認します。
まずはテスト用Cloudantデータベースのインスタンスを確認します。

ibmcloud resource service-instances
OK
名前          ロケーション   状態     タイプ             リソース・グループ ID
Cloudant-7v   us-south       active   service_instance   XXXXXXXXXXXXXXXXXXX

テスト用Cloudantデータベースのインスタンスで利用している資格情報を確認します。

ibmcloud resource service-keys --instance-name Cloudant-7v
OK
名前                 状態     作成日時
サービス資格情報-1   active   Mon Dec 27 06:17:08 UTC 2021
ibmcloud resource service-key  サービス資格情報-1
名前:       サービス資格情報-1
ID:         crn:v1:bluemix:public:cloudantnosqldb:us-south:a/707977742b81692deed713861fc5108c:07c8055f-2487-47e2-8ba7-3a9c42ed7af5:resource-key:b2b2f23c-4270-43ee-8b0a-6213ffe8fdb8
作成日時:   Mon Dec 27 06:17:08 UTC 2021
状態:       active
資格情報:
            apikey:                   XXXXXX
            host:                     XXXX-bluemix.cloudantnosqldb.appdomain.cloud
            iam_apikey_description:   Auto-generated for key crn:v1:bluemix:public:cloudantnosqldb:us-south:xxxxx
            iam_apikey_name:          サービス資格情報-1
            iam_role_crn:             crn:v1:bluemix:public:iam::::serviceRole:Manager
            iam_serviceid_crn:        crn:v1:bluemix:public:iam-identity::xxxxxx
            url:                      https://XXXX-bluemix.cloudantnosqldb.appdomain.cloud
            username:                 XXXX-bluemix

テスト用Cloudantデータベースのデータベース名を確認します。
今回はUIから確認しました。
image.png

パッケージにバインドし、デフォルトのパラメータ値を設定します。

ibmcloud fn package bind /whisk.system/cloudant sampleCloudant --param host <資格情報:host> --param iamApiKey <資格情報:apikey> --param dbname <テスト用Cloudantデータベースのデータベース名>
ok: created binding sampleCloudant

トリガーを作成します。

ibmcloud fn trigger create updatCloudantFunctionsSampleCmd --feed sampleCloudant/changes
ok: created trigger updatCloudantFunctionsSampleCmd

トリガーの一覧を表示し、トリガーが作成されていることを確認します。

ibmcloud fn trigger list
triggers
<NAMESPACE>/updatCloudantFunctionsSampleCmd         private

Ruleの作成および動作確認

ActionとTriggerを紐づけるRuleを作成します。

ibmcloud fn rule create updatCloudantFunctionsSampleCmdRule updatCloudantFunctionsSampleCmd outputInvokedLogForCloudantCmd
ok: created rule updatCloudantFunctionsSampleCmdRule

Ruleの一覧を表示し、Ruleが作成されていることを確認します。

ibmcloud fn rule list
rules
<NAMESPACE>/updatCloudantFunctionsSampleCmdRule       private          active

動作確認を行うために、テスト用Cloudantデータベースに格納されたデータを更新します。
今回はUIを使って更新します。データを変更(変更なしでも良い)し"Save Changes"ボタンを押下します。
image.png

テスト用Cloudantデータベースのデータが更新されたので、アクティベーションを確認しActionが実行されていることを確認します。

ibmcloud fn activation list
Datetime            Activation ID                    Kind      Start Duration   Status            Entity
2022-11-20 19:44:51 e2e55d3d8afd4f33a55d3d8afd1f3303 nodejs:16 cold  58ms       success           <NAMESPACE>/outputInvokedLogForCloudantCmd:0.0.1
2022-11-20 19:44:51 2446cbc266ab443886cbc266ab0438b3 trigger   warm  0s         success           <NAMESPACE>/updatCloudantFu...onsSampleCmd:0.0.1
0
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
0
0