Azure Guest OS 3.xでARRv3を使う

Windows Azure Advent Calrendar jp: 2012 の #24です。

みなさんご存知の通り、Windows Azureのクラウドサービスおよび仮想マシンでWindows Server 2012が利用できます。

※残念ながらAzure WebサイトはまだWindows Server 2008 R2ベース。

仮想マシンは自分でいろいろ設定して永続化しておけるのでどうってことは無いんですが、みんな大好きクラウドサービスはそういうわけにはいきません。

で、せっかくクラウドサービスのGuest OS 3.xで、Windows Server 2012つまりIIS8が使えるようになったので、ARR(Application Request Router)も対応したものを使いましょーというのが主旨です。

IIS8に対応したARRv3はExternal CacheやURL Rewriteもこれまで通り使えますし、なんといってもWebSocketに対応してるのが嬉しいですね。

とはいえ、IIS8に対応したARRv3はまだBetaなので利用には注意が必要ですが。

続きを読む

Windows Azure管理ポータルが更新されました

いつものように管理ポータルで操作してたらいきなり「新しいバージョンのポータルが利用できます」って表示されてリロードしたらいろいろ新しくなってました(

ということで簡単に気づいた点など。(※差分が分からないので前から実装されてたのがあるかもしれない。)

続きを読む

インスタンスのInputEndpointを取得できない

Windows Azure上でインスタンス間通信する場合、相手のIPアドレスがわからないと何もできません。通常IPアドレスはインスタンス起動時に適当に振られるので、RoleEnvironmentを使ってインスタンスのIPEndpointを取得するのですが、どうもInputEndpointから取れなくなったっぽい。

※インスタンスを列挙してそのインスタンスのIPEndpointを取得してIPアドレスをゲットする、という方法ですが他のインスタンスのInputEndpointが取れない。

ぽい、というのは昔とれた気がするんですけど、SDK1.8だと取れないんですよね。いつからか不明だけどVPNが来たりしたSpring Waveのときかなぁ?

というわけでSDK1.8時代のロール間通信はInternalEndpointを明示的に指定して、そいつのIPEndpointを参照しましょう、という感じになります。

取得するコード的にはこんな感じです。

var role = Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.CurrentRoleInstance.Role;
foreach (var instance in role.Instances)
{
	foreach (var s in instance.InstanceEndpoints.Values)
	{
		if (s != null)
		{
			Console.WriteLine("{0} = {1}:{2}", s.RoleInstance.Id, s.IPEndpoint.Address.ToString(),
								  s.IPEndpoint.Port);
		}
	}
}

 

サービス定義ファイル(CSDEF)はこんな感じ。

<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="WindowsAzure18_45" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2012-10.1.8">
  <WebRole name="MvcWebRole1" vmsize="ExtraSmall">
    <Sites>
      <Site name="Web">
        <Bindings>
          <Binding name="Endpoint1" endpointName="Endpoint1" />
          <Binding name="Endpoint2" endpointName="Endpoint2" />
        </Bindings>
      </Site>
    </Sites>
    <Endpoints>
      <InputEndpoint name="Endpoint1" protocol="http" port="80" />
      <InternalEndpoint name="Endpoint2" protocol="http" port="8002" />
    </Endpoints>
    <Imports>
      <Import moduleName="RemoteAccess" />
      <Import moduleName="RemoteForwarder" />
    </Imports>
    <Runtime executionContext="elevated">
    </Runtime>
  </WebRole>
</ServiceDefinition>

 

テストなので適当にInputEndpointとInternalEndpointを定義してみました。

で、結果はこう。

image

インスタンス0上で実行しました。他のインスタンスのInputEndpointは取れてないですね。でもInternalEndponitは取れてます。

ということで、何かインスタンス間通信したい場合はInternalEndpointをちゃんと定義しましょう、ということで。

ちなみにコンソールアプリとかで

Unhandled Exception: System.TypeInitializationException: The type initializer fo
r ‘Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment’ threw an exception. —
-> System.IO.FileLoadException: Could not load file or assembly ‘msshrtmi.dll’ o
r one of its dependencies.
A dynamic link library (DLL) initialization routine f
ailed. (Exception from HRESULT: 0x8007045A)
   at Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.InitializeEnvironmen
t()
   at Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment..cctor()
   — End of inner exception stack trace —
   at Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.get_CurrentRoleInsta
nce()

とか出る場合は以下のようにuseLegacyV2RuntimeActivationPolicyをTrueにすればいいですよ。(結構悩んだ)

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup useLegacyV2RuntimeActivationPolicy="true">
		<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
	</startup>
</configuration>

 

まぁByDesignという感じみたいです。はい。(外部からの受付用のInputEndpointで内部用のIPアドレスが取れちゃうってのも変な話といえば変ですのでいいんですけどね。)

Windows Azure Web Sitesを有効利用しよう! NuGetサーバー編

今日は Windows Azure Advent Calendar jp: 2012 の9日目のネタをお送りします。

 

今日のお題というか今年のお題はですね、みなさんご存知、Windows Azure Web Sitesに関するちょっとイイ話です。

Windows Azure Web Sites はお手軽にWebサイトを立ち上げることができる、Windows Azureのサービスの1つです。なんと今ならリージョンあたり10個まで無料で作ることができます!(つまり今だと最大50サイト!)

これは有効利用するっきゃないですね!

というわけで、なんとなくあったら便利そうだなっていうWebアプリをWindows Azure Web Sitesでホストしちゃいましょう~!というのが今年の趣旨でございますー。

続きを読む

Windows Azure Advent Calendar jp: 2012 はじめました

すっかりご無沙汰感。

いつの間にやら気が付けば11月中旬、そして次は12月・・・ということは、あの季節がやってくる!

ということでWindows Azure Advent Calendar jp: 2012 ですよ!

あじゅらーのみなさま、ふるってご参加ください!

今年はデプロイ王子を超えるネタが出現するのか!?

 

さて自分もネタ考えないとナー

Windows Azure管理ポータルがUpdate

さてDeveloper Camp 2012 Japan Fallで唐突にScottGuが「来週前半にポータルアップデートするよ!」とか言ってたWindows Azure管理ポータルのアップデートですが、月曜日にきちゃいました。(USだと日曜日じゃねーの的な)

簡単にまとめられてるのを引用するとこんな感じです。

  • サービス バスの管理と監視
  • 共同管理者の管理のサポート
  • SQLデータベースに対するインポート/エクスポートのサポート
  • 仮想マシンのエクスペリエンスの拡張
  • クラウド サービスの状態通知の改善
  • メディア サービスの監視のサポート
  • ストレージ コンテナーの作成とアクセス制御のサポート

続きを読む

ExcelとFiddler使ってTable Storageを視覚化しよう

スバラシイエントリがあったので紹介します。

Windows AzureのTable Storageは便利ですが、視覚化するのはちょっと不便ですね。Visual StudioとかAzure Storage Explorerとか使えば見れますが、普通のオフィスワーカーにはつらいところです。

やっぱりそこはExcelだよね!というところですが、普通にExcel(+PowerPivot)だとTableにアクセスする際の認証を超えることができません。なので、今回のアプローチとしてはFiddlerで認証を中継してExcel PowerPivotでのアクセス時に認証をパスしよう!という感じです。

続きを読む

Windows Azure Web Sitesのスバラシイ改善

唐突に赤シャツさんがWindows Azure Web Sitesの改善をアナウンスしました。

まさに大☆興☆奮な内容となっております!

ざっくりUpdate内容を挙げると

  • 低コストの共有モードの追加(スケーリングオプションの追加)
  • CNAMEおよびホスト名無しドメイン名(ネイキッドドメイン)のAレコード対応などカスタムドメイン名の機能拡張(Shared/Reserved両方で)
  • gitによる継続的デプロイにCodePlexとGitHubを追加
  • FastCGIのサポート

これらの対応が既に利用可能になっています!やったね!(事後報告かよ!

続きを読む

デブサミ関西 2012

デブサミ関西 2012に参加してきました。

関西でのデブサミは2回目ですね。今年も関西名物コミュニティLTでJAZの紹介してきました。

 

今回もゆるゆるな感じです。今年はGoogle及川さんのキーノート、MS長沢さん、Nifty久保田さんのセッションに参加しました。(※途中仕事やらなにやらで抜けましたが…)

懇親会は…コテコテでしたなぁw 名物(?)メイドさんとかいたり。じゃんけん大会は全然勝てませんでした…

懇親会後半は八巻さんとWinRT/WPアプリについてあれこれ談義してて有意義でした。なんかWinRT/WPあるあるみたいな話だったような。

という感じで今年も熱かったです!