IBM Cloud: Event NotificationsでAPIをsource/webhookをdestinationとした通知構成例

# 1. はじめに
IBM Cloud Event Notificationでは、IBM Cloudのサービスをsourceとすることも可能だが、APIをsource（カスタムイベント）とすることも可能である。
https://cloud.ibm.com/docs/event-notifications?topic=event-notifications-en-source
今回は、APIをsourceとし、destinationをwebhookとした以下のような設定の手順を示す。

```
通知元 ->  (API) -> Event Notofication -> (webhook) -> 監視サーバー
```


# 2. 手順

## 2-1. Event Notificationを注文する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/54dac37d-b0da-d362-c845-35b6e547855e.png)

## 2-2. sourceを作成

- API sourceを選択。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/4ed6660e-e70e-407a-ba41-54720bc841be.png)
- Event Notification URLを記録しておく(API呼び出し時に利用）。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/0e7064dd-7bd4-9ba3-ca21-7831979dd304.png)
- source作成後、今回作成したsourceに対するsourceIDを記録しておく(API呼び出し時に利用）。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/8f00a4eb-5de2-1e0e-7a0e-6502750f00e6.png)

## 2-3. topicを作成。
- 先ほど作成したsourceを指定。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/69bf0af2-a3ef-e474-947b-29edabe161fe.png)

## 2-4. destinationを作成
- destination typeとしてWebhookを指定する。webhookの転送先URLを指定する。
ここでは、[Webhook.siteのインストール方法](https://qiita.com/testnin2/items/a31bcb1a67370d3eea62)で作成した、`http://<IP address>:8084/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`を指定する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/e8329a97-4120-0a28-9f3c-74134c446e83.png)

## 2-5. subscriptionを作成。
- 先ほど作成した、topicおよびdestinationを登録する。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/48997b89-5469-37de-17fa-c6e9add2ae86.png)


# 3. 通知元でのAPI呼び出し例

- IAM Tokenの取得方法は[ここ](https://qiita.com/testnin2/items/3a4ca8a1a2b79b713c48)も参考。
- [API情報](https://cloud.ibm.com/apidocs/event-notifications#send-notifications)
    - Request Bodyとして、必須項目が結構ある。以下が必須項目
        - `specversion`
        - `id`
        - `source`
        - `type`
        - `ibmensourceid`
        - `ibmendefaultshort`
        - `ibmendefaultlong`



```
$ cat en.json
{
   "specversion": "3",
   "id": "1",
   "source": "1",
   "type": "1",
   "ibmensourceid": "d5620ecd-3854-4f21-b1fa-a5cb66b7b83b:api",
   "ibmendefaultshort": "1",
   "ibmendefaultlong": "3000"
}
```

```txt:Event Notificationの実行。URLは、source画面に記載あり。
$ iam_token=`ibmcloud iam oauth-tokens | awk '{printf $4}'`
$ curl -X POST -L -H "Authorization: Bearer ${iam_token}" -H 'Content-type: application/json' -d '@en.json' https://eu-de.event-notifications.cloud.ibm.com/event-notifications/v1/instances/<instance ID>/notifications
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/0e7064dd-7bd4-9ba3-ca21-7831979dd304.png)

もしくは

```
[root@new-syasuda-tok1-vpc1 ~]# export IBMCLOUD_EN_ENDPOINT=https://eu-de.event-notifications.cloud.ibm.com/event-notifications
[root@new-syasuda-tok1-vpc1 ~]# ibmcloud event-notifications send-notifications --instance-id <instance ID> --body '{"subject": "This is test", "id": "1", "specversion": "3", "ibmensourceid":"d5620ecd-3854-4f21-b1fa-a5cb66b7b83b:api", "source": "1", "type": "1", "ibmendefaultshort":"1", "ibmendefaultlong":"3000"}'
...

notification_id   d6ae7e4b-c7da-455b-a649-75db96648371
```




以下は[ここ](https://qiita.com/testnin2/items/a31bcb1a67370d3eea62)で作成した、Webhook.site環境に送付した際の実行例。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/9d04a830-29d5-f88c-e3b3-856882b3599d.png)