表示言語を変更するにはここをクリックしてください (English)。 この記事は、PowerShellを使用して Management REST APIs 経由でSQL Azureの管理操作するための情報を提供します。
メモ: このページに投稿したい場合は、ページ上部のEditタブを使用してください(サイインが必要です)。このページにフィードバックを提供したい場合は、ページ下部のコメント欄を使用する(サイインが必要です)か、 azure@microsoft.com にメールを送信してください。
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ツールを使用して、管理用の証明書を作成することができます。
<CertificateName>に は、証明書に使用したい名前を入力してください。 .cer 拡張子をつけなければなりません。ツールを使用するための詳細情報は、 Certificate Creation Tool (Makecert.exe)を参照してください。
上記手順を実行した後、この証明書用の公開キーは、<CertificateName>.cerパラメータで指定したファイルが存在するはずです。このファイルをWindows Azure Platformサブスクリプションにアップロードします。この証明書用の秘密キーは、ユーザアカウント用の個人証明書にインストールします。 (上のコマンドで、‘My’ に格納されます。)
Windows Azure Platform サブスクリプションに公開キーをアップロードするために、次の手順を実行します。
これらの手順を実行後、管理用の公開キーが、Windows Azureの管理証明書に表示され、authenticate REST APIの呼び出し認証に使用できます。
秘密キーをエクスポートするために、次の手順を実行します。
セキュアーな場所に 秘密キー を保存します。この記事では、PowerShellスクリプトからREST APIリクエストの認証をするためにこのファイルを使用します。このファイルは、常に安全な場所に保存しておくべきです。サブスクリプションへのREST API管理をそのキーが可能にします。秘密キーを無くしたり、許可なく秘密キーを使用されたと思う場合は、Windows Azure証明書ストアから対応する公開キーを削除し生成しなおすべきです。
次のコードは、リクエストメッセージの生成方法を紹介しています。コードでは、次の操作を実行しています。
この例の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
前の例では、メッセージの作成方法をデモしました。しかし、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