36.2. APIコールの基礎について

警告

本章はお客様クライアントの設定など、サポート対象外の部分の記述を多く含みます。 必ずお客様ご自身で編集前やインストール前に、設定のバックアップや設定項目の理解をされた上でのご実施をお願い致します。 また、本ソフトウェアに関しては、あくまで記載した環境での動作を確認したものを掲載しております。オープンソースソフトウェアに関する記載が含まれており、弊社では動作保証、サポートなどをいたしかねますこと、予めご了承ください。

36.2.1. 概要

Enterprise Cloud 2.0 では、OpenStackに互換性のあるAPIを提供しており、それを利用することでプログラム等から Enterprise Cloud 2.0 を操作し、インフラストラクチャ構築を自動化することが可能です。

以下、Keystoneを利用して認証Tokenを取得し、それを用いてAPIによる操作を行う例について説明します。

注釈

ここで記載するのは curl を利用した基本的なAPIコールの方法です。 実際にはOpenStackコミュニティにより提供されるAPIクライアントを利用することで、より簡単にOpenStackに互換性のある部分のAPIでの操作を行うことが可能です。 詳細は Openstackクライアントについて を参照してください。

36.2.2. Keystoneより認証Tokenを取得する

KeystoneはOpenStackおよび Enterprise Cloud 2.0 において認証を一元的に行うサービスです。 Enterprise Cloud 2.0 においてAPIを利用する際の基本的な流れは、必ず以下の通りとなります。

  1. KeystoneよりAPIで認証Tokenを取得する
  2. 取得したTokenを認証情報として利用し、APIコールを行う

まずは "1. KeystoneよりAPIで認証Tokenを取得する" の手順について説明します。

36.2.2.1. Keystone Token認証のために必要な情報

APIコールのために以下の情報を準備します。

  • ユーザー情報の確認 を参照し以下の情報をメモする

    • お客様固有のAPI鍵( 例: DJ0lAxtptGTV9HZbiPPOe1nj9icP0CGV )
    • お客様固有のAPI秘密鍵 ( 例: A990fiJklk12H35K )
  • Keystone APIエンドポイント ( 例: https://keystone-jp1-ecl.api.ntt.com/v3/auth/tokens )

    • 管理ユーザの場合、どのリージョンのKeystone APIエンドポイントを利用してもTokenを取得することが可能です
    • 一般ユーザの場合、テナントが存在し、該当ユーザがアクセスを持っているリージョンのKeystoneを利用する必要があります
    • 以下、管理ユーザの例で記載をしています

36.2.2.2. curlコマンドによるAPIコールの実施

下記の通り、curlコマンドを利用してリクエストを行います。 (${}で記載されたところには上記で取得したAPI鍵、API秘密鍵情報、エンドポイントを入力します。)

  • ${APIkey} : お客様固有のAPI鍵
  • ${APIsecret} : お客様固有のAPI秘密鍵
  • ${KeystoneEndPoint} : KeystoneのAPIエンドポイント
  • ${Project ID} : プロジェクトID(テナントID)
curl -i \
-H "Content-Type: application/json" \
-d '
{
   "auth": {
       "identity": {
           "methods": [
               "password"
           ],
           "password": {
               "user": {
                   "domain": {
                       "id": "default"
                   },
                   "name": "${APIkey}",
                   "password": "${APIsecret}"
               }
           }
       },
       "scope": {
           "project": {
               "id": "${Project ID}"
            }
        }
   }
},\
${KeystoneEndPoint}

上記の例に合わせた場合、下記のようなリクエストになります。

curl -i \
-H "Content-Type: application/json" \
-d '
{
  "auth": {
      "identity": {
          "methods": [
              "password"
          ],
          "password": {
              "user": {
                  "domain": {
                      "id": "default"
                  },
                  "name": "DJ0lAxtptGTV9HZbiPPOe1nj9icP0CGV",
                  "password": "A990fiJklk12H35K"
              }
          }
      }
  }
}' \
https://keystone-jp1-ecl.api.ntt.com/v3/auth/tokens

リクエストが成功した場合、以下のようなレスポンスが返されます。

HTTP/1.1 201 Created
Date: Thu, 17 Mar 2016 10:06:32 GMT
Content-Type: application/json
Content-Length: 324
Connection: keep-alive
X-Subject-Token: dc03494823a841338430052e9ee95e07
Vary: X-Auth-Token
X-Distribution: Ubuntu
Set-Cookie: TS0183560f=01059ca7b10af7d1eaff84d7b1231b09a7d50550648db89c3aaae5f866871fd0ce11e0895b; Path=/

X-Subject-Tokenと記載された値がTokenです。

36.2.3. 取得したTokenでAPIコールを行う

上記で取得したTokenには有効期限が設定されており、有効期限内であれば、利用することが可能です。 ここでは、 Enterprise Cloud 2.0 の管理機能を利用し、jp1リージョンにテナントを作成するAPIコールを行います。

(${}で記載されたところにはTokenを入力します。)

  • ${Token} : 前の章で取得したToken
  • ${ContractId} : econより始まる契約ID
curl -i -1 \
 -X POST \
 -H "X-Auth-Token: ${Token}" \
 -H "Content-Type: application/json" \
-d \
'{
   "tenant_name": "New Tenant for Tutorial",
   "description": "Support Dummy",
   "region":"jp1",
   "contract_id": "${ContractId}"
}' https://sss-jp1-ecl.api.ntt.com/api/v1.0/tenants

上記の例(Tokenがdc03494823a841338430052e9ee95e07, 契約IDがecon1234だった場合)におけるAPIコールは以下のとおりです。

curl -i -1 \
 -X POST \
 -H "X-Auth-Token: dc03494823a841338430052e9ee95e07" \
 -H "Content-Type: application/json" \
-d \
'{
   "tenant_name": "New-Tenant-for-Tutorial",
   "description": "Support Dummy",
   "region":"jp1",
   "contract_id": "econ1234"
}' https://sss-jp1-ecl.api.ntt.com/api/v1.0/tenants

成功すると以下のようなレスポンスを取得できます。

HTTP/1.1 201 Created
Date: Thu, 17 Mar 2016 10:10:49 GMT
Content-Type: application/json
Content-Length: 164
Connection: keep-alive
Set-Cookie: TS0183560f=01059ca7b1631838062ab300142381bf1e810308834a81430a08afafb04eb1e12faca30579; Path=/

{"tenant_id":"4a0103d3d9ef46bbac13446eb949b11f","tenant_name":"New-Tenant-for-Tutorial","description":"Support Dummy","region":"jp1","contract_id":"econ1234"}

以上のような流れで、APIをご利用いただくことが可能です。

注釈

APIの詳細なご利用方法/仕様については、各サービスのAPIリファレンスを参照してください。