Meet the New Windows Azure

2012年6月8日は新しいWindows Azureと出会えた記念日ですね。

image

というわけで大本営発表きました!

ま、本命は今日の5時から始まる Meet Windows Azure の発表ですけどね!

その他もろもろ先行で発表されてる内容は既にさとうなおきさんが翻訳されてたりするのでそちらもどうぞ。

細かい更新内容はこちら → What’s New in Windows Azure

以下赤シャツBlogの名状しがたき個人的見解みたいなのです。

新しい管理ポータルとコマンドラインツール

既にいろいろ出てますが新しい管理ポータルが利用可能になりました。

新しい管理ポータルはSilverlightベースをやめてHTML5ベースで再構築されてます。つまるところ、Windows、Mac、Linux、モバイルを問わずいろいろ管理できるようになりました。

新しい機能としては従来の機能だけでなくダッシュボードとしてパフォーマンスの確認、簡単なコンフィグの修正、スケーリングが可能になりました。※但し現状はACSなどの管理ができませんけどね :)

簡単なモニタリングであればダッシュボードから見れるのがいいですね。

またRESTベースのWeb APIとして管理系APIはすべて提供されることになりました。また既に多数のOS向けにコマンドラインツールが提供されているので、管理タスクの自動化もOS問わずできるようになりました。もちろんApache2ライセンスのもとGitHubで公開されてます!

Virtual Machine

今までBetaだったVM RoleがWindows Azure Virtual Machinesとして新しくなりました。これがいわゆるWindows AzureのIaaS対応とか言われてたやつですね。

新しいVirtual MachinesではカスタムのVHDを使用した従来のVM Role的な利用以外にも組み込みのイメージを使った迅速な展開が可能です。

OpeneessでもありましたがLinux系(CentOS、OpenSUSE、SUSE Linux Enterprise、Ubuntu)がサポートされてます。Hyper-Vのテクノロジが駆使されてますね~

リモート管理は非Windowsの場合、SSHで行うことができます。おなじみですね。

Virtual Machinesでは追加のディスクを割り当てたりできますよ。つまり(ry

 

Web Sites

平たくいうとMS版のHerokuです。App Harborです。コードネーム”Antares”です。他と違うのはIIS上で動いてるということ。つまり.NETだけでなくPHPもNode.jsも動くよ!今まではなんだかんだ言ってインスタンス=サーバー単位で起動やら動作してたのでスケールするにもそれなりの時間を要してたり、デプロイに時間がかかったりしてました。新しいWindows Azure Web SitesではPaaSとして本当の意味でマルチテナントですぐにアプリを展開できるようになります。10秒で!

新規にWeb Siteを立ち上げることもできるし、ギャラリーからWordPressなど予め組み込まれたWeb Siteを利用することもできます。

※ちなみに今までのWeb Roleなどはそのまま。サービスとしての名称はWindows Azure Cloud Serviesになりました。(先月あたりの明細に書いてる名前がやっとつながりましたね!)

Web Siteは一般的な方法でWebアプリを展開できます。Git、TFS、FTP、WebDeploy!

Pushしたらすぐに終わるよ!

しかも10 Web Sitesまで無料だって(今だけかどうかはわからんけど)。

仕組み的には共有インスタンス上にWeb Siteが展開される感じです。

エラスティックにするためにインスタンスを予約しておくこともできます。

課金はもちろん時間単位。

Cloud Servicesと分散キャッシュ

これまでのWeb RoleやWorker Roleなどのホストサービス(Hosted Services)はCloud Servicesになりました。で、分散キャッシュ機能が追加。

分散キャッシュ

新しく追加された分散キャッシュ機能はWindows Server AppFabric Cache Server APIをサポートするだけでなく、memcachedプロトコルもサポートされます。PHP等OSS系のアプリからでも簡単に利用できますね。今まで苦労してMemcached構築してた手間がなくなるってもんです!

またよく見るとわかりますが、各インスタンスの空きメモリをうまく使う方法だけでなく、Worker Role上にキャッシュ専用インスタンスを構築することもできます。

 

新しいSDKとTools

今日、新しいSDKやToolsがリリースされてました。WebPlatform Installer 4.0からインストールすることもできるし、ダウンロードセンターやGitHubから取得することができます。

どれだけの言語サポートするんだって気もしますがOpennessはいいことだ!

Windows Azure SDK for .NET – June 2012で一番大きな変更点は分散キャッシュ機能がサポートされたことと、Visual Studio 2012 RCおよびVisual Studio 2012 Express for Webをサポートしたことですね。

これでOS問わず開発・管理することができるようになりました。

という感じで盛りだくさん、1回じゃ伝えきれない感じですが、細かいところはMeet Windows Azureを見ましょう!

それで、FlexibleでOpenでRock Solidな新しいWindows Azureを使って楽しいことしていきましょう!

Windows Developer Days のセッション資料公開

というわけで Windows Developer Days のセッション動画やスライドが公開されました。

見逃したあのセッションやあのセッションを動画とスライドで見れるなんて幸せですね!

ちなみにヤマハの剣持さんとおいらのセッションはスライドのみとなっております。

お察しください!!!(

TechFieldersの集い 2012 初夏で喋りました

名だたるSystem Centerの著名人の皆様に紛れ込んでなぜか若輩者のおいらがSystem Centerについてしゃべってきました。

Windows Azureを一応メインで触ってる身ですが、なんでSystem Center?という感じでSystem Center使うとこんなことが!的なのをお話しました。

とはいえ伝えたかったのはWindows Azure含めSystem Centerなりの製品使って自動化・簡略化できることろは任せちゃってITサービスをよりよくするために注力しましょうよということなんですが。

なんにせよITProな方のノウハウって表に出にくいし大事なので、うまく活用頂きたいですね。

動的にモジュールを読み込む

Windows Azure Blog Storage上にアセンブリを置いて動的に読み込んでみましょう。

何の変哲もないインターフェース用意して

image

適当に2つほど実装して個別のアセンブリを作っておきます。

imageimage

MarshalByRefObjectがポイントですね。

ビルドしたアセンブリはBlobにUpしておきましょう。

一応Privateコンテナです。

さて今回はサンプルなのでWorkerRole内でアセンブリをロードして定期的に実行するようにします。

で、実際にアセンブリをロードするわけです。

		private void LoadAssembly(string AssemblyUrl,string AssemblyTypeName)
		{
			if (SampleAppDomain != null)
			{
				AppDomain.Unload(SampleAppDomain);
			}

			PermissionSet trustedLoadFromRemoteSourceGrantSet
				= new PermissionSet(PermissionState.Unrestricted);

			AppDomainSetup trustedLoadFromRemoteSourcesSetup = new AppDomainSetup();
				trustedLoadFromRemoteSourcesSetup.ApplicationBase =
					AppDomain.CurrentDomain.SetupInformation.ApplicationBase;

			SampleAppDomain = AppDomain.CreateDomain("SampleDomain", null, trustedLoadFromRemoteSourcesSetup, trustedLoadFromRemoteSourceGrantSet);
			var webpermission = new WebPermission(
						NetworkAccess.Connect,
						AssemblyUrl
					);
			SampleAppDomain.PermissionSet.SetPermission(webpermission);
			SampleAppDomain.PermissionSet.Demand();
			SampleAssembly = (ISample.ISample)SampleAppDomain.CreateInstanceFromAndUnwrap(AssemblyUrl, AssemblyTypeName);
		}

 

こんな感じですね。リモートホスト上にアセンブリがあるのでWebPermissionで権限を付けてます。それ以外はいたって普通。

あとBlobをプライベートコンテナに置いているので、共有アクセス署名(SAS: Shared Access Signature)を付けないとアクセスできません。

		private string GetAssemblyUrl()
		{
			var assemblyName = RoleEnvironment.GetConfigurationSettingValue("AssemblyBlobName");
			var assemblyContainerName = RoleEnvironment.GetConfigurationSettingValue("AssemblyBlobContainerName"); ;
			var connectionString = RoleEnvironment.GetConfigurationSettingValue("AssemblyBlobStorage"); ;

			var account = CloudStorageAccount.Parse(connectionString);
			var client = account.CreateCloudBlobClient();

			var assemblyBlobContainer = client.GetContainerReference(assemblyContainerName);

			var policy = new SharedAccessPolicy
			{
				Permissions = SharedAccessPermissions.Read,
				SharedAccessStartTime = DateTime.UtcNow.AddMinutes(-5),
				SharedAccessExpiryTime = DateTime.UtcNow + TimeSpan.FromMinutes(10)
			};

			CloudBlob blob = assemblyBlobContainer.GetBlobReference(assemblyName);
			var accessurl = blob.Uri.ToString() + blob.GetSharedAccessSignature(policy);
			Trace.WriteLine(accessurl);

			return accessurl;
		}

 

SAS付けた状態のURLを返してもらって、そいつをCreateInstanceFromAndUnwrapに渡します。

ポイントはアクセス期限の開始時刻を現在時刻からマイナス5分してるところぐらいですかね。。。Blob Storage上の時刻よりローカルPCのほうが進んでたために、アクセスした時刻が署名で許可してる期間外になってFileNotFoundExceptionになるというヒドイ目を見ました。ふぅ。

最後にロードしたいアセンブリの情報をサービス設定ファイルに書いておきましょう。

image

で、サービス設定ファイルが更新されたらアセンブリをロードしなおすようにします。

		public override bool OnStart()
		{
			LoadAssembly(GetAssemblyUrl(), RoleEnvironment.GetConfigurationSettingValue("AssemblyTypeName"));

			RoleEnvironment.Changed += (s, e) =>
			{
				if (e.Changes.Any(chg => chg is RoleEnvironmentConfigurationSettingChange))
				{
					LoadAssembly(GetAssemblyUrl(), RoleEnvironment.GetConfigurationSettingValue("AssemblyTypeName"));
				}
			};

			return base.OnStart();
		}

とりあえずこんな感じ。

じゃ実行してみましょう。

起動した時はSample1.dllがロードされて、サービス設定ファイルをSample2.dllに変更してUpdateしたらちゃんとロードしなおされてますね!

あとは気が向いたらBlob上のDLLを入れ替えるなりしてロードしなおせばいいわけです。

もちろんロードした後はローカルのキャッシュで動作してるので、SASの期限切れても問題ないですしBlob上からファイルがなくなっても問題ないです。

拡張モジュールの実装とかいろいろ出来そうですね。AppDomainを工夫したらマルチテナントで遊べると思います。

 

おまけ。


using System;
using System.Diagnostics;
using System.Linq;
using System.Net;
using System.Security;
using System.Security.Permissions;
using System.Threading;
using Microsoft.WindowsAzure;
using Microsoft.WindowsAzure.ServiceRuntime;
using Microsoft.WindowsAzure.StorageClient;
namespace WorkerRole1
{
public class WorkerRole : RoleEntryPoint
{
private ISample.ISample SampleAssembly;
private AppDomain SampleAppDomain;
public override void Run()
{
while (true)
{
Trace.WriteLine(SampleAssembly.Execute());
Thread.Sleep(5000);
}
}
public override void OnStop()
{
if (SampleAppDomain != null)
{
AppDomain.Unload(SampleAppDomain);
}
base.OnStop();
}
public override bool OnStart()
{
LoadAssembly(GetAssemblyUrl(), RoleEnvironment.GetConfigurationSettingValue("AssemblyTypeName"));
RoleEnvironment.Changed += (s, e) =>
{
if (e.Changes.Any(chg => chg is RoleEnvironmentConfigurationSettingChange))
{
LoadAssembly(GetAssemblyUrl(), RoleEnvironment.GetConfigurationSettingValue("AssemblyTypeName"));
}
};
return base.OnStart();
}
private void LoadAssembly(string AssemblyUrl,string AssemblyTypeName)
{
if (SampleAppDomain != null)
{
AppDomain.Unload(SampleAppDomain);
}
PermissionSet trustedLoadFromRemoteSourceGrantSet
= new PermissionSet(PermissionState.Unrestricted);
AppDomainSetup trustedLoadFromRemoteSourcesSetup = new AppDomainSetup();
trustedLoadFromRemoteSourcesSetup.ApplicationBase =
AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
SampleAppDomain = AppDomain.CreateDomain("SampleDomain", null, trustedLoadFromRemoteSourcesSetup, trustedLoadFromRemoteSourceGrantSet);
var webpermission = new WebPermission(
NetworkAccess.Connect,
AssemblyUrl
);
SampleAppDomain.PermissionSet.SetPermission(webpermission);
SampleAppDomain.PermissionSet.Demand();
SampleAssembly = (ISample.ISample)SampleAppDomain.CreateInstanceFromAndUnwrap(AssemblyUrl, AssemblyTypeName);
}
private string GetAssemblyUrl()
{
var assemblyName = RoleEnvironment.GetConfigurationSettingValue("AssemblyBlobName");
var assemblyContainerName = RoleEnvironment.GetConfigurationSettingValue("AssemblyBlobContainerName"); ;
var connectionString = RoleEnvironment.GetConfigurationSettingValue("AssemblyBlobStorage"); ;
var account = CloudStorageAccount.Parse(connectionString);
var client = account.CreateCloudBlobClient();
var assemblyBlobContainer = client.GetContainerReference(assemblyContainerName);
var policy = new SharedAccessPolicy
{
Permissions = SharedAccessPermissions.Read,
SharedAccessStartTime = DateTime.UtcNow.AddMinutes(-5),
SharedAccessExpiryTime = DateTime.UtcNow + TimeSpan.FromMinutes(10)
};
CloudBlob blob = assemblyBlobContainer.GetBlobReference(assemblyName);
var accessurl = blob.Uri.ToString() + blob.GetSharedAccessSignature(policy);
Trace.WriteLine(accessurl);
return accessurl;
}
}
}

view raw

gistfile1.cs

hosted with ❤ by GitHub

Facebook Open Graphを使ってみる

FacebookのOpen Graphを実際に触ってみよう企画です。

※サンプルソースのリポジトリ名がfacebookappli04なのは連載回数を間違えて4回目と思ってたからです(

Open Graphおもしろいね!

余談ですが、だんだんとAzure分が少なってきてますね。(まぁしょうがない気もする)

Go Azure

6月29日~6月30日の2日間、ベルサール汐留 でMicrosoftとJAZUGの共催イベント、Go Azureが開催されます。

image

内容は最新のWindows Azureに関する情報てんこ盛り!

Day 1
パブリック クラウド活用の成功事例や Windows Azure のもたらす新しい可能性など、最新情報をお伝えします。

Day 2
Japan Windows Azure User Group (JAZ) が中心となって、Windows Azure 関連の技術セッションやハンズオン セミナーのほか、エキスパートへの質問コーナー、さらにネットワーキング パーティなどを予定しています。

日付を見ても分かる通り、「MEET Windows Azure」の後、、、ということは、言わなくてもわかるな?(

ぜひ予定を空けて今後の情報をお待ちください!

Cloud meet up in YOKOTE

6月15日~6月17日、秋田県横手市で開催される「ITエースをねらえプロジェクト – Cloud meet up in YOKOTE」で講師します。

ITエースをねらえプロジェクト

ITエースをねらえプロジェクト では、Cloud Meet upをテーマに、6月15日から17日までの3日間、クラウドサービスを利用した5つのセッションをお送りします。クラウドサービスって何?という方から、クラウドを利用したサービスを開始したい方まで、すべての方に楽しんでいただけるワークショップとセミナーです!

担当は「クラウドサービスデベロップメントミーティング」ということで開発よりの話になるかと思います。

ちなみにJAZUGからは @harutama と一緒に2人で参加します。他の講師陣もパクえ先生始め、えらく豪華なので最寄りの方はぜひご参加ください!

秋田でMeet up!

Community Open Day 2012

6月9日に全国で行われるCommunity Open Day 2012の大阪会場でしゃべります。

 

コミュニティに所属している方はもちろん、未だコミュニティに所属していない方々にコミュニティの活動内容(勉強会)を披露し、興味があればそのコミュニティに参加してもらう機会を構築するオンライン/オフラインイベントです。
6月9日に全国のコミュニティと合同で、勉強会を行い会場に参加できる方は会場に参加、会場が遠地のため参加できない場合は「USTREAM」で参加するといったイベントです。
イベント自体はコミュニティ主体ですが、後援としてマイクロソフト社が付いているため、午前中はWindows 8を題材にしたキーノートや、DeveloperやITPro、などをターゲットにしたジェネラルセッションを実施します。
午後は各コミュニティから現場視点での話や先進的な技術の紹介などの勉強会を実施します。

6月8日に何かあるみたいなので、そのあたり含めて最新情報も盛り込めるかも? ちなみに @k1hash と一緒になので大阪で会われてない方もぜひぜひ遊びに来てください!

TechFieldersの集い 2012 初夏

直近ですが、5/19と5/26にTechFieldersの集いでしゃべります。

今回のテーマは、ずばり「System Center」。
そう、マイクロソフトの運用管理製品群の総称です。
2012 年はシステム管理者にとって重要な年です。なぜならば、System Center がこぞってリニューアルされるからです。
System Center 萌えの皆さまにとっては、まさに血湧き肉躍る年と言えます。
今回の「集い」では、恒例「普段表に出ないマイクロソフト エンジニアによるセッション」をご用意している他、各界の System Center 名人の方々に成功事例、失敗体験、儲かった話、損した話、System Center への文句…などをお話しいただきます。
いままで System Center をご存知なかった方も、この機会に是非ともお見知りおきいただければ幸いです。
イベントの後には、やはり恒例の懇親会も開催しますので体調を整えてご参加ください。
希少なロゴ グッズが当選するじゃんけん大会も予定しています。

おいらは「パブリック クラウド担当の現場も注目している System Center 2012 ~その理由は?」というタイトルで何か喋ります。

ご都合よろしければご参加くださいませ。

Windows Azure のセキュリティとプライバシー

プライバシーについて

2012年5月にWindows Azureのプライバシーに関する声明が更新されました。

あくまでマイクロソフトと、顧客である我々(Windows Azureの契約者)との話であることに注意が必要です。冒頭にもある通りWindows Azureを使用して提供しているアプリケーション等が扱うデータ等のプライバシーポリシーはマイクロソフトではなくそのサービス、アプリケーションのベンダーが責任を負います。

マイクロソフトはWindows Azure上に保存・アップロードされるデータはサービスを提供する目的でのみ使用される(使用というとあれですがGeoレプリケーションしありとかそういう使用かな)とのこと。ただ文中にもありますがGeoレプリケーションなど暗黙的に保存されてるデータの場所が国をまたがる場合があるのでそのあたりも気を付けましょう。なおプレビュー版(CTPやベータなど)は若干ポリシーが異なります。

セキュリティについて

こちらにまとまってます。

また、各クラウドのセキュリティアセスメントを登録し、だれでも参照できるCSA (Cloud Security Alliance)といったサイトがあるのですが、こちらのSTAR (Security Trust and Assurance Registry)にWindows Azure(とOffice 365、Dynamics CRM)が登録されています

このサイトからおなじみのWindows Azureのセキュリティに関する状況を参照・確認(ダウンロード)することができますので便利ですね。また今後登録されるクラウドコンピューティング提供者が増えると比較したりする際の情報取りまとめサイトとして成長されることが期待されます。

※但しこのCSA自体は第三者機関による認証等はないので、登録される情報はあくまで各クラウドベンダーの自己申告です。とはいえ少し探しにくいこの手の情報にまとめてアクセスできるのはいいですね。

法律関連

よく導入検討時などに言われる米国愛国者法(いわゆるパトリオット法)などの懸念や誤解については以下のサイトがよくまとまっています。

心配な方はよく読んでくださいね。

また特に大事なところとしては準拠法と管轄裁判所ですね。

準拠法と管轄裁判所は日本

グローバルに展開するクラウドの場合、準拠法や管轄裁判所が米国などの海外になっている場合があります。マイクロソフトのOffice 365の場合は、準拠法は日本法、管轄裁判所は基本的に東京地方裁判所となっています。

※上記サイトより引用

Windows Azureなど契約する際に利用するMicrosoft Online Services Customer Portal のオンラインサブスクリプション契約の条件には以下の通り記載があります。

10. 雑則
  1. 準拠法   本契約は日本の法律を準拠法とします。1980 年国際物品売買契約に関する国連条約およびその付属文書は、本契約には適用されません。本製品は、著作権およびその他の知的財産権関連法ならびに国際条約により保護されています。

  2. 紛争の解決   本契約の強制履行を求めて提訴する場合は、東京地方裁判所に提起しなければなりません。上記にかかわらず、いずれの当事者も、知的財産権の侵害または秘密保持義務の違反に関する差止請求を行う場合には、任意の管轄裁判所において行えるものとします。

オンライン サブスクリプション契約 ご契約条件 より引用

というわけでマイクロソフトのオンラインサービス関連はかなり日本ユーザーにやさしい柔軟な対応をしてもらえるようです。

 

余談

各ページ、シンプルで集約されつつあってわかりやすくなりましたね。後はもろもろ足らない部分の日本語化、Windows AzureだけじゃなくGFSやMIcrosoft Online Services全般の情報もどこからか集約して見れるとうれしいな。というか必要だと思います。