APIコールの基礎について

警告

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

概要

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

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

注釈

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

Keystoneより認証Tokenを取得する

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

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

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

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

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

  • How-to-check-UserID を参照し以下の情報をメモする
    • お客さま固有のAPI鍵( 例: DJ0lAxtptGTV9HZbiPPOe1nj9icP0CGV )
    • お客さま固有のAPI秘密鍵 ( 例: A990fiJklk12H35K )
  • Keystone API EndPoint ( 例: https://api.ntt.com/keystone/v3/auth/tokens )
    • 管理ユーザーの場合、どのリージョンのKeystone API EndPointを利用してもTokenを取得することが可能です
    • 一般ユーザーの場合、テナントが存在し、該当ユーザーがアクセスを持っているリージョンのKeystone API EndPointを利用する必要があります

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

以下、管理ユーザーの例で記載をしています。

下記のとおり、curlコマンドを利用してリクエストを行います。
(${}で記載されたところには上記で取得したAPI鍵、API秘密鍵情報、EndPointを入力します。)
  • ${APIkey} : お客さま固有のAPI鍵
  • ${APIsecret} : お客さま固有のAPI秘密鍵
  • ${KeystoneEndPoint} : KeystoneのAPI EndPoint
# curl -i \
-X POST \
-H "Content-Type: application/json" \
-d '
{
   "auth": {
       "identity": {
           "methods": [
               "password"
           ],
           "password": {
               "user": {
                   "domain": {
                       "id": "default"
                   },
                   "name": "${APIkey}",
                   "password": "${APIsecret}"
               }
           }
       },
       "scope": {
           "project": {
               "id": "テナントID"
           }
       }
   }
}' ${KeystoneEndPoint}

上記の例(テナントIDが7884792c1e07424ba5e8ed44695ebbd4だった場合)におけるリクエストは、以下のとおりです。

# curl -i \
-X POST \
-H "Content-Type: application/json" \
-d '
{
   "auth": {
       "identity": {
           "methods": [
               "password"
           ],
           "password": {
               "user": {
                   "domain": {
                       "id": "default"
                   },
                   "name": "DJ0lAxtptGTV9HZbiPPOe1nj9icP0CGV",
                   "password": "A990fiJklk12H35K"
               }
           }
       },
       "scope": {
           "project": {
               "id": "7884792c1e07424ba5e8ed44695ebbd4"
           }
       }
   }
}' https://api.ntt.com/keystone/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です。

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

以下、管理ユーザーの例で記載をしています。

上記で取得したTokenには1時間の有効期限が設定されており、有効期限内であれば利用することが可能です。
ここでは、 Flexible InterConnect の管理機能を利用し、gl1リージョンにテナントを作成する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":"gl1",
   "contract_id": "${ContractId}"
}' https://api.ntt.com/sss/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":"gl1",
   "contract_id": "econ1234"
}' https://api.ntt.com/sss/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リファレンスを参照してください。