目次


IBM SoftLayer タギング・サービスを利用して業務を能率化する

Softlayer API と Python を利用してデバイスにタグを付け、タグに基づいてデバイスを一覧表示する

Comments

このチュートリアルでは、IBM SoftLayer API を利用し、Python プログラミング言語を使ってデバイスにどのようにしてタグを付けるのか、そしてタグに基づいてどのようにしてデバイスを一覧表示するのかを説明します。タグを付けることによって、クラウド・インフラストラクチャーの資産を識別できるようになるため、レポート作成や課金などの他の業務も容易になります。タギングに必要な Python および SoftLayer パッケージをインストールする手順を詳しく説明し、該当する API を呼び出してタグを設定および削除するシナリオや、タグの関連付けられているデバイスを一覧表示するシナリオを通じて具体的な使用例を紹介します。

SoftLayer から提供されているタギング・サービスを利用すると、デバイスにキーワードによるタグを付けて、タグに基づいてデバイスを検索できるようになります。タギングは、クラウドの世界では重要な概念であり、主要なビジネス要件に対処するためにタギングを利用する開発者の数は増え続けています。基本的に、ビジネス・ニーズには次の 2 つの要素があります。

  • クライアントは自分のクラウド資産 (仮想マシン、ベアメタル・ストレージ・ノードなど) を識別する必要があります。このような資産を数百と持っているクライアントは、資産を識別するのに便利な手段を必要としています。
  • 組織の構造によっては複雑になりがちな課金要件に悩まされているクライアントは少なくありません。課金は、事業分野、コスト・センター、部門などに分けて行われることもあります。タギングを利用すると、検索しやすいキーワードによってデバイスにタグを付けられるようになるため、タギングによって問題が解決することはよくあります。

このチュートリアルでは SoftLayer タギングの仕組みを明らかにする実践的なデモンストレーションとして、クラウド資産 (仮想インスタンスとベアメタル) 上でタグを実装する際の使用例を取り上げ、ユーザーのタイプ (一般/マスター) またはタグ名に基づいて資産をどのようにして検索するのかを説明します。この方法で検索した結果は、レポートの作成や課金のために使用できます。このチュートリアルで使用するサンプル・コードは、Python を使用して作成されています。

基本用語

このコンテキストで使用するいくつかの基本用語の意味を明確にしておきましょう。

仮想サーバー・インスタンス (VSI): SoftLayer VSI は、他のクラウド・サービス・プロバイダーよりも高度なカスタマイズ、透明性、予測可能性、自動化を提供します。それは、これらのインスタンスは SoftLayer ベアメタル・サーバーにシームレスに統合されるためです。

SoftLayer タギング・サービス: 前述のとおり、このタギング・サービスを利用することで、ユーザーはデバイスにキーワードによるタグを付けて、タグを基準にデバイスを検索できるようになります。このサービスには、API を利用して呼び出せるメソッドが用意されています。

API ユーザー名: API ユーザー名は、デバイスにアクセスしてタグを設定するユーザーを表します。

API キー名: API キーは、各ユーザーに固有の 16 進数の文字列です。このキーは、API を使用して操作を行う際の認証としての役割を果たします。誤ったキーを指定した場合、SoftLayer API は要求された操作を許可しません。

タグに関する重要な情報

  • タグには、最大 128 文字を含めることができます。
  • 1 台のデバイスに追加できるタグの最大数は記載されていませんが、私たちはこれまで、最大 100 個のタグを正常に追加できました。
  • デバイスに追加できるのは、小文字のタグのみです。大文字のタグが渡されると、自動的に小文字のタグに変換されます。
  • タグには下線を含めることができますが、これ以外の特殊文字は無視されます。例えば、「a*b&c」という名前は、「abc」に変換されてからタグ付けされます。タグに含まれるこれらの特殊文字はすべて無視されます。
  • マスター・ユーザーは、そのマスター・ユーザーが作成したユーザーに属するタグを基に、デバイスを一覧表示することができます。
  • タギング API では、タグの削除をサポートしていません。デバイスの個々のタグを削除するには、GUI を使用できます。あるいは、SetTags メソッドを使用し、タグ名をブランクとして渡すことで、すべてのタグを削除できます。

コードを入手する: ServerTagging.pyコードを入手する: SetServerTags.py

必要なもの

  • SoftLayer API キー: 次の方法を使用してアクセスできます。
    1. SoftLayer ポータルにアクセスして、有効な資格情報を使ってログインします。
    2. 「Account (アカウント)」 > 「Users (ユーザー)」の順にナビゲートします。有効なユーザーのリストが表示されます。
    3. いずれかのユーザーの API キーを表示するには、「API Key (API キー)」列の該当する行で「View Link (リンクを表示)」をクリックします。
  • Python 2.7 以降: Python は、スクリプトを作成するのに最適な、単純で使いやすいオブジェクト指向言語です。SoftLayer では、API を呼び出すために使用できる、Python ベースの API パッケージを提供しています。
  • get-pip.py: pip は、Python を使用して作成されたパッケージをインストールするためのパッケージ管理システムです。pip をインストールするには、get-pip.py ファイルをダウンロードしてインストールします。インストールされた pip を使用して、SoftLayer パッケージ (以下を参照) をインストールできます。
  • ServerTagging.py および SetServerTags.py: これらのファイルは Python スクリプトです。SetServerTags.py はデバイスにタグを設定し、ServerTagging.py は渡された引数に基づいて、タグに関連付けられているデバイスを取得します。

このチュートリアルの残りの部分では、まず、SoftLayer タギング・サービスのさまざまな使用法を説明するにあたって、インストールと実行が必要になるソフトウェアを上げてあります。その後、タグを作成および使用するための一連のコマンドを紹介し、続いてデバイスをタグに関連付けるためのサンプル・コードを示してあります。

ソフトウェアをインストールする

ステップ 1. Python 2.7 以降をインストールする

  1. root ユーザーとしてシステムにログインします。
  2. 以下のパッケージがシステムにインストールされていることを確認します。
    • gcc
    • openssl
    • openssl-devel
  3. Python 2.7 をダウンロードします。
    wget -c https://www.python.org/ftp/python/2.7.10/Python-2.7.10.tgz
  4. Python 2.7 バイナリーを解凍します。
    tar xzf Python-2.7.10.tgz
  5. Python を構成してインストールします。
    cd Python-2.7.10
    ./configure
    make altinstall
  6. Python 2.7 が正常にインストールされたことを確認します。
    python2.7 -V

ステップ 2. pip をインストールする

get-pip.py ファイルをダウンロードしてインストールします。

wget -c https://bootstrap.pypa.io/get-pip.py
python2.7 get-pip.py

ステップ 3. SoftLayer パッケージをインストールする

python2.7 -m pip install SoftLayer

ステップ 4. 引数パーサーをインストールする

python2.7 -m pip install argparse

使用例

タギングの使用例は、以下の 3 つのカテゴリーに分類できます。

  • デバイスにタグを追加する
  • タグに基づいてデバイスを一覧表示する
  • デバイスからタグを削除する

デバイスにタグを追加する

単一のデバイスにタグを追加する場合

#python2.7 SetServerTags.py -user masteruser1 -apiKey  
<Api Key>  -tag 'tagA' -fqdn sepbmi1.ibm.com

このコマンドにより、次の出力が表示されます。以降で説明するコマンドでも、これと同様の出力が表示されます。

入力したコマンドとコマンド出力を表示したコンソールのスクリーンショット
入力したコマンドとコマンド出力を表示したコンソールのスクリーンショット

複数のデバイスにタグを追加する場合

python2.7 SetServerTags.py -user masteruser1 -apiKey <Api Key>  -tag 'tag1,tag2,tag3' -fqdn hostbmi1.example.com

複数のデバイスに複数のタグを追加する場合

#python2.7 SetServerTags.py -user masteruser1 -apiKey <Api Key>  -tag 'tag1,tag2,tag3' -fqdn 'hostbmi1.example.com,sepbmi1.ibm.com'

特定のユーザーに属するすべてのデバイスにタグを追加する場合

#python2.7 SetServerTags.py -user masteruser1 -apiKey <Api Key>  -tag 'tagB'

指定のタグが付けられているすべてのデバイスを一覧表示する

#python2.7 ServerTagging.py -user masteruser1 -apiKey <Api Key>  -tag 'tag1'

デバイスからタグを削除する

指定のデバイスからタグを削除する場合

python2.7 SetServerTags.py -user masteruser1 -apiKey <Api Key>  -tag '' -fqdn hostbmi1.example.com

複数のデバイスからタグを削除する場合

#python2.7 SetServerTags.py -user masteruser1 -apiKey <Api Key>  -tag '' -fqdn 'hostbmi1.example.com,sepbmi1.ibm.com'

すべてのデバイスからすべてのタグを削除する場合

# python2.7 SetServerTags.py -user masteruser1 -apiKey <Api Key>  -tag ''

サンプル・コード

このセクションには、SoftLayer API を使用したタギングの具体的な方法を示す、Python ベースのアプリケーション・コードを記載します。これらのサンプル・コードは、前述の SetServerTags.py および ServerTagging.py スクリプトに、引数としてユーザー名 (‑user)、API キー (‑apiKey)、タグ (‑tag)、デバイスのホスト名 (‑fqdn) を渡します。SetServerTags.py はデバイスにタグを設定し、ServerTagging.py は渡された引数に基づき、タグに関連付けられているデバイスを取得します。その後は、どちらのスクリプトも SoftLayer パッケージをインポートして引数を解析します。ユーザー名と API キーは、認証を行ってクライアント・オブジェクトを作成するために使用されます。クライアント・オブジェクトが作成されると、デバイスにタグを設定する API、または特定のタグに関連付けられているデバイスを取得する API が、シナリオに応じて呼び出されます。

タグに関連付けられているデバイスを取得するための Python コード

#Importing required libraries
import argparse
import SoftLayer
import sys
#Set up the argument parser to accept the command line arguments passed to the Python script. 
parser = argparse.ArgumentParser(description='Welcome !! This script fetches Server details based on Tagging')
parser.add_argument('-user',action='append', type=str,  help='Input for User name')
parser.add_argument('-apiKey',action='append', type=str,  help='Input for API Key')
parser.add_argument('-tag',action='append', type=str,  help='Input for tag name')
parser.add_argument('-fqdn',action='append', type=str,  help='Input for Device fqdn')
args = parser.parse_args()
apiUsername =  args.user[0]
apiKey = args.apiKey[0]
tagName =  args.tag[0]
#Pass Username and apiKey to the SoftLayer.client method to get Client details 
client = SoftLayer.Client(username=apiUsername, api_key=apiKey)
#Check if the authentication is successful using the client object
userId = client['Account'].getCurrentUser(mask='id')
#Get the tag data from the client object by calling getTagByTagName method
tagData = client['Tag'].getTagByTagName(tagName,filter={'references':{'usrRecordId':userId}})
# Get the ID of the tag and store all the references of the tag in the devices variable
tagId = tagData[0]['id']
devices = client['Tag'].getReferences(id=tagId,mask='resourceTableId')
#Use a for loop to browse through all the devices, and fetch the device fqdn
for each in devices:
devicefqdn=client['Hardware'].getObject(id=each['resourceTableId'],mask='fullyQualifiedDomainName')

デバイスにタグを関連付けるための Python コード

#Steps are same here till the checking of authentication
# Get all servers belonging to the User using the getHardware method
serverIds = client['Account'].getHardware(mask='id,fullyQualifiedDomainName')
# To set tag on a device or multiple devices
for each in serverIds:
if (each['fullyQualifiedDomainName'] in fqdn or each['fullyQualifiedDomainName'] == fqdn): #tag is added to required fqdn
			try:
				setTag = client['Tag'].setTags(tagName,'HARDWARE',each['id'],'lll')
setTag = client['Tag'].setTags(tagName,'HARDWARE',each['id'],'lll')
# To set tags on all the devices belonging to a user
for each in serverIds:
		try:
			setTag = client['Tag'].setTags(tagName,'HARDWARE',each['id'],'lll')

まとめ

このチュートリアルでは、SoftLayer のタグについて紹介し、API によってタグをどのようにして関連付けるのかと、API によってタグをどのようにして取得するのかを説明しました。さらに、タグの追加、一覧表示、削除に関する使用例も説明しました。SoftLayer のタグ付け機能を説明するこの短いチュートリアルによって、タグ付けに関する皆さんの理解が深まり、タグ付けが業務の能率化に役立つ仕組みを把握していただけたことを願います。

最後に、多大なサポートと支援を提供してくれた次の 2 人の同僚に大いなる感謝の言葉を贈ります。

  • Vivekanandan Subramanian: Executive Architect, Cloud Tech Sales, IBM
  • Prabhakar Attaluri: Distinguished Engineer, Cloud Tech Sales, IBM

ダウンロード可能なリソース


関連トピック


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Cloud computing
ArticleID=1037576
ArticleTitle=IBM SoftLayer タギング・サービスを利用して業務を能率化する
publish-date=09152016