はじめに
以前に投稿した記事「IBM Cloud FunctionsのCloudantトリガーを使ってアプリを実行する」では、UIのみで作業を行いました。
本記事では上述の作業をコマンドを利用して行います。
前提
- IBM Cloudが提供している2022/11/16時点の機能を用いています。
- テスト用Cloudantデータベースが作成されている。
準備
- リンク先の手順に従って、IBM Cloud コマンド・ライン・インターフェース (CLI) をインストールします。
- リンク先の手順に従って、Cloud Functions プラグインをインストールします。
- 2の手順に従い、IBM Cloudへのログインし名前空間のターゲットを指定します。
Acionの作成
次の内容のJavascriptファイル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から確認しました。
パッケージにバインドし、デフォルトのパラメータ値を設定します。
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"ボタンを押下します。
テスト用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