DHJJ DHJJ [Hatsune's Journal Japan]

Hello Azure - はじめてのAzureアプリ作成

アプリ作成

Windows Azure Tools for Visual Studio 2010 1.2を導入してWindows Azureアプリを作成してみたいと思います。なお、1.2というバージョン番号は、Azure SDKやAzure OSのバージョン番号とも一致しており、1.1以前が.NET Framework 3.5が前提なのに対して1.2以降は.NET Framework 4が前提であるという特徴があります。

なお、Windows AzureアプリをVisual Studioで開発する場合は、Visual Studioを「管理者として実行」で起動しなければなりません。

新しいクラウドサービスプロジェクト

Azureアプリの最初の難関は、[Clound]-[Windows Azure クラウドサービス]テンプレートを選択して新しいプロジェクトを作成した直後に表示されるダイアログに対してどのような操作を行えばよいかという点だと思います。

ASP.NET Webロール ASP.NET Webアプリのプロジェクトを作成します。
ASP.NET MVC 2 Webロール ASP.NET MVC 2のプロジェクトを作成します。
WCFサービスWebロール WCFを使ったプロジェクトを作成します。
ワーカーロール バックグランドサービスのプロジェクトを作成します。
CGI Webロール FastCGIアプリケーション用のプロジェクトを作成します。

今回は環境変数を表示するWebページを作りたいので、ASP.NET Webロールを選択して[>]をクリックして「クラウドサービスソリューション」にASP.NET Webロールを追加してから[OK]をクリックします。

するとAzureの設定用のプロジェクトである「HelloAzure」プロジェクトとASP.NET Webロールのプロジェクトである「WebRole1」プロジェクトが作成されたソリューションが表示されます。

この図ではソリューションが自動生成された後に「WebRole1」を「WebRoleHelloAzure」に変更しています。

Default.aspxへのデザイン追記

画面上にボタンコントロールとGridViewコントロールを配置しました。配置方法などはASP.NET Webフォームと全く同じ感覚です。

Default.aspx.vbへのコード記述

Public Class _Default
    Inherits System.Web.UI.Page

    Private block As Object = Nothing

    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
        Dim ds As New DataSet
        Me.Button1.Text = "Hello Azure!"

        With block
            ds.Tables.Add("Enviroment")
            ds.Tables("Enviroment").Columns.Add("name", GetType(String))
            ds.Tables("Enviroment").Columns.Add("value", GetType(String))
        End With

        With block
            Dim row As DataRow = ds.Tables("Enviroment").NewRow
            row("name") = "OSVersion"
            row("value") = Environment.OSVersion
            ds.Tables("Enviroment").Rows.Add(row)
        End With
        With block
            Dim row As DataRow = ds.Tables("Enviroment").NewRow
            row("name") = "SystemDirectory"
            row("value") = Environment.SystemDirectory
            ds.Tables("Enviroment").Rows.Add(row)
        End With
        With block
            Dim row As DataRow = ds.Tables("Enviroment").NewRow
            row("name") = "Version"
            row("value") = Environment.Version
            ds.Tables("Enviroment").Rows.Add(row)
        End With
        For Each env In Environment.GetEnvironmentVariables
            Dim row As DataRow = ds.Tables("Enviroment").NewRow
            row("name") = env.key
            row("value") = env.value
            ds.Tables("Enviroment").Rows.Add(row)
        Next
        Me.GridView1.AutoGenerateColumns = True
        Me.GridView1.DataSource = ds.Tables("Enviroment")
        Me.GridView1.DataBind()
    End Sub
End Class

アプリの発行

Windows AzureアプリをWindows Azureに発行するためには、最初に、ソリューションエクスプローラーのAzureプロジェクトを右クリックしてショートカットメニュー[発行]をクリックします。

[クラウドサービスの発行]ダイアログが表示されるので、[クラウドサービスをWindows Azureに配置します]オプションを選択してWindows Azure上のサービスを指定するために、資格情報などを選択します。

[資格情報]ドロップダウンをクリックすると[クラウドサービス管理認証]ダイアログが開きます。

step1の資格情報とは、Windows Azure Service Developer Portalで入力しておいたサブスクリプション識別子名になります。

step2として「完全パスのコピー」をクリックして自動生成した証明書ファイルのファイル名をクリップボードにコピーします。コピーされるのはあくまでもファイル名であって証明書自体ではありません。

ここでいったんVisual StudioからWindows Azure Developer Portalに作業場所を移動するので「開発者ポータル」をクリックしてWindows Azure Service Developer Portalを表示します。

Windows Azure Service Developer Portalの「Account」にある「Manage My API Certificates」をクリックしてVisual Stuidoでコピーした証明書のパスを指定して証明書をアップロードします。

ファイル名を貼りつけたら[Upload]ボタンをクリックします。

Installed Certificatesの下にアップロードした証明書の情報が表示されます。証明書の期間は1年です。ただし、この証明書はいわゆるオレオレ証明書なので業務などで実運用するときは正式な証明書をアップロードしなければいけません。

Visual Studioに切り替えて、Windows Azure Service Developer PortalにあるサブスクリプションIDを入力したら[クラウドサービス管理認証]ダイアログを[OK]すれば次のような表示になります。

実は、Windows Azure側にHosted ServicesとStorage Accountを1つも追加していないため「サービスアカウントが見つかりません」、「ストレージのアカウントが見つかりませんでした」となっています。

そこでWindows Azure Service Developer Portalの「Summary」に移動します。

Storage Accountの追加

Storage Accountを選択します。

サービス名として「HelloAzure」と入力して備考に説明を入れます。

アカウント名として「hatsune」を指定してみました。他のユーザが使っている名前は使えません。

Storage Account Affinity Groupとは、データセンタ内で近い位置にサービスを配置するための識別名です。

そこで、「Yes」オプションを選び、グループ名hatsuneで東アジアを選択します。 これによりhatsuneグループを指定することで東アジアのデータセンタの中の近い位置に配置されることになります。

Hosted Servicesの追加

Hosted Servicesを選択します。

サービス名として「HelloAzureService」を入力して、備考欄に説明を入力します。

Hosted Serviceの公開用URLを指定して、Hosted Service Affinity Groupは、Storage Serviceと近い場所を指定するためにStorage Accountの方で指定した「東アジア - hatsune」としました。

設定が終わればサイドメニューに要素が追加され画面の状態も発行前なので次のようになっています。

Visual Studioに戻って作業を継続すればドロップダウンリストに「HelloAzureService」や「HelloAzure」が選択できるようになっています。

[クラスドサービスの発行]ダイアログで[OK]をクリックすれば発行が始まり、[Windows Azureのアクティベイティログ]に状況が表示されます。今回のサンプルでは、17:25:41に発行を開始し完了は17:39:38でした。

COPYRIGHT (C) 2008 初音玲 All rights reserved. / Running .NET Framework 4.0.30319.42000