表示言語を変更するにはここをクリックしてください (English)。 

この記事は、PowerShellを使用して Management REST APIs 経由でSQL Azureの管理操作するための情報を提供します。

メモ: このページに投稿したい場合は、ページ上部のEditタブを使用してください(サイインが必要です)。このページにフィードバックを提供したい場合は、ページ下部のコメント欄を使用する(サイインが必要です)か、 azure@microsoft.com にメールを送信してください。


SQL Azure Management REST APIs

SQL Azure は、SQL Azureサーバを作成したり、一覧を取得したり、削除するためにREST APIsを提供しています。REST APIs (http://msdn.microsoft.com/ja-jp/library/gg715283.aspx)を使用したC#サンプルをSQL Azureドキュメントで提供しており、Windows PowerShellから使用することができます。

この記事の目的は、特定URLに対して単純なHTTPSリクエストをして、REST APIsを使用することです。特定動詞 (GET, POST, DELETE,) やパラメータを含むXMLメッセージで、いくつかのAPIsを呼び出すことができます。URLsや動詞、メッセージのすべての一覧は、Management Rest API Reference  (http://msdn.microsoft.com/en-us/library/gg715271.aspx)で確認できます。

認証

SQL Azure REST APIs は証明書が必要です。Windows Azure Platformサブスクリプション上に公開キーをインストールし、REST APIを呼び出す度に、秘密キーを使用します。

管理証明書を作成する

次の手順を実行することでmakecert.exeツールを使用して、管理用の証明書を作成することができます。

  1. 管理者権限で、Visual Studioコマンドプロンプト ウィンドウを開きます。
  2. 証明書ファイルを保存したいディレクトリに、カレントディレクトリを変更します。
  3. 次のコマンドを入力します。makecert -sky exchange -r -n "CN=<CertificateName>" -pe -a sha1 -len 2048 -ss My "<CertificateName>.cer"

    <CertificateName>に は、証明書に使用したい名前を入力してください。 .cer 拡張子をつけなければなりません。ツールを使用するための詳細情報は、 Certificate Creation Tool (Makecert.exe)を参照してください。

メモ:X.509サーバ証明書を作成する為に、Internet Information Services (IIS) マネージャを使用することもできます。証明書を作成する為にIISマネージャを使用するための詳細情報は、IIS 7 で自己署名入りサーバー証明書を作成するを参照してください。

上記手順を実行した後、この証明書用の公開キーは、<CertificateName>.cerパラメータで指定したファイルが存在するはずです。このファイルをWindows Azure Platformサブスクリプションにアップロードします。この証明書用の秘密キーは、ユーザアカウント用の個人証明書にインストールします。 (上のコマンドで、‘My’ に格納されます。)

公開キーをアップロードする

Windows Azure Platform サブスクリプションに公開キーをアップロードするために、次の手順を実行します。

  1. ブラウザを開き、ポータルhttp://windows.azure.comに移動し、ログインします。
  2. ページの左側のナビゲーションバーで、 ホステッドサービス、ストレージアカウント、CDN を選択し、管理証明書を選択します。
  3. ページ上部のリボンから証明書の追加を選択し、 サブスクリプションを選択します。
  4. 参照をクリックし、作成した<CertifificateName>.cer ファイルを選択します。証明書をアップロードするために OK をクリックします。

これらの手順を実行後、管理用の公開キーが、Windows Azureの管理証明書に表示され、authenticate REST APIの呼び出し認証に使用できます。

秘密キーをエクスポートする

秘密キーをエクスポートするために、次の手順を実行します。

  1. スタートメニューのテキストボックスに certmgr.msc と入力し、証明書管理スナップインの管理コンソールを開きます。
  2. 証明書を作成するのにmakecertプログラムを使用する手順を使った場合、新しい証明書は自動的に個人証明書ストアに追加されます。もし個人証明書の下に証明書が表示されていない場合は、X.509証明書をインポートしてください。
  3. エクスポートしたい証明書を選択し、右クリックをし、すべてのタスクの下のエクスポートをクリックします。
  4. 秘密キーのエクスポート ページで、はい、秘密キーをエクスポートします.を選択します。
  5. ウィザードの最後で、作成した時の証明書のパスワードを入力します。

セキュアーな場所に 秘密キー を保存します。この記事では、PowerShellスクリプトからREST APIリクエストの認証をするためにこのファイルを使用します。このファイルは、常に安全な場所に保存しておくべきです。サブスクリプションへのREST API管理をそのキーが可能にします。秘密キーを無くしたり、許可なく秘密キーを使用されたと思う場合は、Windows Azure証明書ストアから対応する公開キーを削除し生成しなおすべきです。

リクエストメッセージを作成する

次のコードは、リクエストメッセージの生成方法を紹介しています。コードでは、次の操作を実行しています。

  • 証明書ファイルの指定
  • 証明書ファイルのパスワードの指定
  • サブスクリプションIDの指定
  • 証明書の読み込み
  • URI ‘https://management.database.windows.net:8443/<subscriptionID>/servers’ へのHttpWebRequestの準備
    • 証明書の追加
    • ヘッダーの設定
    • GETメソッドの設定
    • リクエストの送信

この例のURIと動詞の組み合わせでは、単純にサブスクリプションに所属するSQL Azureサーバの一覧を返します。

$certpath=Read-Host "Path to certificate file?"
$certpass=Read-Host –assecurestring "Password for certificate file?"
$subscription=Read-Host "Subscription ID?"

$cert= new-object System.Security.Cryptography.X509Certificates.X509Certificate $certpath, $certpass
$request = [System.Net.HttpWebRequest]::Create("https://management.database.windows.net:8443/{0}/servers"-f $subscription)
$request.ClientCertificates.Add($cert)
$request.Headers["x-ms-version"]="1.0"
$request.Method="GET"

$response=$request.GetResponse()

次のコードは、レスポンスストリームを読み込み、結果を返します。

$requestStream=$response.GetResponseStream()
$readStream=new-object System.IO.StreamReader $requestStream
new-variable db
$db=$readStream.ReadToEnd()
$readStream.Close()
$response.Close()
write-host $db

XML Bodyを作成する

前の例では、メッセージの作成方法をデモしました。しかし、SQL Azureサーバ一覧を取得するREST APIにはbodyが必要ありません。次の例では、メッセージ用のXMLボディの作成方法をデモします。
この例では、新しいSQL Azureサーバを作成するためにREST APIを呼び出します。サーバ一覧を取得するのに使用したのと同じURLですが、動詞はGETの代わりにPOSTメソッドwを使用します。このREST APIはボディで、サーバ用の管理ログインとパスワード、作成する地域を指定します。

$certpath=Read-Host "Path to certificate file?"
$certpass=Read-Host –assecurestring "Password for certificate file?"
$subscription=Read-Host "Subscription ID?"

$salogin=Read-Host "Enter Administrator name for new server:”
$sapassword=Read-Host –assecurestring "Enter a password for the new Administrator:”
Write-Host "Enter the region the server will be created in:"
Write-Host "North Central US | South Central US | North Europe | West Europe | East Asia | Southeast Asia"
$location=Read-Host "Region?"

$cert= new-object System.Security.Cryptography.X509Certificates.X509Certificate $certpath, $certpass
$request = [System.Net.HttpWebRequest]::Create("https://management.database.windows.net:8443/{0}/servers"-f $subscription)
$request.ClientCertificates.Add($cert)
$request.Headers["x-ms-version"]="1.0"
$request.Method="POST"

$message='<[default] http://schemas.microsoft.com/sqlazure/2010/12/:SERVER xmlns="http://schemas.microsoft.com/sqlazure/2010/12/">
    <[default] http://schemas.microsoft.com/sqlazure/2010/12/:ADMINISTRATORLOGIN>{0}
    <[default] http://schemas.microsoft.com/sqlazure/2010/12/:ADMINISTRATORLOGINPASSWORD>{1}
    <[default] http://schemas.microsoft.com/sqlazure/2010/12/:LOCATION>{2}
  ' -f $salogin, $sapassword, $location
$requeststream=new-object System.IO.StreamWriter $request.GetRequestStream()
$requeststream.Write($message)
$requeststream.Flush()
$requeststream.Close()

$request.ContentType="application/xml;charset=utf-8"


$response=$request.GetResponse()
$requestStream=$response.GetResponseStream()
$readStream=new-object System.IO.StreamReader $requestStream
new-variable db
$db=$readStream.ReadToEnd()
$readStream.Close()
$response.Close()
write-host $db

関連項目