【さくらのクラウドAPI】/commonserviceitemで共通サービス（シンプル監視、ローカルルータなど）を絞ってGETする方法

## 概要

さくらのクラウドAPIを叩いて共通サービス（シンプル監視、ローカルルータなど）の一覧および対象サービスに絞ってGETする方法を記載します。

https://developer.sakura.ad.jp/cloud/api/1.1/appliance/#get_commonserviceitem

### 必要なもの

1. **curlが実行できるターミナル**
  - Windows, Mac, LinuxどのOSでもだいたい実行できると思います。できない場合は環境を用意してください。
1. **アクセストークン、アクセストークンシークレット**
  - さくらのクラウドホームからAPIキーを作成し、上記の2つを控えておいてください。後ほど使用します。
  - 詳しい作成方法は下のリンクから 

https://manual.sakura.ad.jp/cloud/api/apikey.html

## curlサンプルコマンド

- サンプルに記載している`Access Token`,`Token Secret`はご自身のものに置き換えてください。
- 共通サービスはさくらのクラウドの全ネットワークゾーンで共通なため、どのゾーンを指定しても同じ情報を取得できます。ただ、必ずゾーンは指定しなければアクセスできません。
  - 特にこだわりがなければ`is1a`**石狩第一ゾーン**で問題ないです
  - <https://secure.sakura.ad.jp/cloud/zone/is1a/api/cloud/1.1/commonserviceitem/>

## 1. すべてを取得する

```terminal:curlコマンドサンプル
curl -u "Access Token":"Access Token Secret" \
  https://secure.sakura.ad.jp/cloud/zone/is1a/api/cloud/1.1/commonserviceitem/ \
  --get
```

### 実行結果

使用しているリソースが多すぎるので実行結果を記載するのはやめておきます。

## 2. サービスを絞って取得する

今回は**シンプル監視（simplemon）**と**ローカルルータ（localrouter）**に絞って一覧を取得してみます。

```terminal:curlコマンドサンプル
curl -u "Access Token":"Access Token Secret" \
  https://secure.sakura.ad.jp/cloud/zone/is1a/api/cloud/1.1/commonserviceitem/ \
  --get \
  --data-urlencode '{"Filter":{"Provider.Class":["simplemon", "localrouter"]}}'
```

### Provider.Class

`Filterオプション`を使うことで欲しい共通サービスの情報に絞ることができます。
上記サンプルのように**Provider.Class**というのが共通サービスごとに振られており、その値を配列に入れることで絞ることができます。

ちなみにこのProvider.Classというのがドキュメントに公開されていないため、分かる範囲でこちらに記載いたします。

| サービス名  |  Provider.Class  |
| ---- | ---- |
| エンハンスドLB |  proxylb |
| ローカルルータ |  localrouter |
| エンハンスドDB |  enhanceddb|
| コンテナレジストリ | containerregistry |
| DNS | dns |
| AWS接続 | awsdirectconnect |
| GSLB | gslb |
| 二要素認証 | esme |
| シンプル監視 | simplemon |
| etc... | 調査中 |

他に分かる方がいればコメントお待ちしております。

### 実行結果

`Filterオプション`で指定した通り、シンプル監視とローカルルータのみが含まれていることがわかると思います。

```json:実行結果
{
    "From": 0,
    "Count": 2,
    "Total": 2,
    "CommonServiceItems": [
        {
            "Index": 0,
            "ID": "113300997401",
            "Name": "ローカルルータ01",
            "Description": "",
            "Settings": {
                "LocalRouter": {
                    "Switch": null,
                    "Interface": null,
                    "Peers": null,
                    "StaticRoutes": null
                }
            },
            "SettingsHash": "bcbf84351838c75bd102bf5591e7d641",
            "Status": {
                "InterfaceConnectionType": "switch",
                "SecretKeys": [
                    "fytkfwqgxzmuozjkphkabmmicsooozfh"
                ]
            },
            "ServiceClass": "cloud/localrouter/default",
            "Availability": "available",
            "CreatedAt": "2021-05-27T12:02:33+09:00",
            "ModifiedAt": "2021-05-27T12:02:33+09:00",
            "Provider": {
                "ID": 6000001,
                "Class": "localrouter",
                "Name": "localrouter1",
                "ServiceClass": "cloud/localrouter"
            },
            "Icon": null,
            "Tags": []
        },
        {
            "Index": 1,
            "ID": "113301688707",
            "Name": "hoge.hoge",
            "Description": null,
            "Settings": {
                "SimpleMonitor": {
                    "HealthCheck": {
                        "Protocol": "ping"
                    },
                    "Enabled": "True",
                    "NotifyEmail": {
                        "Enabled": "True",
                        "HTML": "False"
                    },
                    "NotifySlack": {
                        "Enabled": "False"
                    },
                    "DelayLoop": 60
                }
            },
            "SettingsHash": "395c0d4e949926ba16a89531014f3708",
            "Status": {
                "Target": "hoge.hoge"
            },
            "ServiceClass": "cloud/simplemon/charge",
            "Availability": "available",
            "CreatedAt": "2021-09-23T21:23:19+09:00",
            "ModifiedAt": "2021-09-23T21:23:19+09:00",
            "Provider": {
                "ID": 3000003,
                "Class": "simplemon",
                "Name": "simplemon03",
                "ServiceClass": "cloud/simplemon"
            },
            "Icon": null,
            "Tags": []
        }
    ],
    "is_ok": true
}
```

## まとめ

これでさくらのクラウドで作成した共通サービスをcurlで取得することができるようになりました。
今後共通サービスが追加された場合も同様の対応で一覧が取得できると思います。