ConohaでAPIを使ってみる


Overview

- 目的

terraform使ってみたい。(in conoha)
しかし、その前にconohaのAPIを使ってみた方が良いと思った(直感
なので、先人に倣いconohaのAPIを使ってみる。

- このページでなんとなく判ること
  • conohaVPSでAPIを実行出来る
  • conohaVPSで必要最低限のinstance生成が行える
- Reference
- 結論

API実行はやはり面倒だなぁ。という感じだった。
CLIは個人の方が作ってるけれども、自動系ならterraformを使えば良さそうなので意欲湧いた。

API実行の準備

- API使うために情報を集める

手順はConohaのページに書かれてます。
APIを実行するにあたり、トークンを取得する必要がある。
このため、トークンを取得するためにはConohaのIdentifyのエンドポイントにRESTを飛ばす必要がある。
その際、色々情報(user/password/endpoint/tenantid)を載せて飛ばす必要がある。
この情報の準備、収集をする

★注意

user/passwordはAPI用に新たに準備するもの。ログインID/Passwordではない。

- トークン取得

今後色々使う情報なので変数に入れておくと無難。こんな感じで変数に確保しました。

sample_get_token
TOKEN=`curl -s -X POST -H "Accept: application/json" \
-d '{ "auth": { "passwordCredentials": { "username": "'"$C_USER_NAME"'", "password": "'"$C_PASSWORD"'" }, "tenantId": "'"$C_TENANT_ID"'" } }' \
https://identity.tyo2.conoha.io/v2.0/tokens \
| jq ".access.token.id"| sed -e s/\"//g`;echo $TOKEN

試しにAPIをいくつか実行してみよう

conohaに既にConoHa API Documantationがあるのでこれを見ながらいくつか打ってみる。

- Compute API v2 (nova list相当)

自分のinstanceの一覧を表示。(今は1台のみ有る)

curl -s -X GET -H "Accept: application/json" -H "X-Auth-Token: $TOKEN" https://compute.tyo2.conoha.io/v2/$C_TENANT_ID/servers | jq
API_result
azuki@maki-mac:~/Deployments/terraform$ curl -s -X GET -H "Accept: application/json" -H "X-Auth-Token: $TOKEN" https://compute.tyo2.conoha.io/v2/$C_TENANT_ID/servers | jq
{
  "servers": [
    {
      "id": "9f5a09a3-ae33-410a-bf7a-f22810747aXX",
      "links": [
        {
          "href": "https://compute.tyo2.conoha.io/v2/5a04833c9fbe42709cc3fcbdcaa4XXXX/servers/9f5a09a3-ae33-410a-bf7a-f22810747aXX",
          "rel": "self"
        },
        {
          "href": "https://compute.tyo2.conoha.io/5a04833c9fbe42709cc3fcbdcaa4XXXX/servers/9f5a09a3-ae33-410a-bf7a-f22810747aXX",
          "rel": "bookmark"
        }
      ],
      "name": "118-27-28-241"
    }
  ]
}
- Compute API v2 (nova show相当)
curl -s -X GET -H "Accept: application/json" -H "X-Auth-Token: $TOKEN" https://compute.tyo2.conoha.io/v2/$C_TENANT_ID/servers/<INSTANCE_ID> | jq
result
azuki@maki-mac:~/Deployments/terraform$ curl -s -X GET -H "Accept: application/json" -H "X-Auth-Token: $TOKEN" https://compute.tyo2.conoha.io/v2/$C_TENANT_ID/servers/9f5a09a3-ae33-410a-bf7a-f22810747aXX | jq
{
  "server": {
    "status": "ACTIVE",
    "updated": "2019-05-03T05:46:13Z",
    "hostId": "7ee0386cf0299e07acbff410bd6792542e30aaaccf9ee66cdbdXXXXX",
    "OS-EXT-SRV-ATTR:host": "cn-d12141.g1.tyo2.v4",
~snip~
    "image": {
      "id": "de03b36d-21d8-4e58-9b8e-24581dda86fa",
      "links": [
        {
~snip~
    "flavor": {
      "id": "d92b02ce-9a4f-4544-8d7f-ae8380bc08e7",
      "links": [
        {
          "href": "https://compute.tyo2.conoha.io/5a04833c9fbe42709cc3fcbdcaa4XXXX/flavors/d92b02ce-9a4f-4544-8d7f-ae8380bc08XX",
          "rel": "bookmark"
        }
~snip~
      "backup_set": "0"
    }
  }
}

instance作成する前に

APIを実行してinstanceを作成する上で、最低限以下の情報が必要になる。
- image_id(使用するImage情報, ubuntu,centOS等)
- flavor_id(使用するプラン情報, 1CPU-512mb等)

- 結果として

以下のAPIを実行して2つのIDを決めました

  • image_id : de03b36d-21d8-4e58-9b8e-24581dda86fa(ubuntu16.04)
  • flavor_id : d92b02ce-9a4f-4544-8d7f-ae8380bc08e7(512mb)
- ImageListを取得してみる

どこかにイメージのリストが転がってないか見てみたけど見つからなかったのでAPIを打った。
この結果からさらにgrepすると良いと思う。(本当は公式でCLIが提供されてたら嬉しい。)

command
curl -s -X GET -H "Accept: application/json" -H "X-Auth-Token: $TOKEN" https://$C_EP_IMAGE/v2/images | jq . | egrep "\"id\"|\"name\""
- flavorlistを取得してみる
command
curl -s -X GET -H "Accept: application/json" -H "X-Auth-Token: $TOKEN" https://$C_EP_COMPUTE/flavors | jq

insntaceを作成

command
url -s -X POST -H "Accept: application/json" -H "X-Auth-Token: $TOKEN" -d '{ "server": { "imageRef": "de03b36d-21d8-4e58-9b8e-24581dda86fa", "flavorRef": "d92b02ce-9a4f-4544-8d7f-ae8380bc08e7", "adminPass": "XXXXX"} }' https://${C_EP_COMPUTE}/servers | jq
result
azuki@maki-mac:~/Deployments/terraform$ curl -s -X POST -H "Accept: application/json" -H "X-Auth-Token: $TOKEN" -d '{ "server": { "imageRef": "de03b36d-21d8-4e58-9b8e-24581dda86fa", "flavorRef": "d92b02ce-9a4f-4544-8d7f-ae8380bc08e7", "adminPass": "XXXXXX"} }' https://${C_EP_COMPUTE}/servers | jq
{
  "server": {
    "security_groups": [
      {
        "name": "default"
      }
    ],
    "OS-DCF:diskConfig": "MANUAL",
    "id": "c4419fd2-e36a-4074-ab9a-89a46612XXXX",
    "links": [
      {
        "href": "https://compute.tyo2.conoha.io/v2/5a04833c9fbe42709cc3fcbdcaa41XXXXX/servers/c4419fd2-e36a-4074-ab9a-89a46612XXXXX",
        "rel": "self"
      },
      {
        "href": "https://compute.tyo2.conoha.io/5a04833c9fbe42709cc3fcbdcaa4XXXX/servers/c4419fd2-e36a-4074-ab9a-89a46612XXXXX",
        "rel": "bookmark"
      }
    ],
    "adminPass": "XXXXX"
  }
}
azuki@maki-mac:~/Deployments/terraform$

おまけ

rcファイル作成した方が良さそう

途中から面倒なのでrcファイル作って実施してました。

rc_file
C_TENANT_ID=<TENANT_NAME>
C_USER_NAME=<API USER>
C_PASSWORD=<API PASSWORD>
C_EP_COMPUTE=compute.tyo2.conoha.io/v2/${C_TENANT_ID}
C_EP_IMAGE=image-service.tyo2.conoha.io
C_EP_VOLUME=block-storage.tyo2.conoha.io/v2/${C_TENANT_ID}