Windows Azure Programming

Preview:

DESCRIPTION

 

Citation preview

VSUG DAY 2009.12.5

Windows Azureプログラミングプログラミングプログラミングプログラミング

基本基本基本基本ののののキキキキ

VSUG Visual Studio フォーラムリーダー

酒井達明Microsoft MVP for Solutions Architect

VSUG DAY 2008 Winter 東京VSUG DAY 2009 Winter

VSUG DAY 2009.12.5

アジェンダ

• Windows Azure Platformの変遷

• Windows Azure Platformを構成するサービス

• Windows Azureファブリック

• WebとWorker/2つのロール

• 簡単なAzureアプリケーション

• ストレージの使い方

• AppFabricによるサービス連携

VSUG DAY 2009.12.5

Azure ServicesAzure Services PlatformPlatform

Azure Services PlatformAzure Services Platform

VSUG DAY 2009.12.5

Windows AzureWindows Azure PlatformPlatform

Windows Azure PlatformWindows Azure Platform

20092009年年年年年年年年33月月月月月月月月

VSUG DAY 2009.12.5

Windows AzureWindows Azure PlatformPlatform

Windows Azure PlatformWindows Azure Platform

20092009年年年年年年年年77月月月月月月月月

VSUG DAY 2009.12.5

Windows AzureWindows Azure PlatformPlatform

Windows Azure PlatformWindows Azure Platform

20092009年年年年年年年年99月月月月月月月月

VSUG DAY 2009.12.5

Windows AzureWindows Azure PlatformPlatform

Windows Azure PlatformWindows Azure Platform

最終的最終的最終的最終的にこれににこれににこれににこれに落落落落ちちちち着着着着きましたきましたきましたきました☺☺☺☺最終的最終的最終的最終的にこれににこれににこれににこれに落落落落ちちちち着着着着きましたきましたきましたきました☺☺☺☺

VSUG DAY 2009.12.5

Windows Azure Platformのサービス

– クラウドのためのオペレーティングシステム

– 64bitベースのWindows Server 2008+IIS7

– .NET, Native C++(64bit), FastCGIアプリを実行

– 3種のストレージ(Blob,Table,Queue)

• Blob内に仮想的なNTFSを作成可能(XDrive)

–ロールベースアーキテクチャ• Webロール、Workerロール、VMロール

VSUG DAY 2009.12.5

Windows Azure Platformのサービス

–旧.NET Services

–最初は2種のサービスを提供

–サービスバス

• 安全にオンプレミス&クラウドのサービスを連携

• ファイヤーウォールやNATを介した連携も可能

–アクセスコントロール

• オンプレミス&クラウドの間でのシングルサインオンを実現

• クレームベースのセキュリティトークンサービス

VSUG DAY 2009.12.5

Windows Azure Platformのサービス

–読んで字の如く「SQL Server on the Cloud.」

– TDS(Tabular Data Stream)をサポート• ADO .NET・・・・・OK!

• ODBC・・・・OK!

• SQL Client・・・・OK!

• SQL CLR・・・・残念!

• RESTful・・・残念!(ADO.NET Data Servicesを使って自作可能)

–最大10GBのデータ領域を利用可能• ちょっと少なくないですか?でも、バージョン1ですから!

–オブジェクトエクスプローラーも使用可

VSUG DAY 2009.12.5

Windows Azureプログラミングプログラミングプログラミングプログラミング

VSUG DAY 2009.12.5

Windows

Server

Windows

XP/Vista/7

Windows

MobileClients

Application

s

Application

sアプリケーションアプリケーションアプリケーションアプリケーション

Windows Azure

Applicatio

ns

Applicatio

nsアプリケーションアプリケーションアプリケーションアプリケーション

AppFabric

SQL Service

アプリケーションアプリケーションアプリケーションアプリケーション

ファブリック

コンピュート ストレージ

Config

Windows Azure Fabric

VSUG DAY 2009.12.5

ストレージ

Web ロールロード

バランス

Worker ロール

アカウント

ブロブ テーブル キュー

2つのロール

VSUG DAY 2009.12.5

Web ロール

• インターネット経由のリクエストを処理

• IIS7 ホスト

– ASP.NET / WCF ホスト

– SSL サポート

• In-Bound接続のみ可能

• Out-Bound接続なし

• Cloud Service プロジェクト

ストレージサービス

インターネットインターネット

Web

ロールロード

バランサー

VSUG DAY 2009.12.5

Worker ロール

• バックグラウンド プロセス

• Web ロールからは、キューでリクエストを読込む

• In-Bound接続なし

• Out-Bound接続は可能

• Windows Azure Trust Policy

• Cloud Service プロジェクト

ストレージサービス

インターネットインターネット

Worker

ロール

VSUG DAY 2009.12.5

開発環境の構築

• OS及びVisual Studioの準備• Windows Vista SP1以降, Windows Server 2008, Windows 7, Windows Server 2008 R2

• Visual Studio 2008 or Visual Studio 2010

– (Express Editionでも可)

• SDKおよびツールをダウンロード

– http://www.azure.com/へアクセス

– 「Get Tools & SDK」をクリック

–ダウンロードするSDKおよびツールは1種類

• Windows Azure Tools for Microsoft Visual Studio

• ツールのインストール

VSUG DAY 2009.12.5

Azureのアカウントを作成する

• CTPの招待キーはMicrosoft Connectで入手– https://connect.microsoft.com/site/sitehome.aspx?SiteID=681

–※招待キーの送付には数日かかります

• Windows Azureポータルにログイン

– http://windows.azure.com/

–予めログイン用のLive IDを用意

– Accountでトークン(プロダクトキー)を追加する

VSUG DAY 2009.12.5

VSUG DAY 2009.12.5

VSUG DAY 2009.12.5

ソリューションの作成

• Hosted Serviceのアイコンをクリック

– Service LabelとService Descriptionは任意の値

を入力

– Hosted Service URLのService Name一意の値

• 英小文字数字

• 取得可能か否かは「Check Availability」で確認

– Hosted Service Affinity Groupはデフォルトで

VSUG DAY 2009.12.5

demodemo最も簡単なWebロールの例

Hello VSUGDAY

VSUG DAY 2009.12.5

Visual Studioによる開発の流れ

• プロジェクトの新規作成– Cloud Serviceプロジェクトテンプレートを選択

–追加したいロールを選択

• ロールは複数追加可能

–各ロールの開発

– Development Fabric上でのテスト

VSUG DAY 2009.12.5

2通りのロールの連携

• WebロールとWorkerロールは疎結合– WebロールによるWorkerロールの直接参照はNG(近い将来可能になる予定)

–ストレージを介したコミュニケーションに限定

– リクエストはQueue

–付加的なデータはBlob or Tableで受渡し

VSUG DAY 2009.12.5

ロールを分けるメリット

ロードバランス

QueueQueue

WorkerWorkerロールロール

VSUG DAY 2009.12.5

Windows Azure ストレージ

• Blob

– 単純な階層を持つファイルストレージ

• テーブル

– リレーショナルを持たない構造化ストレージ

• キュー

– メッセージ交換のための信頼性のあるストレージ

Blob キューキューキューキューテーブルテーブルテーブルテーブル

3種類種類種類種類ののののストレージストレージストレージストレージ

VSUG DAY 2009.12.5

Queueストレージの構造

メッセージメッセージキューキュー

SakaiSakai

uploadjobuploadjob

http://...

http://...

indexjob http://...

VSUG DAY 2009.12.5

Queue利用の流れ

• ストレージアカウントのインスタンス生成

• Queueストレージインスタンス生成

• Queueの取得と生成

• 送信時– Messageの作成

– Messageのポスト

• 受信時– Messageの取得

–取得済Messageの削除

VSUG DAY 2009.12.5

Queueによるロール連携

//ストレージアカウントストレージアカウントストレージアカウントストレージアカウントのののの生成生成生成生成CloudStorageAccount queueaccount =

CloudStorageAccount.FromConfigurationSetting(”ConnectionString”);

//Queueストレージインスタンスストレージインスタンスストレージインスタンスストレージインスタンス生成生成生成生成CloudQueueClient qsEvalAnswer = queueaccount.CreateCloudQueueClient();

try

{

//QueueストレージストレージストレージストレージからからからからQueueをををを取得取得取得取得CloudQueue qAnswer =

qsEvalAnswer.GetQueueReference(“azurevalanswer”);

qAnswer.CreateIfNotExist(); //Queueのののの新規作成新規作成新規作成新規作成//メッセージメッセージメッセージメッセージををををポストポストポストポストqAnswer.AddMessage(new CloudQueueMessage(“answes:12345”)); }

catch (StorageClientException) { }

メッセージメッセージメッセージメッセージ送信側送信側送信側送信側

VSUG DAY 2009.12.5

Queueによるロール連携

//Queueストレージインスタンスストレージインスタンスストレージインスタンスストレージインスタンスのののの作成作成作成作成まではまではまではまでは先先先先ほどとほどとほどとほどと同同同同じじじじbool exists;

try

{

CloudQueue qAnswer =

qsEvalAnswer.GetQueueReference(”azurevalanswer”);

qAnswer.CreateIfNotExist(); //Queueのののの新規作成新規作成新規作成新規作成CloudQueueMessage msg = qAnswer.GetMessage();

if (msg != null)

{

//メッセージメッセージメッセージメッセージををををstringでででで取得取得取得取得foo(msg.AsString);

qAnswer.DeleteMessage(msg); //メッセージメッセージメッセージメッセージのののの削除削除削除削除}

}

}

catch (StorageClientException) { }

メッセージメッセージメッセージメッセージ受信側受信側受信側受信側

VSUG DAY 2009.12.5

Blobコンテナアカウント

SakaiSakai

PicturesPictures

img001.jpgimg001.jpg

img002.jpgimg002.jpg

MoviesMovies mov001.avimov001.avi

Blobの構造

VSUG DAY 2009.12.5

Sakai

pictures

IMG001.JPG

IMG002.JPG

movies MOV1.AVI

Block 1

Block 2

Block 3

Blockによるデータの分割

VSUG DAY 2009.12.5

Blob利用の流れ

• ストレージアカウントのインスタンス生成

• Blobストレージインスタンス生成

• Containerの取得と生成(新規作成時)–作成時にメタデータを設定

• Blobインスタンスの生成–作成時にメタデータを設定

VSUG DAY 2009.12.5

Blobの利用例

CloudStorageAccount strg_account;

CloudBlobClient strg_Bolbs;

strg_account =

CloudStorageAccount.FromConfigurationSetting("DataConnectionString“);

Strg_Bolbs = strg_account.CreateCloudBlobClient();

CloudBlobContainer cntNewAlbum;

//コンテナコンテナコンテナコンテナのののの新規作成新規作成新規作成新規作成

cntNewAlbum = m_PhotoBolbs.GetContainerReference(“mypictures”);

cntNewAlbum.CreateIfNotExist();

//コンテナコンテナコンテナコンテナののののメタデータメタデータメタデータメタデータ設定設定設定設定

cntNewAlbum.Metadata.Add("AlbumDescription“,description);

cntNewAlbum.SetMetadata();

//コンテナコンテナコンテナコンテナへのへのへのへのアクセスアクセスアクセスアクセス権権権権をををを設定設定設定設定

var permissions = cntNewAlbum.GetPermissions();

permissions.PublicAccess = BlobContainerPublicAccessType.Container;

cntNewAlbum.SetPermissions(permissions);

VSUG DAY 2009.12.5

Blobの利用例

//Blobのののの書書書書きききき込込込込みのみのみのみの例例例例

CloudBlob blbNewImage = cntAlbum.GetBlobReference(“blobname”);

//Blobににににデータデータデータデータをををを読読読読みみみみ込込込込むむむむ

blbNewImage.UploadFile(“C:¥images¥newpicture.jpg”);

//Blobののののメタデータメタデータメタデータメタデータをををを設定設定設定設定

blbNewImage.Metadata[“description”] = HttpUtility.UrlEncode(“写真写真写真写真1111”);

blbNewImage.SetMetadata();

//Blob読読読読みみみみ出出出出しのしのしのしの例例例例

CloudBlob blbPicture = cntBlobs.GetBlobReference(“blobname”);

//メタデータメタデータメタデータメタデータをををを読読読読みみみみ出出出出すすすす前前前前ににににFetchAttributesをををを実行実行実行実行しておくしておくしておくしておく

blbPicture.FetchAttributes();

//メタデータメタデータメタデータメタデータのののの読出読出読出読出しししし

string description = HttpUtility.UrlDecode(blbPicture.Metadata["description“]);

VSUG DAY 2009.12.5

Blob使用時の注意事項

• メタデータはHTTPヘッダの一部として受渡–そのままでは日本語が通りません!

– URLエンコードするなどして対応

• コンテナ名は小文字英数字で!– コンテナ名がそのままサブフォルダ名に

VSUG DAY 2009.12.5

demodemoBlobを使ったアプリケーションの例

写真共有サイトの構築

VSUG DAY 2009.12.5

エンティティテーブルアカウント

SakaiSakai

usersusers

Name=…hash=…

Name=…hash=…

photoindexTag=…id=…

図5

http://<アカウント>.table.core.windows.net/<テーブル名>

VSUG DAY 2009.12.5

Partition Key

Document

Name

Row Key

Version

Property 3

Modification

Time

….. Property n

Description

福利厚生Doc V1.0 3/21/2007 ….. 2007年度

福利厚生Doc V1.0.6 9/28/2007 2008年度用酒井作成中

勤怠Doc V1.0 3/28/2007 2007年度

勤怠Doc V1.0.1 7/6/2007 2008年度用砂洲作成中

必須

異なるプロパティの組み合わせでもよい

プロパティ<Name, TypedValue>ペアが保

スキーマを持たない

255個以内のプロパティ

図6

VSUG DAY 2009.12.5

Tableストレージの使い方

• ADO .NET Data Servicesを利用

– Context:TableServiceContextを継承

– Entity:TableServiceEntityを継承

• 利用するプロパティの一覧を定義

• PartitionKeyとRowKeyはTableServiceEntity内で

定義済

• クエリはLINQを利用

VSUG DAY 2009.12.5

Tableの定義例

public class EvaluationsDataServiceContext : TableServiceContext

{

public EvaluationsDataServiceContext(CloudStorageAccount accountInfo)

: base(accountInfo.BlobEndpoint.ToString(),accountInfo.Credentials)

{ }

public IQueryable<EvaluationsRow> EvaluationsTable

{

get

{

return this.CreateQuery<EvaluationsRow>(“Evaluations”);

}

}

}

VSUG DAY 2009.12.5

Tableの定義例

public class EvaluationsRow : TableServiceEntity

{

public EvaluationsRow() : base() { }

public EvaluationsRow(string EventID, string ID, string Title)

{

PartitionKey = EventID;

RowKey = ID;

EvalID = ID;

EvalTitle = Title;

EvalExp = DateTime.Today + new TimeSpan(90, 0, 0, 0, 0);

}

public string EvalID { get; set; }

public string EvalTitle { get; set; }

public DateTime EvalExp { get; set; }

}

VSUG DAY 2009.12.5

Tableの利用例

CloudStorageAccount strg_account;

CloudTableClient strg_Table;

strg_account =

CloudStorageAccount.FromConfigurationSetting("DataConnectionString“);

strg_Table = strg_account.CreateCloudTableClient();

TableServiceContext svc = strg_Table.GetDataServiceContext();

var query =

svc.CreateQuery<EvaluationsRow>("EvaluationsTable“).Select(c => c);

VSUG DAY 2009.12.5

demodemoTable&Queueを使った

アプリケーションの例

セッションアンケートサイトの例

VSUG DAY 2009.12.5

既存のASP .NETからの移行

• 移行は簡単– SQL Serverを利用している場合→SQL Azure

• 既存のASP.NETプロジェクトをAzure化• 空(ロールなし)のCloud Serviceプロジェクトを作成

• 既存のASP .NETプロジェクトをソリューションに追加

• パッケージの”Roles”にASP.NETを関連付け

VSUG DAY 2009.12.5

demodemo既存ASP .NETアプリケーションのAzure化

VSUG DAY 2009.12.5

注意事項

• ASP .NETの.NET Frameworkバージョンは3.5SP1– 他のバージョンで実行されている場合は3.5SP1に変更

• このままでは完全なAzureアプリではない– プロジェクトにMicrosoft.WindowsAzureライブラリを参照設定

– WebRole.cs(or.vb)を追加し、以下のイベントハンドラを実装

• OnStart

• RoleEnvironmentChanging

VSUG DAY 2009.12.5

WebRoleの利用例

using System.Linq;

using Microsoft.WindowsAzure.Diagnostics;

using Microsoft.WindowsAzure.ServiceRuntime;

namespace WebRole1

{

public class WebRole : RoleEntryPoint

{

public override bool OnStart()

{

DiagnosticMonitor.Start(“DiagnosticsConnectionString”);

RoleEnvironment.Changing += RoleEnvironmentChanging;

return base.OnStart();

}

private void RoleEnvironmentChanging(object sender, RoleEnvironmentChangingEventArgs e)

{

if (e.Changes.Any(change => change is RoleEnvironmentConfigurationSettingChange))

{

e.Cancel = true;

}}}}

............

VSUG DAY 2009.12.5

AppFabricのののの利用利用利用利用

VSUG DAY 2009.12.5

AppFabricの概要

• Windows Azureはエンタープライズクラウド

– エンタープライズ顧客が利用することを前提

– 他のクラウドにはない高信頼性が要求される

– オンプレミスとクラウドのシームレスな連携

– 適材適所にサービスを配置

• AppFabricはエンタープライズ向けサービス

– サービスバスによる安全なサービス連携

– アクセスコントロールによるシングルサインオン

– キャッシュによるデータアクセス高速化(予定)

– WF4ベースのワークフロー(予定)

– WCFサービスのホスティング(予定)

VSUG DAY 2009.12.5

AppFabricのアーキテクチャ

サービスレジストリサービスレジストリネーミングネーミングアクセス

コントロールサービス メッセージングメッセージング

クライアントクライアント MS/3rd パーティー サービスMS/3rd パーティー サービスオンプレミス ESBオンプレミス ESB

ESBDesktop, RIA, Web デスクトップ

RIAWeb

内製サービス

内製サービス

サービスバス

VSUG DAY 2009.12.5

サービスバスによるサービス連携

サービスバスサービスバス

sb://servicebus.windows.net/services/solution/a/b/

②⼀

⽅向

アウ

トバ

ウン

ドne

t.tcp

接続 TCP/SSL

828TCP/SSL

828TCP/SSL 808/828TCP/SSL 808/828

①双⽅向アウトバウンドソケット接続

③メッセージ③メッセージ ③メッセージ③メッセージ

NATファイアウォールDynamic IP

①登録③ルーティング

NLB

クライアントクライアント サービスサービス

バックエンドのネーミング・ルーティングファブリック

フロントエンドノード

VSUG DAY 2009.12.5

AppFabricサービスバスメッセージング

• プログラミング モデル– 専用の WCF バインディングを提供

おおおお勧勧勧勧めめめめ!!

VSUG DAY 2009.12.5

AppFabricの開発環境

• AppFabric(.NET Services) SDK

– Nov. ‘09CTPが最新

• JavaおよびRubyからも利用可能

– Java:AppFabric SDK for Java Developers

– Ruby: AppFabric SDK for Ruby Developers

• Windows Azure SDKは必須ではない

– オンプレミス内のサービスであれば、不要

VSUG DAY 2009.12.5

demodemoサービスバスサンプルの実行

VSUG DAY 2009.12.5

まとめ

• Windows Azure Platformはエンタープライズ向け

– Windows Azure

– AppFabric

– SQL Azure

• ロールベースのアーキテクチャモデル– WebロールとWorkerロール

– 疎結合モデル

• 3種のストレージ

– Blob, Table, Queue

• サービスバスによるサービス連携

– 安全なサービスの公開を実現

VSUG DAY 2009.12.5

参考文献/URL

• Windows Azure入門

– アスキーメディアワークス刊

– 定価:2,730円

• Windows Azureポータル

– http://azure.com/

• Windows Azure Platformデベロッパーセンター

– http://msdn.microsoft.com/ja-jp/azure/default.aspx

• Twitterタグ:#Azure

• Tatsuaki Sakai’s Blog

– http://ameblo.jp/louisville0919/

Microsoftのクラウドコンピューティング