IBM Cloud FunctionsのCloudantトリガーを使ってアプリを実行する

##はじめに
[IBM Cloud FunctionsのPeriodicトリガーを使ってアプリを実行する](https://qiita.com/kenji_kanzaki/items/454027ee258254392d9f)に続いて、今回はCloudantトリガーを使ってアクション(Function)を実行するパターンを実装しました。
具体的にはCloudantデータベースの更新をトリガーし、コンソールにアクションが実行されたことを出力します。

##前提
* IBM Cloudが提供している2021/12/27時点の機能を用いています。
* コマンドは使用しません。UIのみで作業を行います。
* トリガー、アクションは未作成の状態です。


##テスト用Cloudantデータベースの作成
まずはテスト用のCloudantデータベースを作成します。
[Cloudantのカタログページ](https://cloud.ibm.com/catalog/services/cloudant)を表示します。
PlanはLite(Freeのプラン)を選択し"Create"ボタンを押下します。今回、他の項目はデフォルトのままです。
[リソース・リスト](https://cloud.ibm.com/resources)から、作成したCloudantデータベースを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2073396/18083c73-5fa8-50a4-094e-d14dbb2b9811.png)

"Launch Dashboard"ボタンを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2073396/5346bd14-6f28-32c1-ab3d-19cc8b98eab1.png)

"Create Database"を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2073396/b81d87f8-ac37-e025-cf9c-9de8ea0b3945.png)

Database nameに任意の値を入力し、"Create"ボタンを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2073396/7e9d456f-cd7e-23cd-6c8d-a22b4f94ecfc.png)

続いて、テストデータを作成します。
Create Documentボタンを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2073396/f4c6fb78-82af-750f-328b-4eff2c23e7c6.png)

エディタで任意のJSONを記述して、Create Documentボタンを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2073396/771b156e-a60b-93f9-52e9-fa0d017b173f.png)

一覧にデータが追加されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2073396/910322ca-f303-edfa-84f5-dbd453729535.png)
なお、行をクリックするとエディタが表示され、JSONを変更してSave Changesボタンを押下するとデータの更新が可能です。


##Cloudantトリガー&アクションの作成
[IBM Cloud Functions](https://cloud.ibm.com/functions/)のページに遷移します。　
 メニューの"トリガー"を選択し、表示された画面の"作成"ボタンを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2073396/e07f2a37-5736-29e7-64a8-f77fb6afaa48.png)


トリガーを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2073396/9212851f-4937-34da-dbff-d7625e7181dd.png)


Cloudantを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2073396/b272cee8-156e-56d2-6401-c7c254c37fd4.png)

表示された新規トリガー構成画面でトリガーの情報を入力します。

* トリガー名に任意の値を入力します。
* インスタンスにはテスト用に作成したClundantデータベースを選択します。

資格情報に「資格情報を作成してください」警告が出ているので、"資格情報を作成"リンクを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2073396/d11af59b-b0d4-cca9-75f3-6b3a59aaaa0a.png)

別タブでサービス資格情報画面が開かれので、"新規資格情報"ボタンを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2073396/10bf9308-b145-7f89-eb3f-0f2ca5b2a793.png)

資格情報の作成画面が表示されるので、デフォルトのまま"追加"ボタンを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2073396/70e178b6-a43f-ea3f-978d-35d7c1ed0229.png)

一覧に作成した資格情報が追加されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2073396/e19d0c42-a020-300c-2b7f-df570b7837f4.png)

元のタブに戻り、「最新表示」リンクを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2073396/c0bb2570-2cc9-3082-0ea2-7c28246eb77f.png)

作成した資格名が自動で設定されるので、"作成"ボタンを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2073396/38477722-a485-925d-1767-9acf911b0a82.png)

トリガーとトリガー発生時に実行するアクションを紐づけるため、"追加"を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2073396/a71d802b-85d5-3caf-6d29-edeac0f88e4f.png)

表示されたアクションの追加画面でアクションの情報を入力します。
今回はアクションを新規に作成するので"新規作成"を選択した状態で以下の入力を行います。

* 任意のアクション名を記入します。
* ランタイムは"Node.js 12"を選択します。
* "作成&追加"ボタンを押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2073396/a8b2dfb1-cecf-650b-2f42-b4e61504a4ba.png)

"接続されたアクション"の一覧に作成したアクションが追加されます。
 アクションのコードを書くため、作成したアクションの名前を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2073396/bfee337a-7c61-1fa0-d652-943c2f7ca26d.png)

コードエディターが表示されるので、function mainを以下の内容に変更し、"保存"ボタンを押下します。
<pre><code>
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() };
}
</code></pre>

なお、以下のページを参考にして、コードではイベントに含まれるパラメーターを取得し、コンソール出力するようにしました。
https://cloud.ibm.com/docs/openwhisk?topic=openwhisk-pkg_cloudant&locale=ja#cloudant_struct

##動作確認
####Cloudantデータベースの値を変更します。
[リソース・リスト](https://cloud.ibm.com/resources)から、作成したCloudantデータベースを選択します。
"Launch Dashboard"ボタンを押下します。
作成したテスト用データベースを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2073396/1bf090d5-36ce-b3e9-2f4c-700a7f2235c6.png)

"テスト用Cloudantデータベースの作成"で作成したテストデータを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2073396/8a5b1603-1bd9-9d30-ca44-baba248cdcb8.png)

データを変更(変更なしでも良い)し"Save Changes"ボタンを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2073396/9972606c-44c6-9094-c1bd-064408c3ab8e.png)

####トリガー&アクションが動いたことを確認します。
[IBM Cloud Functions](https://cloud.ibm.com/functions/)のページに遷移します。
メニューの"アクティブ化ダッシュボード"を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2073396/1358069c-e887-a205-7f84-12f6c526e9a3.png)

アクティベーション・ダッシュボード画面が表示され、アクティベーション・ログにトリガーの発生とアクションの実行が記録されていることが確認できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2073396/40fa7e62-6d3c-95b5-6e2f-61022c44d3b3.png)