Windows Azure 管理ポータルで目視できる内容ですが、定期的に監視などする事を考えるとスクリプトまたはプログラム化する必要が高くなります。また SDK でマネージド DLL 等も配布されていますが、端末にそれを入れるのも億劫ですw
そのような場合は、REST API が提供されているのでこれを利用した監視等々を行う事になるかと思います。実際に REST API を利用するには一つだけ事前準備が必要です。
-
管理用証明書を作成、設定する
できあがった証明書は自分の環境にインストール(作成した cer ファイルをダブルクリック等で実行するとインポートができます)、Windows Azure 管理ポータルからもインポートします。
インポートすると管理ポータルでこのように確認ができます。ここで表示されている値で、ThumbPrint と書かれている値が後々必要になりますのでメモしておきます。
これでアクティビティの実装を行います。
一気に全て載せますがこのようなロジックになります。大まかな流れとしては次のようになります。1: Imports System.Activities
2: Imports System.IO
3: Imports System.Net
4: Imports System.Security.Cryptography.X509Certificates
5:6: Public Class GetAzureHostingListActivity7: Inherits AsyncCodeActivity
8:9: Public Property SubscriptionID As String10: Public Property CertThumbPrint As String11: Public Property ServiceName As String12:13: Public Property ResultDocument As OutArgument(Of String)14:15: Private Delegate Function AsyncGetWebDataDelegate(ByVal subscription As String, ByVal thumbprint As String) As String16:17: Protected Overrides Function BeginExecute(context As System.Activities.AsyncCodeActivityContext, callback As System.AsyncCallback, state As Object) As System.IAsyncResult18: Dim asyncExecute = New AsyncGetWebDataDelegate(AddressOf GetWebData)19: context.UserState = asyncExecute20:21: Return asyncExecute.BeginInvoke(Me.SubscriptionID, Me.CertThumbPrint, callback, state)22: End Function23:24: Protected Overrides Sub EndExecute(context As System.Activities.AsyncCodeActivityContext, result As System.IAsyncResult)25: Dim asyncExecute = TryCast(context.UserState, AsyncGetWebDataDelegate)26: Dim getResult = asyncExecute.EndInvoke(result)
27:28: context.SetValue(Me.ResultDocument, getResult)
29: End Sub30:31: Private Function GetWebData(ByVal subscription As String, ByVal thumbprint As String) As String32: Dim resultStrings As String = ""33: Try
34: Dim certStore As X509Store = New X509Store(StoreName.My, StoreLocation.CurrentUser)35: certStore.Open(OpenFlags.ReadOnly)
36:37: Dim certCollection As X509Certificate2Collection = certStore.Certificates.Find(X509FindType.FindByThumbprint, thumbprint, False)38: certStore.Close()39:40: If certCollection.Count <= 0 Then41: Throw New ApplicationException("証明書がありません")42: End If43: Dim certificate As X509Certificate2 = certCollection(0)44:45: Dim requestUri As New Uri("https://management.core.windows.net/" _46: + subscription _47: + "/services/" _
48: + "hostedservices"
49: Dim localWebRequest = TryCast(HttpWebRequest.Create(requestUri), HttpWebRequest)50: localWebRequest.ClientCertificates.Add(certificate)51: localWebRequest.Headers.Add("x-ms-version", "2011-02-25")52:53: Using webResponse = TryCast(localWebRequest.GetResponse(), HttpWebResponse)54: Using responseStream = webResponse.GetResponseStream()
55: Using reader As New StreamReader(responseStream)56: resultStrings = reader.ReadToEnd57: End Using58: End Using59: End Using60: Catch ex As Exception61: resultStrings = ex.Message62: End Try63: Return resultStrings
64: End Function65:66: End Class
- ローカル証明書ストアから ThumbPrint プロパティで指定したものと一致する値になる証明書を取得
- HttpWebRequest クラスのインスタンスに証明書を追加し、REST API を呼び出す
- 結果を返却
実行結果はこの通りです。私のサブスクリプションでは AzureWrokflow という名前でホスティングさせていまして、その名前が正しく拾えているのがわかります。
これと同様の方法にてホスティングの属性を取得する API ( https://management.core.windows.net/<subscription-id>/services/hostedservices/<service-name> ) も利用可能です。
0 件のコメント:
コメントを投稿