DevOpsのための道具箱: APIを使いこなす – 「若手エンジニアのためのDevOps入門」(5)

こんにちは、山本和道です。
本記事は連載「若手エンジニアのためのDevOps入門」の第5回です。

第1回 インフラエンジニアにとってのDevOps
第2回 Webアプリでの開発環境構築
第3回 バージョン管理システム
第4回 継続的インテグレーション/デリバリー
第5回 DevOpsのための道具箱: APIを使いこなす
第6回 リリース/構成管理: 概要

第4回は継続的インテグレーション/デリバリーについて扱いました。

今回は今後扱う予定の環境構築/構成管理などで強い味方となる、クラウドなどのプラットフォームから提供されているAPIの使い方について扱います。

クラウドなどのプラットフォームが提供するAPI

APIとはApplication Programming Interfaceの略で、サービスを利用するアプリケーション(Application)を作成する(Programming)ためのインターフェース(Interface)です。近年のクラウドプラットフォームではAPIが提供されており、クラウド上のリソースの作成や変更、削除などをAPIを通じて行えるようになっています。

APIを通じて操作を行うことでプログラムなどから機械的に実行できるようになり、コントロールパネルの操作のような繰り返し実行するのが煩雑な作業も自動化が可能となります。

当記事ではクラウドプラットフォームのAPIを題材に基本的な利用方法や利用できるツールについて扱います。

APIの利用方法

クラウドプラットフォームにおけるAPIの多くはWeb APIとして提供されており、curlなどのコマンドラインツールやプログラム内から直接HTTP/HTTPSリクエストを行うことで利用可能です。

また、プラットフォームによってはSDKというAPIを利用するためのプログラム部品が提供されていたり、専用のCLIが提供されていることもあり、それらを利用することでもAPIを利用できます。

まず直接HTTP/HTTPSリクエストを行う方法について見ていきます。

curlコマンドでのAPIの呼び出し

curlコマンドは様々なプロトコルを用いてデータ転送を行うためのコマンドラインツールです。
例えば当サイト「https://knowledge.sakura.ad.jp/」に対してHTTPでGETリクエストを行う場合は以下のようになります。

curl -X GET https://knowledge.sakura.ad.jp/

オプションを指定することでGET以外(PUT/PATCH/DELETEなど)のメソッドの利用やパラメータの指定も可能となっています。

このcurlコマンドを用いて実際にクラウドAPIを利用してみます。

最初にAPIのドキュメントを読もう

APIドキュメントにはエンドポイントのURLや認証方法、APIに指定すべきパラメータなどが記載されているため、APIを利用する前に必ずドキュメントに目を通しておくことをお薦めします。

例えばさくらのクラウドであれば以下のサイトでAPIドキュメントを公開しています。

さくらのクラウド: API v1.1 ドキュメント

APIの認証方法

先ずはAPIの認証方法についてドキュメントで確認しておきましょう。認証方法はOAuth2で取得したアクセストークンを利用する方法やBASIC認証など、プラットフォームにより異なっています。

例えばさくらのクラウドの場合はBASIC認証が用いられており、APIキーがユーザー名、シークレットトークンがパスワードとなっています。APIキーの発行は以下のドキュメントなどを参考に行います。

Usacloud導入ガイド: APIキーの発行

APIキーやアクセストークンを入手したらcurlにオプション指定することでそれらの情報を指定します。
BASIC認証の場合は以下のようなオプション指定を行います。

# さくらのクラウドなどBASIC認証の場合
curl --user "<ユーザー名>":"<パスワード>"

また、アクセストークンを利用する場合は以下のようになります。

# さくらのクラウド以外: アクセストークンを利用する場合
curl -H "Authorization: Bearer <取得したアクセストークン>"

エンドポイント/メソッドの確認

次に呼び出したいAPIのエンドポイントとメソッドの確認を行います。
例としてさくらのクラウドAPIの「スイッチの作成」のドキュメントを確認すると以下のようになっています。

- エンドポイント: https://secure.sakura.ad.jp/cloud/zone/<対象ゾーン>/api/cloud/1.1/switch
- メソッド: POST

この場合、curlコマンドのオプション指定は以下のようになります。(この例ではまだパラメータ指定を行ってません)

# 注: パラメータ未指定なのでこのままでは利用できません
 curl --user "<ユーザー名>":"<パスワード>" -X POST https://secure.sakura.ad.jp/cloud/zone/<対象ゾーン>/api/cloud/1.1/switch

パラメータの指定

パラメータの指定方法はAPIごとに異なるためこちらもドキュメントを確認しておきます。
Content-Typeヘッダやデータ形式の指定がある場合もあるため注意しましょう。

先ほどの「スイッチの作成」の例だと以下のようにJSON形式でパラメータ指定するようにドキュメントに記載されています。

{
    "Switch":{
        "Name":"Switch Name",
        "Description":"Switch Description"
    }
}

この場合curlコマンドのオプション指定は以下のようになります。

curl --user "Access Token":"Access Token Secret" -X POST \
     -d '{"Switch":{"Name":"Switch name","Description":"Switch description"}}' \
     https://secure.sakura.ad.jp/cloud/zone/<対象ゾーン>/api/cloud/1.0/switch

これでcurlコマンドを実行することでAPIを利用可能です。
後はAPIドキュメントを参照しながら応用することでAPIによる基本的な操作が行えるはずです。

注意点として、プラットフォームによっては関連するリソースを先に作成しておく必要があるといった具合に、APIの呼び出し順序についてのルールが存在する場合がありますので、該当APIのドキュメントは十分に読んでおきましょう。特に呼び出し回数/間隔制限(Rate limit)やパラメータのデータサイズ上限などは引っかかりやすいポイントですので注意が必要です。

curl以外でのAPIの利用

ちょっと動作を確認したいだけの場合など、わざわざcurlコマンドを使うまでもない場面もあるかと思います。その場合、汎用的なRESTクライアントソフトウェアなどを用いることでもAPIを利用可能な場合があります。

例: Advanced REST Client

これらのソフトウェアではGUIを用いて認証情報やパラメータの指定が行えるようになっているものが多く、APIの動作確認のために試行錯誤する際などに便利です。様々なソフトウェアが存在しますので自分の利用形態にあったものを適宜選択するのが良いでしょう。

CLIからのAPIの利用

APIを手軽に利用する方法としてはCLIもあります。CLIは複雑なパラメータ指定を簡単に行えたり、入力補完機能が利用できたりとコマンドラインから便利に使えるよう様々な工夫がされていますので、コマンドラインを中心にAPIを利用する場合は是非利用を検討してみてください。

各種クラウドプラットフォームでは以下のようなCLIを提供しています。

まとめ

今回はクラウドプラットフォームのAPIの利用方法について扱いました。

curlコマンドなどでの基本的なAPIの利用方法を押さえておけばAPIドキュメントを参照することで応用が容易にできます。また、APIを利用して手順の自動化を行うことはDevOpsプロセスに取り組む上で非常に重要な役割となります。基本的な利用方法については是非押さえておきましょう。

また、curlコマンドで直接HTTP/HTTPSリクエストを行う以外にもCLIを用いるといった方法などがあります。利用する場面に応じて適切な道具を選択しましょう。

以上です。