12/25/2012

Windows Azure Active Directory 入門 (Core Directory, Seller Dashboard)

 

今回はWindows Azure Active Directory にについての内容です。

Windows Azure ADの正式リリースにより、記事の内容が古くなっていますので、こちらの最新の記事と比較して確認してください。

http://kentablog.cluscore.com/2013/04/windows-azure-active-directory.html

 

1.Windows Azure Active Directoryってなに?

Windows Azure Active Directoryは、Webのインタフェースを持つIdentity Serviceです。Directory情報の操作や認証処理など、ユーザを管理するための機能を持ち、HTTPSのRESTなWebインターフェースを経由して利用します。Microsoft AccountやGoogle Accountのように、Webアプリケーション間で当たり前のように使われているSSO(シングルサインオン)の機能もあるため、Windows Azure Active Directoryを使用しているOffice 365やWindows Intuneなどのエンタープライズ系のアプリケーションとSSOが可能になります。また、Windows Store AppなどWebアプリケーション以外で利用する場合は、アプリケーションのプログラムでWindows Azure Active DirectoryのWebインタフェースにアクセスする実装を行います。

Windows Server のActive Directoryと名前が似ているので勘違いしやすいのですが、Windows Server のActive Directoryとは異なります。そのため、クラウド環境にWindows ServerのActive Directoryと同じ機能が必要な場合は、Windows Azure Active Directory ではなく、Windows Azureなどの仮想ネットワークと仮想マシンを使用してWindows ServerのActive Directoryを構築することになります。

また、Windows Azure Active Directoryは、複数の異なる機能を集めた総称的な名前としても利用されているので、主な2つの機能を下記に紹介します。(2012年12月21日時点の情報ですので今後変更される可能性があります)

  • 1.Windows Azure Active Directory (aka Core Directory, Authentication)
    • コアディレクトリおよび認証: 上記で紹介した、シングル サインオン(SSO)、ユーザーおよび グループの管理、オンプレミスのActive Directory と同期、フェデレーションなどの機能を持つIDプロバイダです。 Office365などのマイクロソフト社が提供するSaaSアプリケーションに利用されています。
    • 価格: 以前は2013年12月1日まで無料としていたが、その後も無料となりました。
    • 1.1.Windows Azure AD Rights Management
      • ライツマネージメント: Directoryの機能の一部で、Microsoft Online Services にサブスクライブしている組織のコンテンツを暗号化して使用制限する機能のようです。
      • 価格: 課金されるとのこと。価格は不明
      • 備考: 知りませんでしたが、このURLに書いてあったので紹介しておきます。いつか調査しないといけませんね。

  • 2.Windows Azure Active Directory Access Controle Namespace (aka ACS, Access Management)
    • アクセス制御: Access Controle Nameserviceは、名前からご想像いただけるとおり、以前からWindows Azureの機能として存在しているACSと同じものです。STSとして動作し、Facebook などの IDプロバイダーや、オンプレミスのADFS 2.0(Active Directory Federation Service)などを使用した認証と承認を一元的に行う機能になります。
    • 価格: 以前はトランザクション数によって課金していましたが、無料になりました。

 

今回は上記の中から、Windows Azure Active Directoryの中でも中心的なサービスになると考えられる「1.Windows Azure Active Directory コアディレクトリと認証」に関する機能を紹介します。(ACSはすでに多くの記事があると思いますので、そちらをご参照ください)

 

2.コアディレクトリと認証機能紹介

Windows Azure Active Directoryは、大きく分けて以下の4つから成り立ちます。

  • 管理ポータル
    • ユーザ情報を、管理することが可能なWebページ
  • 認証関係
    • OAuthやSAML、WS-Federationや、エントリポイントを示すメタデータを提供するインタフェース
  • Graph API
    • 登録されたユーザ情報の取得や登録、削除を行うディレクトリ操作インタフェース
  • その他、インテグレーション関係
    • Windows ServerのActive Directoryのディレクトリと同期を行う仕組みなど

WAAD

これらの機能を利用すると組織を意識したWebアプリを容易に作ることができます。また、Windows Azure Active DirectoryはOffice365などのMicrosoft社が提供するSaaSアプリでも使用されているので、ユーザとしても作られたWebアプリを安心して利用することができるのではないでしょうか。

 

3.Windows Azure Active Directoryのサインアップ

Windows Azure Active Directoryを利用するには、下記のページで登録作業を行います。この登録作業では、管理者アカウントと、テナントのドメインを作成します。

http://g.microsoftonline.com/0AX00en/5

WAADReg

 

4.Windows Azure Active Directoryの管理ポータル

サインアップが完了すると、以下の管理ポータルでユーザの追加やロールの設定を行うことが可能になります。

https://activedirectory.windowsazure.com

トップページ

各機能へのメニューになっています。また、開発者向け情報へのリンクはこのページにあります。

WAADPortal00

ユーザとグループ

ユーザの追加やロールの設定を行うことができます。

WAADPortal01

ドメイン

ドメインの追加や削除を行います。ドメイン登録手順などは以下の記事を参考にしてください。

http://kentablog.cluscore.com/2013/01/windows-azure-active-directory-core.html

WAADPortal02

インテグレーション

インテグレーションページでは、Active DirectoryとのDirectory Syncの紹介があります。

WAADPortal03

開発者リソース

自組織向けのアプリケーション開発方法(Apps for your organaization)や、他の複数組織にサービス提供するためのアプリケーション開発方法(Apps for multiple organaizations)の紹介があります。

WAADPortal04

5.Windows Azure Active Directory 開発ツール

Windows Azure Active Directoryを利用したWebアプリケーションの作成には、Visual Studio 2012を使用します。ここでは、多くの方が利用可能な無料の Visual Studio 2012 Express for Web を使用して紹介します。ダウンロードおよびインストールは以下の記事を参考にしてください。

http://kentablog.cluscore.com/2012/09/windows-azure-cloud-servicevisual-studio.html

Visual Studio 2012 のダウンロードは以下のURLから。

http://www.microsoft.com/visualstudio/jpn/products/visual-studio-express-products

次に、ASP.net Fall 2012 UPdate BUILD Prereleaseをインストールします。このパッケージは、2012年11月に行われたBUILDイベントに合わせてリリースされたASP.netの機能拡張になります。Windows Azure Active Directory関係としては、自組織向けのアプリケーション開発(Apps for your organaization)を簡単にする機能が含まれています。ダウンロードは以下のページから行ってください。

http://www.asp.net/vnext/overview/fall-2012-update

 

6.Windows Azure Active Directory を使用したアプリの種類

上記にも少し紹介していますが、Windows Azure Active Directoryを使用したWebアプリは、主に2の種類になります。

自組織のアプリケーション(Apps for your organization)
  • 自分の組織向けのような一つのテナントに対応するWebアプリケーション向けの使い方です。Webアプリケーションのユーザ管理と認証を、Windows Azure Active Directoryに任せる場合などに利用します。メリットとしては、すでに利用しているOffice365などのSaaSアプリのユーザ情報を利用することができることと、シングルサインオン(SSO)が可能となることです。
  • サンプルコード
    http://code.msdn.microsoft.com/Write-Sample-App-for-79e55502
    • (Note: Windows Azure Active Directoryはプレビューであることもあり、クレームの仕様変更が行われており、上記サンプルコードはそのままでは動作しませんが、Web.config中のnameClaimTypeを変更すると動作します。)次回以降紹介できればと思います。(2012/12/19)

 

WAADAPP1
    • アプリケーション利用イメージ
      1. 利用者はアプリケーションに接続すると、Windows Azure Active Directory のログイン画面が表示される
      2. ログイン画面でユーザ名とパスワードなど、設定されている条件で認証を行う
      3. 認証が成功するとアプリケーションの利用が可能となる
      4. アプリケーションではActiveDirectoryから渡されたクレーム情報によりユーザのIDなどが表示される
      5. また、Office365などWindows Azure Active Directoryを使用しているアプリとのシングルサインオンが可能

 

複数組織用のアプリケーション(Apps for multiple organization)
  • すべての組織向けに提供可能な、マルチテナント対応のSaaSアプリケーションで利用する使い方です。例えば、Microsoft社のOffice365などのSaaSアプリです。アプリ提供者は、Office365などのアカウントを持つユーザ組織にSaaSアプリを容易に提供することが可能になります。また、利用者はOffice365などを含んだアプリ間でSSOが可能になります。また、組織アプリケーションと違い、アプリケーションに利用するClient ID と Secret は Seller Dashboard に登録します。
  • サンプルコード
    http://www.windowsazure.com/en-us/develop/net/tutorials/multitenant-apps-for-active-directory/
    • (Note: 上記サンプルコードは、Windows Azure Active Directoryはプレビューであることもあり、クレーム情報の仕様変更が行われており、そのままでは動作しませんが、クレームタイプとメタ情報のパース箇所を変更すると動作します)次回以降紹介できればと思います。(2012/12/19)

 

WAADAPP2

    • アプリケーション利用イメージ(初期利用)
      1. アプリケーションの組織向け登録画面に移動
      2. Windows Azure Active Directoryのテナント管理ロールを持つユーザでログイン
      3. アプリケーションから、Windows Azure Active Directoryにアクセスすることを許可する確認の画面が表示(Consentリクエストにより表示。下記参照)
      4. 許可するとユーザがアプリケーションを利用することが可能に

 

7.複数組織向けアプリケーションの補足(Consentリクエストについて)

複数組織用アプリケーションでは、テナント管理者の許可を得てGraph APIを経由して組織の情報にアクセスすることができるようになります。この処理はConsentリクエストにより実装します。

画面イメージ

WAADPortal05

上の画面は初期利用時3の時にWindows Azure Activr Directoryにアクセスして表示される画面。(テスト用のアプリのため、アプリケーションの画像が表示されていません。Seller Dashboardでアプリをパブリッシュしている場合はアプリの画像が表示されます)

WAADPortal06

アプリケーションからWidnows Azure Active Directory へのアクセスを承認すると、画面の下部に処理中のメッセージが表示されます。これにより、Seler Dashboardに登録したアプリの情報がユーザの組織のWindows Azure Active Directoryに登録され、アプリケーションから組織情報(テナント)を取得などの操作を行うことができるようになります。

このアプリケーションからWindows Azure Active Directoryへのアクセス許可は、以下のようなConsent リクエストにより実行されます。

リクエスト

Windows Azure Active Directoryテナントにアプリからのアクセス許可を要求が行われます。Seller Dashboardに登録したClient Idを使用してConsentリクエストを作ります。


https://activedirectory.windowsazure.com/Consent/AuthorizeApplication.aspx?ApplicationId=<ClientId>&RequestedPermissions=<RequestedPermissions>

  • パラメータ
    • ApplicationId(必須)
      • Seller Dashboard に登録した Client ID
    • RequestedPermissions(オプション)
      • DirectoryReader
        • 組織のユーザアカウント、グループ情報のディレクトリデータを読み込む権限を要求。SSOを有効にする。
      • UserAccountAdministrator
        • 組織のユーザアカウント、グループ情報のディレクトリデータを読み込みと書き込みする権限を要求。SSOを有効にする
      • None(デフォルト)
        • SSOを有効にするが、ディレクトリデータへのアクセスは無効にする。

利用者の承認処理結果は以下のアプリケーションURLへのレスポンスにより確認することができます。

Consent レスポンス

https://<Redirect URL>&TenantId=<TenantId>&Consent=<Consent>

  • パラメータ
    • TenantId
      • 許可されたWindows Azure AD組織のGUID
    • Consent
      • 許可された場合は”Granted“、リジェクトされた場合は”Denied”

 

8.複数組織向けアプリケーション補足(Seller Dashboardについて)

Seller Dashboardは複数組織用のアプリケーションがWindows Azure Active Directory接続する際に使用するClient IDを登録するサイトになります。また、完成したアプリケーションをパブリッシュすることにより、収益を上げることも可能になるようです。(収益を上げるところに関しては試してません)

WAADSD

OAuth Client ID 追加

Client IDはSeller Dashboardのclient idsタブをクリックすることにより設定します。トップページはApp(アプリケーション)を登録する画面となっていますが、まずは「client ids」タブの「add a new oauth client id」から、下の画面のようにClient IDを作成する必要があります。

WAADSD3

oauth client idの設定は以下の内容を参考にしてください。

項目

内容

Friendly Client ID Name クライアントIDを識別するための名前を設定します。どのような名前でもかまいません。
App Domain アプリケーションのドメインを設定します。ローカルPCで開発している場合などは、localhostと設定します。
App Redirect URL 作成したアプリケーションのURLを指定します。Consentリクエスト時など、アプリケーションにリダイレクトされるときのURLに使用されますので、http/httpsから指定してください。ローカルPCで開発している場合などは、https://localhost:4407のようにポート番号も合わせて設定します。
Client Secret Valid For クライアントシークレットの有効期限を設定します。
1年(1 year) / 2年(2 years) / 3年(3years) から選択します。

 

アプリ追加

アプリケーションを配布する場合に設定します。開発中の場合は、このアプリ追加を行わなくても、既に登録されているClient IDで動作を確認することができます。アプリケーションが完成した時は、プロダクション向けの新しいClient IDを作成したほうがよいでしょう。

アプリの申請から承認が下りるまで一か月ぐらいかかりました。今後のブログで紹介できればと思います。

manageタブの「add a new app」から新しいアプリを登録します。まずは、以下のような画面でアプリケーションのタイプを選択します。

WAADSD4

アプリケーションタイプとして「Windows Azure Type」の「Active Directory App」を選択します。次に表示される画面でアプリケーションの情報を入力します。ここで入力された情報がConsentリクエストの時に表示されます。

Windows Azure Active Directoryアプリ

項目

内容

App Title マーケットプレイスでのアプリケーション名
Category アプリケーションのカテゴリを選択します
App Logo アプリケーションのロゴを96x96ピクセルで250KB以下の画像ファイル。画像フォーマットは.png, .jpeg, gif
App Package XMLで記述されたアプリケーション・マニフェスト・ファイル(後述アプリケーション参照)
Testing Notes(optional) アプリケーションを登録した後にマイクロソフト社によるテストが行われます。この項目にはテスターにログインするための情報やテストを進めるためのメッセージを書きます。
OAuth Client ID このアプリで使用するClient IDを選択します。

詳細は以下のサイトをご参照ください。

http://msdn.microsoft.com/en-us/library/jj552465.aspx

アプリケーション・マニフェスト・ファイル(App Package)

アプリ追加のApp Packageでは、XMLで記述されたアプリケーション・マニフェストを配置します。このApp Packegeはアプリケーションのタイプによって異なり、Windows Azure Active Directoryアプリでは、以下のような内容のXMLを記述します。

エレメント

アトリビュート

内容

AppPermissionRequests Policy 現在はアプリケーションがディレクトリ情報をアクセスするためのAppOnlyのみ対応
AppPermissionRequest Right

パーミッションを設定する。以下の3つから選択する

  • Directory Reader
    • 組織のユーザアカウント、グループ情報のディレクトリデータを読み込む権限を要求。SSOを有効にする。
  • User Account Administrator
    • 組織のユーザアカウント、グループ情報のディレクトリデータを読み込みと書き込みする権限を要求。SSOを有効にする
  • None
    • SSOを有効にするが、ディレクトリデータへのアクセスは無効にする。
AppPermissionRequest Scope スコープの設定
Reason culture Consentページに表示するテキストの言語を設定
  value Consentページに表示するテキストを設定

以下は、アプリケーション・マニフェスト・ファイルの例になります。

<?xml version="1.0" encoding="utf-16"?>
<AppRequiredPermissions>
  <AppPermissionRequests Policy="AppOnly">
    <AppPermissionRequest Right="Directory Reader" Scope="http://directory">
      <Reason culture="en-us" value="Demo Application for kentablog"/>
    </AppPermissionRequest>
  </AppPermissionRequests>
</AppRequiredPermissions>


 



9.複数組織向けアプリケーション補足(Windows Azure Active Directoryの利用中アプリケーション確認について)



Consentリクエストによってアクセス許可を得たアプリケーションは、Windows Azure Active DirectoryのserviceページのYour Organization's Servicesに一覧表示されます。以下の図はアプリ追加されていない開発中のアプリのため、Seller Dashboardで登録したClient IDが表示されていますが、アプリ追加されているアプリケーションの場合は、アプリケーション名が表示されるはずです。



WAADPortal08



もし、Office365を利用している場合は、Azure Active Directoryのページで以下のようにOffice365が持つアプリケーションがアクセス許可を得ているはずです。これを見ると、Office365も複数組織向けアプリケーションとして作られていることと、複数のアプリから成り立っていることがよくわかりますね!



WAADPortal11



以上でアプリケーション開発者はWindows Azure Active Directoryを使用したアプリケーションを作成することができますが、詳細な登録情報を確認するには、以下のようにPowerShellを使用します。



 



10.PowerShellでWindows Azure Active Directoryの情報を取得する



PowerShellを使用すれば、Windows Azure Active Directoryに登録されているPrincipalの情報など、詳細な情報を得ることができます。



準備



そのままのPowerShellで利用できるのではなく、Office365用に提供されているモジュールを初めにインストールしておきます。



以下のサイトからモジュールをインストールしてください。



Windows PowerShell を使用して Office 365 を管理する



http://onlinehelp.microsoft.com/ja-jp/office365-enterprises/hh124998.aspx



Windows Azure Active Directoryに接続して使ってみる



まず以下のコマンドでインストールしたモジュールを読み込みます。(Windows 8や2012Serverを使用している方は、PowerShell ver2 で動作させる必要があります)

Get-Command Msonline
Get-Command MsonlineExtended


Windows Azure Active Directoryに接続します。

Connect-MsolService -Credential (Get-Credential)


テナント情報の取得

Get-MsolCompanyInformation


テナントIDの取得

(Get-MsolCompanyInformation).ObjectId


サービスプリンシパルの取得(利用中のアプリケーションの取得)

Get-MsolServicePrincipal


その他コマンドの使い方は以下を参考にしてください。



Office 365 用 Windows PowerShell コマンドレット



http://onlinehelp.microsoft.com/ja-jp/office365-enterprises/hh125002.aspx



PowerShellを使用すると、Windows Azure Active DirectoryのWebサイトで操作できない、組織向けのアプリケーションの作成で作られたServicePrincipalの削除など、細かいところにも手が届く操作が可能です。



11.さいごに



Active Directoryを使用すると、Office365のようなビジネス向けのアプリケーションを提供することが可能になり、Office365とシングルサインオンによりシームレスに遷移するアプリも実現することが可能になります。



ビジネス向けのアプリケーションを考えている方はぜひ利用してはいかがでしょうか?



当ブログでもアプリケーションの作り方を紹介していけたらと思います。



 



関連ページ



Windows Azure Active Directory ドメイン登録 (Core Directory)


http://kentablog.cluscore.com/2013/01/windows-azure-active-directory-core.html

12/05/2012

Windows AzureでWEBサービスを組み立てよう!

 

どうも。久しぶりのブログアップデートです。

12月に入りクリスマスが近くなると、サンタクロースがやってくるイベントがあったり、いろいろと忙しくなります。サンタクロースといえば、子供からLEGO(LEGO Pharaoh's Quest Scorpion Pyramid 7327)のリクエストがあり、すでに製造していない商品をお願いされたりしています(しかも、欲しいのは中に入っている犬のミニフィギュアだけ・・・)。

さて、今年もWindows Azure Advent Calendarに参加です。

昨年は、Windows Azureを始めようと考えている方へ、おすすめの本を紹介したのですが、今年一年でWindows Azureは大きな変更があり、便利な機能が多く追加されました。

機能が多く追加されると便利になるのですが、Windows Azureを始めてみようと考えている方からは複雑なプラットフォームに見えているのではないかと、少し心配しています。

そこで、どの機能を利用したらよいのか、どのようにサービスを組み立てたらよいかなど、LEGOの商品のように王道パターンを組み合わせて商品(サービス)を作ることができれば、少しでも多くの方にWindows Azureを理解してもらえるのではないかと思い、@k1hashさんと@kekekekentaでパターンの土台を模索しているところです。

まだα版ですが、少し紹介できればと思います。

 

1.大規模WEBサービスに効果的なパターン!

12月の大規模WEBサービスといえば、MixiXmas(http://mixixmas.mplace.jp)ですよね。digで確認したところ、cloudapp.netでCNAME設定されているので、今年もWindows Azureで動作しているようですね。たぶん今年追加されたRoleベースのキャッシュ機能も使っているのではないかと妄想に浸ってます。

さっそくパターンの紹介です。とは言ったものの、すでに大規模WEBサービスに効果的なパターンは、以下の@k1hashさんのブログで書かれておりますので、そちらをご参照ください。

ブログ:「メリークリスマス!Azureアドベントカレンダーの儀を執り行う!

ADPH

かっこよかったですね。自分とは迫力が違います。

で、その他のパターンですが、カッコいいところは@k1hashさんにすでに書かれてしまった感があり・・・ あとのパターンは、どう切り出してよいのか・・・・と悩みましたが、これ(↓)です。

 

2.時間がない人に効果的なパターン!

びみょう・・・。だけど、たぶんこういう人は沢山いると思うんです。家に帰ってからサービス作ったりしますしね。良い言い方をするとスタートアップ向けパターンです。

2.1.一台のパソコンでサービス開発

ADP01

Windows 7 や Windows 8 などの普通のPCだけで、複数インスタンスを使用するようなWindows Azure のクラウドサービスをローカル環境で開発することが可能です。更にデバック実行することができます。必要なツールとしては、Visual Studio と Windows Azure SDK and Windows Azure Tools for Microsoft Visual Studio です。Visual Studio と聞けばお高いんでしょう?と思われる方がいらっしゃいますが、 Express Edition を利用すれば無償でサービスを開発することができます。

Express Edition のインストールは以下の記事をご参照ください。

http://kentablog.cluscore.com/2012/09/windows-azure-cloud-serviacevisual-studio.html

クラウド上にリソースを用意しなくてもサービス開発が可能ですので、手軽に素早く取り掛かれます。

 

2.2.モバイルアプリに必要な機能の利用

ADP02

iPhoneやWindows 8など、モバイル端末のアプリケーションでは、「通知」や「ソーシャルサービスとのID連携」「データの書き込みと読み込み」など、ある程度決まっている処理を開発しないといけないので労力がかかります。これらの処理はWindows Azureモバイルサービスで用意されており、そのまま利用することにより、ほとんど開発しなくても実現できます。

これによりモバイルアプリケーション開発者は、サーバ上のプログラムを書く必要がなくなり、モバイル端末上で動作するロジックやUXに集中することができます。

Windows Azure モバイルサービスは、以下のブログをお勧めします。

http://satonaoki.wordpress.com/2012/10/17/azure-mobile-services-update/

また、2012年12月19日に開催される「JAZUG女子部ぷれぜんつBuild祭り」でも紹介がありますので、お時間のある方は是非参加してみてはいかがでしょうか?

http://www.zusaar.com/event/452053

 

2.3.Windows Azure Active Directoryで認証

ADP03

WEBサービスでユーザ情報を取り扱う場合、ユーザ管理やユーザ認証用のプログラムを書く労力が発生します。しかし場合によっては Windows Azure Active Directory を使用すると一気に解決することがあります。Windows Azure Active Directory は Office365 などのマイクロソフト社のオンラインサービスで使用されており、Windows Azure Active Directory を使用したアプリケーションを開発すると、これらのサービスとシングルサインオンすることが可能になります。

Windows Azure Active Directory を利用したシングルサインオン可能なWebアプリの作り方は、以下のブログをお勧めします。

http://blogs.msdn.com/b/tsmatsuz/archive/2012/11/09/windows-azure-active-directory-web-sso-using-asp-net.aspx

しつこいかもしれませんが、2012年12月19日に開催される「JAZUG女子部ぷれぜんつBuild祭り」でも紹介がありますので、お時間のある方は是非参加してみてはいかがでしょうか?

http://www.zusaar.com/event/452053

 

2.4.超小規模からスタート可能な共有型Webサイト

ADP04

Webサイトは無料モードから利用可能なWindows AzureのWebサービスです。ASP.NETのアプリケーションはもちろん、PHPのWEBアプリケーションも利用することが可能です。

共有モードでスケールアウトが可能であり、専用仮想マシンへのスケールアップや専用マシンでのスケールアウトも簡単に実現できます。

WebサイトはWebのみの機能となりますが、クラウドサービスと比べると手軽で少しの労力により利用することができる便利なサービスです。

 

2.5.データの地域間バックアップ

ADP05

データのバックアップをに気にしなくてもよいのが、Windows Azure Blob Storageです。データはデータセンター内の異なるFault Domainで3箇所に保存されているのですが、データセンターがある地域で震災などの影響を受けても、他の地域に存在すデータを利用することが可能です。データのバックアップは非同期で行われます。

バックアップの仕組みを作る必要がないため、開発者はサービスの開発に集中することができます。

3.さいごに

まだ、他のパターンが存在しますが、Windows Azure Advent Calendar jp:2012 の5日目は、こんなところで。

他のパターンふ含めた紹介は、凄くしつこいかもしれませんが、2012年12月19日に開催される「JAZUG女子部ぷれぜんつBuild祭り」でも紹介させていただければと思いますので、お時間のある方は是非参加してみてはいかがでしょうか?

http://www.zusaar.com/event/452053

また、パターンの作成やブラッシュアップに皆さんの参加をお待ちしております!

11/14/2012

もうすぐ Windows Azure Conf

 

azueconf 

明日の11月15日AM1:30~AM10:00(日本時間)まで、Windows AzureConfが開催されます。

セッションは以下の通り。

Windows Azure Overview
Scott Guthrie (@scottgu)

Build Speedy Azure Applications with HTML 5 and Web Sockets Today
Rick Garibay (@rickggaribay)

Windows Azure Mobile Services - Backend for Your Windows 8, iOS, and Android Apps
Sasha Goldshtein (@goldshtn)

Solving Security and Compliance Challenges with Hybrid Clouds
Eric D. Boyd (@EricDBoyd)

Windows Azure Services Throttling and Fault Handling
Mihai Tataran (@mihai_tataran)

How Mural.ly Achieves Great Performance for a Low Cost
Johnny Halife (@johnnyhalife)

Windows Azure + Twilio == A Happy Tale to Tell
Panagiotis Kefalidis (@pkefal)

Building Elastic, Autoscalable Solutions with Windows Azure
Mihai Tataran (@mihai_tataran)

Elevating Windows Azure Deployments
Michael Collier (@michaelcollier)

Building Cross-Platform Media Apps using Windows Azure Media Services
Eric D. Boyd (@EricDBoyd)

Continuous Delivery Zen with Windows Azure
Magnus Martensson (@noopman)

JavaScript, Meet Cloud: Node.js on Windows Azure
Sasha Goldshtein (@goldshtn)

Windows Azure and Embedded Devices
Andy Cross (@andybareweb)

日本からのライブストリーミング参加は、深夜スタートということもあるので、辛いと思いますが、是非参加したいところです。9時間30分耐久ですね。

ライブストリーミングで参加する場合は以下のサイトへ!

http://www.windowsazureconf.net/

9/12/2012

Windows8のAppBarでToggleButton(トグルボタン)を使う

 

クリックすると選択状態になるボタンをトグルボタンというらしいのですが、このボタンが使えるようになるまで少し時間がかかってしまったのでメモしておきます。Windows 8 標準アプリのカメラアプリのタイマーボタンでも使われてるし、プロパティをチェックするだけで簡単に利用できると思い込んでいたのが失敗でした。

とりあえず、自力で実装している例は、以下のサイトを参考にしてください。Windows8 RTM以前はToggleButton がなかったようです。

http://timheuer.com/blog/archive/2012/03/19/creating-a-metro-style-toggle-button-for-appbar.aspx

とは言え、Windows8 RTM より ToggleButton が含まれているようですので、これを使ってみます。

まずは修正

使い方は XAML で Button と書いているところを ToggleButton にして、Click イベントなどで state を変更するだけですが、そのまま利用すると Exception が発生します。これは、Microsoft Visual Studio で作成される StandardStyle.xaml の AppBarButtonStyle に”BackgroundCheckedGlyph” TextBlock が抜けているからのようです。参考にしたサイトは以下です。

Fixing the AppBarButtonStyle for ToggleButton support in your Win8 apps

http://www.visuallylocated.com/post/2012/08/27/Fixing-the-AppBarButtonStyle-for-ToggleButton-support-in-your-Win8-apps.aspx

修正するには StandardStyle.xaml の AppBarButtonStyle の Grid に以下の TextBlock を追加します。

<TextBlock x:Name="BackgroundCheckedGlyph" Visibility="Collapsed" Text="&#xE0A8;" FontFamily="Segoe UI Symbol" FontSize="53.333" Margin="-4,-19,0,0" Foreground="{StaticResource AppBarItemForegroundThemeBrush}"/>

追加すると以下のようになります。(一部抜粋)

<Style x:Key="AppBarButtonStyle" TargetType="ButtonBase">
    <Setter Property="Foreground" Value="{StaticResource AppBarItemForegroundThemeBrush}"/>
    <Setter Property="VerticalAlignment" Value="Stretch"/>
    <Setter Property="FontFamily" Value="Segoe UI Symbol"/>
    <Setter Property="FontWeight" Value="Normal"/>
    <Setter Property="FontSize" Value="20"/>
    <Setter Property="AutomationProperties.ItemType" Value="App Bar Button"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ButtonBase">
                <Grid x:Name="RootGrid" Width="100" Background="Transparent">
                    <StackPanel VerticalAlignment="Top" Margin="0,12,0,11">
                        <Grid Width="40" Height="40" Margin="0,0,0,5" HorizontalAlignment="Center">
                            <TextBlock x:Name="BackgroundGlyph" Text="&#xE0A8;" FontFamily="Segoe UI Symbol" FontSize="53.333" Margin="-4,-19,0,0" Foreground="{StaticResource AppBarItemBackgroundThemeBrush}"/>
                            <TextBlock x:Name="BackgroundCheckedGlyph" Visibility="Collapsed" Text="&#xE0A8;" FontFamily="Segoe UI Symbol" FontSize="53.333" Margin="-4,-19,0,0" Foreground="{StaticResource AppBarItemForegroundThemeBrush}"/>
                            <TextBlock x:Name="OutlineGlyph" Text="&#xE0A7;" FontFamily="Segoe UI Symbol" FontSize="53.333" Margin="-4,-19,0,0"/>
                            <ContentPresenter x:Name="Content" HorizontalAlignment="Center" Margin="-1,-1,0,0" VerticalAlignment="Center"/>
                        </Grid>

これで準備が整いました。


いよいよ使ってみる


とりあえず、以下のようなAppBarを準備

<Page.BottomAppBar>
    <AppBar x:Name="BottomAppBar1" IsSticky="True" IsOpen="True" AutomationProperties.Name="Bottom App Bar">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <StackPanel x:Name="LeftPanel" Orientation="Horizontal" Grid.Column="0" HorizontalAlignment="Left">
                <Button x:Name="appbarBackButton" AutomationProperties.Name="Back" Style="{StaticResource PreviousAppBarButtonStyle}" HorizontalAlignment="Left"/>
                <StackPanel.ChildrenTransitions>
                    <TransitionCollection>
                        <AddDeleteThemeTransition/>
                    </TransitionCollection>
                </StackPanel.ChildrenTransitions>
            </StackPanel>
            <StackPanel x:Name="RightPanel" Orientation="Horizontal" Grid.Column="1" HorizontalAlignment="Right">
                <ToggleButton x:Name="RotateCamera" Style="{StaticResource ClockAppBarButtonStyle}" Tag="Uncheck" Click="Button_Click"/>
                <ToggleButton x:Name="TimerCamera" Style="{StaticResource ClockAppBarButtonStyle}" Tag="Check" Click="Button_Click"/>
                <StackPanel.ChildrenTransitions>
                    <TransitionCollection>
                        <AddDeleteThemeTransition/>
                    </TransitionCollection>
                </StackPanel.ChildrenTransitions>
            </StackPanel>
        </Grid>
    </AppBar>
</Page.BottomAppBar>

ToggleButton のClickイベントで、トグルボタンの状態を変化させます。以下はクリックされる度に、CheckedとUncheckedを繰り返すコード

private void Button_Click(object sender, RoutedEventArgs e)
{
    ToggleButton button = (ToggleButton)sender;
    VisualStateManager.GoToState(button, button.IsChecked.Value ? "Checked" : "Unchecked", false);
}

実行した結果は以下のような感じです。左はUnchecked、右はChecked。


Toggle


Clickのイベントすべてに状態変化のプログラムを書くのは大変なので、以下のサイトのようにClickを実装しておくのもよいかもしれませんね。


http://www.visuallylocated.com/post/2012/09/04/Fixing-the-VisualState-of-your-AppBar-ToggleButton.aspx

9/08/2012

Azure座談ハンズオン大会+JAZUG結成2周年イベントの資料

 

Azure座談ハンズオン大会+JAZUG結成2周年イベントの資料を一時的に置いてみました。
多くの方のBlogを参考にしてます。ありがとうございまーす。

Azure Caching
https://skydrive.live.com/redir?resid=963F6474C57959BF!301&authkey=!AIU5ATg5VVYv-Rc

9/06/2012

Windows Azure Cloud ServiceのためのVisual Studioインストール

 

Windows Azure Spring Release 2012 により多くの機能が提供され、それに伴い様々な開発環境が提供されています。そこで初心者向けに、Windows Azure Cloud Service の.NET開発環境構築手順を紹介します。

多くの方が利用することを想定して、今回は無料で利用可能なVisual Studio Express 2012 for Webを使用しました。

Visual Studio Express 2012 for Webのインストール

Webブラウザを使用して、下記のページから「Visual Studio 2012 Express for Web with Windows Azure SDK for .NETのダウンロード」をクリックしてインストールを始めてください。

http://www.microsoft.com/visualstudio/11/ja-jp/products/express

このリンクを使用するとVisual Studio 2012 Express for Webと.NET利用者のためのWindows Azure SDKが自分のコンピュータにインストールされます。

VS2012_BLOG

 

Web Platform Installerの実行

「Visual Studio 2012 Express for Web with Windows Azure SDK for .NETのダウンロード」をクリックすると、Web Platform のインストール画面が表示されます。Web Platform Installerをクリックしてインストーラを実行します。
 
VS2012_01

インストーラの実行確認のポップアップが表示されますのでVWD11AzurePack.exeを実行します。
 
VS2012_02

Web Platform Installerが起動され、Visual Studio Express 2012 for Web with Windows Azure SDKインストールウィザードが表示されます。インストールをクリックします。

VS2012_03

インストールに関係するアプリケーションソフトウェアおよびコンポーネントが表示されます。これらのソウトウェアのライセンス条項に同意します。
 

VS2012_04

インストールが開始されます。コンピュータ環境によって異なりますが、数十分でインストールは完了します。
 
VS2012_05

ちょっと注意事項

インストール中に再起動を求められる時があります。その時は「はい」をクリックして再起動をしてください。次回の起動時にWeb Platform Installerが再度起動されてインストールが再開されます。

VS2012_07

※Web Platform Installerの初期実行時や、コンピュータの再起動時に「次のプログラムに、このコンピュータの設定を許可しますか?」のようなメッセージでWeb Platform Installerの実行に関する確認が行われますので「はい」をクリックしてください。


正常にインストールされたら「完了」をクリックしてインストールを終了させます。

VS2012_08

Visual Studio Express 2012 for Webの起動確認

スタートメニューから「VS Express for Web」のコンテキストメニューを表示して、「管理者として実行」を選択してVisual Studio Express 2012 for Webを起動します。

VS2012_11_1

プロダクトキーの登録画面が表示されたら、「オンライン登録」をクリックしてプロダクトキーを取得します。

VS2012_10_BLOG

Live IDを入力するとプロダクトキーが表示されたページが表示されます。このプロダクトキーを登録してください。

VS2012_11_BLOG

Visual Studio Express 2012 for Webが起動されれば開発環境の構築は完了です。

VS2012_12

すごく簡単に開発環境を利用することができるので、初めての方でも安心ですね!

あ、最後にWindows Azureのアカウントは以下のURLから取得します。

http://www.windowsazure.com/ja-jp/

次は簡単なアプリケーションを作ってみますね。

8/27/2012

Windows8のMediaCaptureでHRESULT : 0xC00DABE0のExceptionが出る場合の対処

かなり限定的な内容で申し訳ないのですが、同じ現象が出ている人が多いと思い書きます。このExceptionはSimulatorで動作させた場合やRemote Desktopで接続している場合にだけExceptionが出るので、バグかなーって思ってしまうのですが、カメラアプリやCameraCaptureUIを使用した場合はExceptionが出ないですし、気になりますよね。

デバイスの設定する

試した結果なので正確な情報じゃないかもしれませんが、デバイスの設定をすると問題なく動作するようです。デフォルトだとExceptionが出てしまいます。MediaCaptureInitializationSettingsのStreamingCaptureModeを設定するとでなくなりました。以下のようなコードです。

m_devInfoCollection = await DeviceInformation.FindAllAsync(DeviceClass.VideoCapture);
if (m_devInfoCollection.Count > 0)
{
    devCurrentNo = 0;
    devInfoName = m_devInfoCollection[devCurrentNo].Name;
    var settings = new Windows.Media.Capture.MediaCaptureInitializationSettings();
    var chosenDevInfo = m_devInfoCollection[devCurrentNo];
    settings.VideoDeviceId = chosenDevInfo.Id;
    settings.StreamingCaptureMode = StreamingCaptureMode.Video;
    m_mediaCaptureMgr = new Windows.Media.Capture.MediaCapture();
    await m_mediaCaptureMgr.InitializeAsync(settings);
}

StreamingCaptureModeには、AudioかAudioAndVideoかVideoをどれかを設定します。


皆さんのもうまくいくとイイですね。

8/24/2012

Windows8設定チャームのフライアウト実装について

Windows8のC#で設定チャーム(Settings charm)の実装をし調べたのでメモです。Windows Phoneのように画面全体のPageで作ると思っていたのですが、チャーム(Charm)で表現する必要があるようですね。でも、標準で用意されているチャームのコントロールが見つからないのです。。。

では、どうしたらよいのかと思い探していると、自作のユーザコントロールで設定チャームを実装している例がありました。基本はこのような実装になるんですね。

http://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh872190.aspx

更に調べてみるとチャームをCharmFlyoutライブラリのコントロールで実装している例もありました。今回はこのCharmFlyoutを使用して設定チャームをアプリに実装してみます。

http://code.msdn.microsoft.com/windowsapps/CharmFlyout-A-Metro-Flyout-25fe53b6

http://w8isms.blogspot.jp/2012/08/charmflyout-supporting-sub-flyouts.html

VisualStudioでProjectを作成

今回は簡単にサンプルとして作成しますので、Blank Appを選びます。

Capture

VisualStudioのNuGetでCharmFlyoutをインストール

VisualStudioの「Project」メニューから「Manage NuGet Packages」を選択します。

Capture02

左上から「Online」を選択し、右上の検索ボックスから「CharmFlyout」を入力して、CharmFlyoutライブラリを探します。ライブラリが見つかったら「Install」をクリックしてインストールします。

Capture04

Blendでチャーム作成

インストールが完了したら、MainPage.xamlをBlendで編集します。Blendが起動したら、左上の検索ボックスから「CharmFlyout」を見つけて「[Grid]」の中にCharmFlyoutを持っていきます。

CharmFlyoutコントロールの名前を「OptionsCharm」に変えて、右上の「HeadingBackgroundBrush」でチャームの色を決めます。「Width」「Height」はAuto、「HorizontalAlignment」「VerticalAlignment」は一番右を選択。

Capture07

右下の「Heading」にはチャームのタイトル名「Options」を設定します。

Capture08

CharmFlyoutにStackPanelを入れてTextBlockとかを入れてみます。

Capture09

MainPage.xamlは以下のような感じになりました。

<Page
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:CharmFlyoutSample"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:CharmFlyoutLibrary="using:CharmFlyoutLibrary"
    x:Class="CharmFlyoutSample.MainPage"
    mc:Ignorable="d">
    <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
        <CharmFlyoutLibrary:CharmFlyout x:Name="OptionsCharm" Heading="Options" HeadingBackgroundBrush="#FFFF8000">
            <StackPanel>
                <TextBlock TextWrapping="Wrap" Text="TextBlock"/>
                <TextBlock TextWrapping="Wrap" Text="TextBlock"/>
            </StackPanel>
        </CharmFlyoutLibrary:CharmFlyout>
    </Grid>
</Page>

 


VisualStudioでチャームの動作を書く


設定チャームへの登録や、チャームのフライアウトを行うMainPage.xaml.csは以下のようになります。

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using Windows.UI.ApplicationSettings;
// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234238
namespace CharmFlyoutSample
{
    /// <summary>
    /// An empty page that can be used on its own or navigated to within a Frame.
    /// </summary>
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
            SettingsPane.GetForCurrentView().CommandsRequested += MainPage_CommandsRequested;
        }
        void MainPage_CommandsRequested(SettingsPane sender, SettingsPaneCommandsRequestedEventArgs args)
        {
            args.Request.ApplicationCommands.Add(new SettingsCommand("options", "Options", (p) => { OptionsCharm.IsOpen = true; }));
        }
        /// <summary>
        /// Invoked when this page is about to be displayed in a Frame.
        /// </summary>
        /// <param name="e">Event data that describes how this page was reached.  The Parameter
        /// property is typically used to configure the page.</param>
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
        }
    }
}

 


動作確認


Optionsが登録さてていることを確認します。


Capture10


Optionsを選択すると今回作成したチャームが表示されます。


Capture11


CharmFlyoutを使うと簡単にチャームを作ることができますね。

8/21/2012

Windows 8 のアップバーのボタンアイコン

Windows 8のアプリでは、アイコンを含む丸い形のボタンが多くのアプリケーションで利用されていますが、このアイコンはどのように作成したらよいのか迷うと思います。Windows Phoneの場合は、自分で作成したPng形式の画像ファイルを利用したりするのですが、Windows 8では事情が違うようです。

で、とりあえずmsdnを探したのですが、JSのAppBarIconはあるのですが、XAMLの情報が見つからないので、調べてみました。ですので、間違っているところもあると思いますが、自分へのメモとして書き残そうと思います。

JSのAppBarIconを列挙しているページは以下参照。

http://msdn.microsoft.com/en-us/library/windows/apps/hh770557.aspx

XAMLでAppBarIconの定義は、プロジェクトファイル内に存在する StandardStyles.xaml で行っているみたい。Windows 8では、アイコンがPngではなく、Segoe UI Symbolのフォントを利用しているようなので「文字コード表」アプリでアイコンを確認してみます。

char

カメラのアイコンとかを見つけることができますね。左下に文字コードが表示されているので、このコードを使って StandardStyles.xaml にアイコンを定義してみます。以下のようなXMLを追加します。

<Style x:Key="RotateCameraAppBarButtonStyle" TargetType="Button" BasedOn="{StaticResource AppBarButtonStyle}">
    <Setter Property="AutomationProperties.AutomationId" Value="RotateCameraAppBarButton" />
    <Setter Property="AutomationProperties.Name" Value="Rotate Camera" />
    <Setter Property="Content" Value="&#xE124;" />
</Style>

ボタンとして使う場合は、アプリケーションのXAMLに以下のように指定してみます。

<Button x:Name="rotatecameraButton" IsEnabled="{Binding Frame.CanGoBack, ElementName=pageRoot}" Style="{StaticResource RotateCameraAppBarButtonStyle}" BorderThickness="0,0,1,1" Margin="0" Click="rotatecameraButton_Click" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="1"/>
<Button x:Name="clockButton" IsEnabled="{Binding Frame.CanGoBack, ElementName=pageRoot}" Style="{StaticResource ClockAppBarButtonStyle}" BorderThickness="0,0,1,1" Margin="0" Click="clockButton_Click" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="2"/>
<Button x:Name="cameraButton" IsEnabled="{Binding Frame.CanGoBack, ElementName=pageRoot}" Style="{StaticResource CameraAppBarButtonStyle}" BorderThickness="0,2,2,0" Margin="0" Click="cameraButton_Click" VerticalAlignment="Center" HorizontalAlignment="Center" Grid.Column="3"/>

以下のように表示されました!


charimage


文字として登録されているアイコンは使えるけど、自作のアイコンを使う場合はどうしたらよいのかな?ご存知の方がいたら教えてください!


もしかして、Fontを作成しないといけない!?

6/10/2012

Azure Storage を利用している Windows Azure Virtual Machine の VHDイメージへの書き込み速度

 ついにWindows AzureにもLinuxをVirtual Machineを利用することができるようになりました!このディスクは今までのAzure Storageを利用することになるのですが、ご存知の通りAzure Storageは普通のストレージではありません。詳細はについては他の資料で確認していただければと思いますが、RESTインタフェースを持つHTTP Requestでアクセスするため、どうしても気になってくるのはディスクの書き込み速度です。

今回はVirtual MachineでLinuxが動くこともあり、さっそくスモールインスタンスのUbuntuでディスクの書き込み速度を確認してみました。ddで1GBのファイルを作成してみます。

※昔からあるWindows Azure Cloud ServiceのWebRoleとかWorkerRoleはローカルストレージを利用するので今回計測するディスクとは異なるので注意です。

1. Windows Azure で Ubuntu + Azure Storage

 

ddで1MB毎の書き込みを1024回

~$ time dd if=/dev/zero of=testfile bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 55.0982 s, 19.5 MB/s

real    0m55.105s
user    0m0.008s
sys     0m3.012s

ddで1GBを1回で書き込み

~$ time dd if=/dev/zero of=testfile bs=1024M count=1
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB) copied, 89.1004 s, 12.1 MB/s

real    1m29.463s
user    0m0.000s
sys     0m3.916s

2. Amazon Linux + EBS

 判断しにくいと思いますので、EC2のEBSタイプの速度も確認してみます。EBSはAzure Storageとは性質の違うストレージでスナップショットを作成しない限りは Availability Zone 依存なストレージです。

ddで1MB毎の書き込みを1024回

~$ time dd if=/dev/zero of=testfile bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 15.2627 s, 70.4 MB/s

real    0m15.282s
user    0m0.004s
sys     0m1.740s

ddで1GBを1回で書き込み

~$ time dd if=/dev/zero of=testfile bs=1024M count=1
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB) copied, 22.6907 s, 47.3 MB/s

real    0m23.415s
user    0m0.000s
sys     0m3.208s

思った通りというか技術的に違うものなのでAzure Storageと比べると速いですね。ということで次は、見た感じ似ている技術のストレージ速度を計測するために、s3fsでS3にマウントしてデータを書き込んでみます。

3. Amazon Linux + S3 with s3fs

 Azure Storage は同一地域内で異なる Fault Domain に3つのコピーされており、RESTのインタフェースを持つため、EBSと比べると機能もかなり違います。なので、見た感じ似ている S3を使用した s3fs の速度を計測してみます。

1MB毎の書き込みを1024回

/mnt/s3resource$ time dd if=/dev/zero of=testfile bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 132.277 s, 8.1 MB/s

real    2m12.576s
user    0m0.001s
sys     0m3.723s

 

1GBを1回で書き込み

/mnt/s3resource$ time dd if=/dev/zero of=testfile bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 133.855 s, 8.0 MB/s

real    2m14.017s
user    0m0.002s
sys     0m3.801s

思っていた感じですね。fuseを使っていることも関係しているかもしれませんね。

4. Windows Azure で Ubuntu + Local Storage

 さいごに、Windows Azure の Virtual Machine には、ローカルストレージも存在するので、こちらの速度も測定してみます。Ubuntu の /mnt/resource にマウントされているディスクは、インスタンスのローカルストレージにマウントされているようで、Virtual Machine削除時にはデータが削除されてしまいますが、速度を要求する場合はこちらを使用した方がよさそうです。

1MB毎の書き込みを1024回

/mnt/resource# time dd if=/dev/zero of=testfile bs=1024M count=1
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB) copied, 2.75891 s, 389 MB/s

real    0m2.846s
user    0m0.000s
sys     0m2.248s

1GBを1回で書き込み

/mnt/resource# time dd if=/dev/zero of=testfile bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 1.53529 s, 699 MB/s

real    0m1.893s
user    0m0.000s
sys     0m1.452s

ローカルストレージは流石に速いですね。

まとめ

書き込み速度なので、読み込み速度はまた今度。

Azure Storage で保存されたデータは、同一地域内で異なる Fault Domain に3つのコピーされているので、見た感じ同じ技術条件で Virtual Machine のディスク速度を考えてみると、s3fs との比較になると思うのですが、速度的にかなり頑張っている感じがします。とはいえ、起動した後そのまま使うと遅い感じはするので、サービスで利用するミドルウェアによってはAzure Storageと/mnt/resourceのローカルストレージをバランスよく使用したほうが良いと思います。ミドルウェアの性質からWindows Azure の Linux 利用時のデザインパターンが作れそうですね。

あとAzure Storageで忘れてはいけないのが、Geo-Replication(地域間の自動バックアップ)です。利用中のLinuxが常に異なる地域でバックアップされているのは非常に安心ですし、クラウドな感じがします。

meetazure

時間があれば Linux から Azure Storage を Raid とかに設定しみたいですねー。

5/19/2012

Windows Azure Marketplace の Microsoft Translator API を使ってみる

1年前ぐらいからMicrosoft Translator APIにはお世話になりっぱなしなのですが、Bing AppIDを使ったAPI利用が2012年8月までとなり、それ以降もAPIを使い続けるには少しプログラムを修正しないといけないようです。では、どのような変更を行わないといけないか、新規にアプリケーションを登録するところからみてみます。

はじめに Windows Azure Marketplace と Access Token

Microsoft Translator APIは翻訳を提供するサービスです。このサービスを利用すると自分のアプリケーションで翻訳機能を利用することができます。このサービスはWebサービスとして提供されていてHTTP通信が可能なプラットフォームであれば利用することができます。もちろんWebアプリ(サーバサイド、クライアントサイド)やLinux、Windows、iOSなどでも利用できます。利用するにはWindows Azure MarketplaceでLiveIDの登録とアプリケーションの登録を行います。

今まではBing APIからAppIDを取得して、そのAppIDをAPI呼び出しに使用していましたが、Azure DataMarketから取得した Access Token を使ったAPI呼び出しに変更されました。では、Windows Azure Marketplaceへの登録から始めてみましょう。

1. Azure Marketplace で Microsoft Translator の利用登録

Windows Azure Marketplace(以下のURL)でMicrosoft Translator APIのサブスクリプション登録を行います。Bing AppIDを利用していたころは、翻訳文字数による制限は書かれていませんでしたが、Windows Azure Marketでは翻訳文字数によって料金がかかるようです。今回はお金のかからないプラン「2,000,000文字/月」を選択してみます。

https://datamarket.azure.com/dataset/1899a118-d202-492c-aa16-ba21c33c06cb

Azure

2. Azure DataMarketにアプリケーションを登録

つぎに、Azure DataMarket(以下のURL)に自分が作成しているアプリケーションの登録を行います。この登録はAPIを利用するために重要な作業です。この登録で取得する「顧客の秘密」(英語だとClient Secret)と、「クライアントID」(英語だとClient ID)はAPIで使用します。

https://datamarket.azure.com/developer/applications

develop02

項目名から何を記入したらよいのかわからないと思いますので、以下に記入内容を書いておきます。

クライアントID Azure DataMarketで管理するユニークなアプリケーションのID。アプリケーションのログインIDみたいな感じですね。 例:kentaapplication
名前 人間がわかりやすいアプリケーションの名前です。 例: Kenta’s Application
顧客の秘密 自動で生成されますので、書き換えないでください。Client Secretとなり、Access Tokenを取得する際に使います。 例: A90eqOP776O2fmjOrVog8f90I6jc9uAL1UAp0twj278=
リダイレクトURL Microsoft Translator APIでは使用しませんが、必修フィールドとなっていますので、適当なURLを記入します。 例: https://kentablog.cluscore.com
説明 アプリケーションの説明を書きます。記入しなくてもよいです。 例: It’s my application

 

3.アプリケーションでの利用方法 その1Access Tokenを取得する

アプリケーションから Microsoft Translator API を利用する方法です。Microsoft Translatorは、AJAX向けインタフェース、HTTP向けインタフェース、SOAP向けインタフェースを持ちます。HTTPとSOAPでアクセスするにはAccess Tokenが必要になりますので、先にトークンサービスからAccess Tokenを取得する方法を紹介します。

Access Token はDataMarket のトークンサービスに HTTP POST リクエストを送信することにより取得します。

トークンサービスURL

https://datamarket.accesscontrol.windows.net/v2/OAuth2-13

トークン要求入力パラメータ―

client_id Azure DataMarketに登録した、クライアントID
client_secret Azure DataMarketで得られた、顧客の秘密
scope Microsoft Translator APIを使用するので、値を http://api.microsofttranslator.com にする
grant_type Microsoft Translator APIで使用する場合は、値を“client_credentials”にする

 

トークン要求出力パラメータ―

access_token Microsoft Translator APIにアクセスするためのAccess Token
token_type Access Tokenのフォーマット
expires_in Access Tokenが有効な秒数
scope このトークンが有効なドメインスコープ。Microsoft Translatorの場合は、http://api.microsofttranslator.com

上記に従ったHTTP POSTリクエストを作成すればよいのですが、お手本があるのでそちらを参照します。以下のMSDNのC#サンプロコードから、 AdmAccessToken クラスと AdmAuthentication クラスをコピーして、AdmAuthentication.cs に保存して利用します。

http://msdn.microsoft.com/en-us/library/hh454950.aspx

[DataContract]
public class AdmAccessToken
{
    ....
}

public class AdmAuthentication
{
    ....
    public AdmAuthentication(string clientId, string clientSecret)
    {
        ....
    }
     public AdmAccessToken GetAccessToken()
    {
        ....
    }
     private AdmAccessToken HttpPost(string DatamarketAccessUri, string requestDetails)
    {
        ....
    }
}

Access Tokenを取得した後は、APIに渡すためにAuthentication Headerを作成します。Authrization Headerは、トークンサービスから取得したAccess Token文字列の前に”Bearer “を追加した文字列になります。


string authorizationHeader = “Bearer“ + “ “ + accessToken;

上記のコードを使うと以下のようになります。


var admAuth = new AdmAuthentication("kentaapplication", "A90eqOP776O2fmjOrVog8f90I6jc9uAL1UAp0twj278=");
admToken = admAuth.GetAccessToken();
authenticationHeaderValue = "Bearer " + admToken.access_token;


Access Tokenは10分間有効なので定期的に新しいAccess Tokenを取得する必要があります。


アプリケーションでの利用 その2Microsoft Translator APIを使ってみる


Access Token を取得できるようになったので、いよいよ Microsoft Translator API を使ってみます。API は AJAX、SOAP、HTTP の3つのインタフェースを持ちますが、ここでは SOAP と HTTP インターフェースを紹介します。


SOAPインタフェース

VisualStudio2010 で.NETを利用したアプリケーションを書いている人にとっては、すごく便利なインタフェースです。手順としては、「ソリューションエクスプローラー」の「プロジェクト」のコンテキストメニューより、「サービス参照の追加」を選択します。「アドレス」に以下のURLを記入して「移動」ボタンをクリックするとMicrosoft Translator API を Webサービスから取得してきますので、「名前空間」に自分の好きなクラス名を入力して「OK」をクリックするだけでMicrosoft Translator のクラスが作成されます。


APIを使うときは、以下のようにメソッドを呼び出すだけです。第一引数AppIDにAccess Tokenを取得した時に作成したAuthentication Headerを入力します・


var translator = new MyTranslator.LanguageServiceClient();
var url = translator.Speak(authenticationHeaderValue , "こんにちは", "ja", "audio/wma", "MinSize");


HTTPインタフェース


HTTPのインタフェースは多くのプラットフォームで利用できる便利なインタフェースです。libcurlとかを使えばCでも利用することができると思いますし、PHPやJavaなどのでHTTPを使った方が便利だと思います。だけど今回はC#で。


string uri = "http://api.microsofttranslator.com/v2/Http.svc/Speak";
uri = uri + string.Format("?text={0}&language={1}&format={2}&option={3}",
    HttpUtility.UrlEncode("こんにちは"),
    "ja",
    HttpUtility.UrlEncode("audio/wav"),
    "MinSize");
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(uri);
httpWebRequest.Headers.Add("Authorization", authenticationHeaderValue);
WebResponse response = null;
try
{
    response = httpWebRequest.GetResponse();
    using (Stream stream = response.GetResponseStream())
    {
        using (SoundPlayer player = new SoundPlayer(stream))
        {
            player.PlaySync();
        }
    }
}


SOAPの時はURLが出力されましたが、HTTPの場合は音声データを取得できます。


まとめ


Microsoft Translator APIは、Bing AppIDを必要とするとき同じAPI引数となっていますが、Windows Azure DataMarketでは、AppIDではなくAccess Tokenが含まれたAuthenticator HeaderによりAPIの利用が可能となります。Bing AppIDを利用している他のAPIもWindows Azure Marketplaceに移行するようですので、今回の例と同じようにAccess Tokenを取得して利用することができると思います。


Windows Azure Marketplace で提供されている Microsoft Translator を含め、自分のアプリケーションに利用すると便利なサービスが沢山あるので、どんどん使いたいですね。クラウドって素晴らしい。


参考サイト


Obtaining an Access Token


http://msdn.microsoft.com/en-us/library/hh454950.aspx


Microsoft Translator Developer Offerings


http://www.microsofttranslator.com/dev/

5/11/2012

Windows Azureが使用しているIPv4アドレスレンジ

 Windows Azureが使用しているIPアドレスレンジが以下のサイトで公開されていますね。Windows Azureはサービス単位でグローバルIPv4アドレスが振られるため、インスタンス毎にグローバルIPアドレスが振られるクラウドサービスと比べると少ないIPv4アドレスレンジとなるはずです。

http://www.microsoft.com/en-us/download/details.aspx?id=29840

細かく切られているCIDRも結構持ってますね。IPv4の払い出しが終了しているので苦労がわかります。地域によってバラつきがあるんですね。

以下は、2012年5月11日時点のIPv4アドレス(足りない気がするけど。)

(内部のネットワーク構成はわかりませんので、ブロードキャストアドレスとネットワークアドレスも数えています)

地域チイキ ネットワーク IPスウ 合計ゴウケイIPスウ
North Europe 213.199.160.0/20 4,096 30,976
213.199.184.0/21 2,048
94.245.112.0/20 4,096
94.245.88.0/21 2,048
94.245.104.0/21 2,048
65.52.64.0/20 4,096
65.52.224.0/22 1,024
65.52.228.0/22 1,024
65.52.248.0/21 2,048
157.55.3.0/24 256
168.63.32.0/19 8,192
West Europe 94.245.97.0/24 256 19,168
65.52.128.0/19 8,192
213.199.128.0/21 2,048
213.199.180.112/28 16
213.199.180.32/28 16
213.199.180.96/28 16
213.199.180.192/26 64
213.199.183.0/24 256
157.55.8.128/28 16
157.55.8.144/28 16
157.55.8.160/28 16
157.55.8.64/26 64
168.63.0.0/19 8,192
East Asia 111.221.64.0/22 1,024 17,856
207.46.72.0/26 64
207.46.89.16/28 16
207.46.95.32/27 32
207.46.77.224/28 16
65.52.160.0/19 8,192
207.46.87.0/24 256
207.46.67.160/27 32
207.46.67.192/27 32
168.63.128.0/19 8,192
South East Asia 207.46.48.0/20 4,096 22,528
111.221.16.0/21 2,048
111.221.80.0/20 4,096
111.221.96.0/20 4,096
168.63.160.0/19 8,192
South Central US 65.55.80.0/20 4,096 48,176
65.54.48.0/21 2,048
65.55.64.0/20 4,096
70.37.48.0/20 4,096
70.37.64.0/18 16,384
65.52.32.0/21 2,048
70.37.160.0/21 2,048
157.55.176.0/20 4,096
157.55.103.48/28 16
157.55.192.0/22 1,024
157.55.103.32/28 16
157.55.196.0/22 1,024
157.55.200.0/22 1,024
157.55.153.224/28 16
157.55.80.0/22 1,024
157.55.84.0/22 1,024
North Central US 207.46.192.0/20 4,096 45,936
65.52.0.0/19 8,192
65.52.192.0/19 8,192
65.52.48.0/20 4,096
209.240.220.0/23 512
65.52.106.240/28 16
65.52.106.16/28 16
65.52.107.0/28 16
65.52.106.224/28 16
65.52.106.32/27 32
65.52.106.64/27 32
65.52.106.160/27 32
65.52.106.192/27 32
65.52.106.96/27 32
65.52.106.128/27 32
157.55.136.0/21 2,048
157.55.160.0/20 4,096
157.55.60.224/28 16
157.55.24.0/21 2,048
157.55.208.0/21 2,048
157.55.60.240/28 16
157.55.151.0/28 16
157.55.216.0/22 1,024
157.55.220.0/22 1,024
157.55.73.32/28 16
157.56.8.0/22 1,024
157.56.12.0/22 1,024
157.56.24.160/28 16
65.52.232.0/22 1,024
65.52.236.0/22 1,024
157.56.24.176/28 16
65.52.240.0/22 1,024
65.52.244.0/22 1,024
157.56.24.192/28 16
157.56.28.0/22 1,024
157.55.252.0/22 1,024