Using Windows Azure
Upcoming SlideShare
Loading in...5
×
 

Using Windows Azure

on

  • 4,914 views

Putting PHP Application, MySQL, Mediawiki on Windows Azure

Putting PHP Application, MySQL, Mediawiki on Windows Azure

Statistics

Views

Total Views
4,914
Views on SlideShare
4,212
Embed Views
702

Actions

Likes
2
Downloads
21
Comments
0

7 Embeds 702

http://d.hatena.ne.jp 606
http://blog.stanaka.org 43
http://stanaka.hatenablog.com 32
http://www.slideshare.net 14
http://webcache.googleusercontent.com 5
http://honyaku.yahoofs.jp 1
http://www.docshut.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Using Windows Azure Using Windows Azure Presentation Transcript

  • Windows Azure で LL 言語系 Web アプリケーション開発 はてな 田中 慎司 stanaka @ hatena.ne.jp http://d.hatena.ne.jp/stanaka/ http://twitter.com/stanaka/
  • アジェンダ
    • Azure とは
      • GAE/AWS と比較
    • 試してみた
      • Hello World 級
      • PHP on Azure
      • PHP & MySQL on Azure
      • Mediawiki on Azure
  • スペック
    • 基本的に Linux 系
      • いわゆる LAMP スタック
      • Linux, Apache, MySQL, Perl
      • IDE は使わない
    • Windows との接点
      • メインのノート PC は Windows
      • VB, C# は知っている
      • COM コンポーネントは一度書いたことがある
        • VisualStudio
  • 今日のテーマ
    • LL 系言語エンジニアからの視点
    • クラウドサービスでの Azure の位置付け
      • Azure – AWS – GAE
    • Azure の勘所
      • とりあえず動かしてみる
  • Azure とは
    • Microsoft によるクラウドサービス
      • アプリケーションの動作サービス (Windows Azure)
      • ネットワークサービス (.NET Services)
      • クラウドの RDB(SQL Azure)
  • Windows Azure
    • Windows Azure Compute
      • Web Role
      • Worker Role
    • Windows Azure Storage
      • BLOB
      • Table
      • Queue
      • Drive
  • Role
    • Web Role
      • ウェブアプリケーション向け
      • IIS
      • .NET Framework
    • Worker Role
      • バッチ処理向け
        • 普通の TCP 通信もできる
      • .NET Framework
  • Storage
    • BLOB
      • メディアイメージ
      • HTTP REST でアクセス
    • Table
      • BigTable 的 DB
    • Queue
      • メッセージキュー
    • Drive( 未リリース ?)
      • NTFS ドライブ
  • Amazon Web Services
    • EC2
      • IA サーバ環境を提供
      • 時間貸しレンタルサーバ
    • ストレージ
      • S3
      • CloudFront
    • サービス
      • Elastic Block Storage
      • Relational Database Service
      • SimpleDB
      • Simple Queue Service
  • Google Application Engine
    • 自動的にスケールする
    • 柔軟なデータストア (BigTable)
    • サービス
      • URL フェッチ
      • メール
      • Memcache
      • 画像操作
      • cron
      • XMPP 通信
  • Google Application Engine の制約
    • 言語の制約
      • Python/Java のみ
    • 処理機能の制約
      • サーブレットによる 30 秒以上を要するリクエスト処理
      • サーブレットによるレスポンス送出時のデータストリーミング
      • ファイルシステムへの書き込み
      • 外部サーバーへのソケット接続
    • VM 機能の制約
      • スレッド生成
      • ガベージコレクション実行やシステム停止
      • カスタムクラス・ローダの利用
  • Windows Azure の特性
    • EC2 と GAE の中間
      • インスタンスは意識する
        • ただし各インスタンスの直接制御はできない
      • .NET が基本だが、ネイティブアプリも動作
        • C/C++ のコードも動く
        • 言語処理系を上げてしまえば、なんでも動く !!
        • MySQL/memcached も動く
  • 開発環境
    • VisualStudio
      • Microsoft Visual Web Developer 2008 Express Edition
    • Eclipse
    • Azure SDK
  • Azure Platform Interoperability
    • Windows Azure Tools for Eclipse
    • PHP / Java などとの Interoperability にも注力
      • http://www.microsoft.com/windowsazure/interop/
  • Azure の開発フロー
    • Visual Studio / Eclipse で開発
      • ビルドも
    • ローカルテスト環境にデプロイ
    • Azure にデプロイ
      • Staging で確認
      • Prodution に展開
  • LL 言語系 Web 屋から観点
    • .NET の世界
      • C# という言語がある
    • IIS ってなんだ
      • Internet Information Services
    • IDE に抵抗がある
      • 統合開発環境
      • Eclipse / Visual Studio
  • Azure への期待
    • クラウドプレイヤーの増加
      • AWS vs GAE vs Azure
      • 競争促進
    • ロックインの排除
      • アプリレイヤーとクラウドレイヤーの疎結合化
      • Azure は、 GAE ほど極端ではない
  • Azure の開発フロー (LL 言語向け )
    • Emacs / vi で開発
    • コマンドラインでビルド
      • IDE だとよく分からない
  • 簡単な Azure アプリ /ProjectRoot/ WebRole/ index.html simple.csdef .. クラウド・サービス定義ファイル simple.cscfg .. クラウド・サービス構成ファイル
  • 簡単な Azure アプリ
    • simple.csdef クラウド・サービス定義ファイル
    <?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?> <ServiceDefinition name=&quot;Simple&quot; xmlns=&quot;http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition&quot;> <WebRole name=&quot;WebRole&quot;> <ConfigurationSettings> </ConfigurationSettings> <InputEndpoints> <!-- Must use port 80 for http and port 443 for https when running in the cloud --> <InputEndpoint name=&quot;HttpIn&quot; protocol=&quot;http&quot; port=&quot;80&quot; /> </InputEndpoints> </WebRole> </ServiceDefinition>
  • 簡単な Azure アプリ
    • simple.cscfg クラウド・サービス構成ファイル
    <?xml version=&quot;1.0&quot;?> <ServiceConfiguration serviceName=&quot;Simple&quot; xmlns=&quot;http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration&quot;> <Role name=&quot;WebRole&quot;> <Instances count=&quot;1&quot;/> <ConfigurationSettings> </ConfigurationSettings> </Role> </ServiceConfiguration>
  • 簡単な Azure アプリ
    • index.html
    <html> <head><title>Quick Sample</title></head> <body> This a quick sample. <br /> <img alt=&quot;Sample Photo&quot; src=&quot;photo.jpg&quot; /> </body> </html>
  • 簡単な Azure アプリ
    • ビルド
    • デプロイ
    >cspack simple.csdef /copyonly Windows(R) Azure(TM) Packaging Tool version 1.0.0.0 for Microsoft(R) .NET Framework 3.5 Copyright (c) Microsoft Corporation. All rights reserved. >csrun simple.csx simple.cscfg Windows(R) Azure(TM) Desktop Execution Tool version 1.0.0.0 for Microsoft(R) .NET Framework 3.5 Copyright (c) Microsoft Corporation. All rights reserved. Using session id 1 Created deployment(34) Started deployment(34) Deployment input endpoint HttpIn of role WebRole at http://127.0.0.1:82/
  • 簡単な Azure アプリ
    • 開発環境にデプロイ
  • 簡単な Azure アプリ
    • 動作 !
  • 簡単な Azure アプリ
    • 本番
  • PHP on Azure
    • PHP の言語処理系 (php.exe) を Azure 上に送りこむ
      • ネイティブコードサポート !
  • PHP on Azure /ProjectRoot/ WebRole/ index.php web.config simple.csdef .. クラウド・サービス定義ファイル simple.cscfg .. クラウド・サービス構成ファイル
  • PHP on Azure
    • phpsimple.csdef クラウド・サービス定義ファイル
    <?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?> <ServiceDefinition name=&quot;phpsimple&quot; xmlns=&quot;http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition&quot;> <WebRole name=&quot;WebRole&quot; enableNativeCodeExecution=&quot;true“ > <ConfigurationSettings> </ConfigurationSettings> <InputEndpoints> <!-- Must use port 80 for http and port 443 for https when running in the cloud --> <InputEndpoint name=&quot;HttpIn&quot; protocol=&quot;http&quot; port=&quot;80&quot; /> </InputEndpoints> </WebRole> </ServiceDefinition>
  • PHP on Azure
    • phpsimple.cscfg クラウド・サービス構成ファイル
    <?xml version=&quot;1.0&quot;?> <ServiceConfiguration serviceName=&quot;phpsimple&quot; xmlns=&quot;http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration&quot;> <Role name=&quot;WebRole&quot;> <Instances count=&quot;1&quot;/> <ConfigurationSettings> </ConfigurationSettings> </Role> </ServiceConfiguration>
  • PHP on Azure
    • index.php
    <html> <head><title>Hello World PHP</title></head> <body> <?php echo 'Today is '. date('Y-m-d') .&quot; &quot;; ?> </body> </html>
  • PHP on Azure
    • web.config
    <?xml version=&quot;1.0&quot;?> <configuration> <system.webServer> <handlers> <add name=&quot;FastCGIHandler&quot; verb=&quot;*&quot; path=&quot;*.php&quot; scriptProcessor=&quot;%RoleRoot%approotPHPphp-cgi.exe&quot; modules=&quot;FastCgiModule&quot; resourceType=&quot;Unspecified&quot; /> </handlers> <defaultDocument> <files> <add value=&quot;index.php&quot;/> </files> </defaultDocument> </system.webServer> </configuration>
  • PHP on Azure
    • web.roleconfig
    <?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?> <configuration> <system.webServer> <fastCgi> <application fullPath=&quot;%RoleRoot%approotPHPphp-cgi.exe&quot; /> </fastCgi> </system.webServer> </configuration>
  • PHP on Azure
    • ビルド
    • デプロイ
    >cspack phpsimple.csdef /copyonly Windows(R) Azure(TM) Packaging Tool version 1.0.0.0 for Microsoft(R) .NET Framework 3.5 Copyright (c) Microsoft Corporation. All rights reserved. >csrun phpsimple.csx phpsimple.cscfg Windows(R) Azure(TM) Desktop Execution Tool version 1.0.0.0 for Microsoft(R) .NET Framework 3.5 Copyright (c) Microsoft Corporation. All rights reserved. Using session id 1 Created deployment(32) Started deployment(32) Deployment input endpoint HttpIn of role WebRole at http://127.0.0.1:82/
  • PHP on Azure
    • 開発環境にデプロイ
  • PHP on Azure
    • 動作 !
  • PHP & MySQL on Azure
    • Windows Azure MySQL PHP Solution Accelerator
      • http://code.msdn.microsoft.com/winazuremysqlphp
    • MySQL
      • php.exe に加え、 mysql.exe も送りこむ
      • Worker Role で mysql のインスタンスを起動させる
  • PHP & MySQL on Azure
    • Windows Azure MySQL PHP Solution Accelerator をダウンロード・展開
    • PHP, MySQL, PHPMyAdmin などを詰め込む
    • ディレクトリ構成
  • MySQL を WorkerRole で動かす
    • LocalStorage を定義 (ServiceDefinition.csdef)
    <LocalResources> <LocalStorage name=&quot;InstMgrLocalStorage&quot; sizeInMB=&quot;75&quot; cleanOnRoleRecycle=&quot;false&quot; /> <LocalStorage name=&quot;MySQL&quot; sizeInMB=&quot;75&quot; cleanOnRoleRecycle=&quot;false&quot; /> <LocalStorage name=&quot;MySQLDatastore&quot; sizeInMB=&quot;122880&quot; cleanOnRoleRecycle=&quot;false&quot; /> <LocalStorage name=&quot;BlobBackup&quot; sizeInMB=&quot;2&quot; cleanOnRoleRecycle=&quot;false&quot; /> </LocalResources>
  • MySQL を WorkerRole で動かす
    • Wrapper で指定 (MySQLAccess.cs)
    public bool Start(int id) { try { string baseDir = RoleEnvironment.GetLocalResource(&quot;MySQL&quot;).RootPath.Replace('apos;, '/'); string dataDir = RoleEnvironment.GetLocalResource(&quot;MySQLDatastore&quot;).RootPath.Replace('apos;, '/'); string blobDir = RoleEnvironment.GetLocalResource(&quot;BlobBackup&quot;).RootPath.Replace('apos;, '/'); … File.Copy(&quot;my.ini&quot;, iniFile, true); //update teh my.ini file with mysql server details UpdateMyIni(iniFile, baseDir, dataDir, port, id.ToString());
  • PHP & MySQL on Azure
  • PHP & MySQL on Azure
  • Mediawiki on Azure
    • Windows Azure Mediawiki MySQL Solution Accelerator
      • http://code.msdn.microsoft.com/winazuremediawiki
      • 基本的には、 Windows Azure MySQL PHP Solution Accelerator と同等
  • Mediawiki on Azure
    • memcached を動かす
      • MySQL と同様に Worker Role + C# の Wrapper
    protected void RunMemcached() { IPEndPoint endpoint = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints[&quot;memcached&quot;].IPEndpoint; string cacheSize = RoleEnvironment.GetConfigurationSettingValue(&quot;CacheSizeInMB&quot;); string arguments = &quot;-m &quot; + cacheSize + &quot; -l &quot; + endpoint.Address + &quot; -p &quot; + endpoint.Port; ProcessStartInfo startInfo = new ProcessStartInfo(); … try { using (Process exeProcess = Process.Start(startInfo)) { exeProcess.WaitForExit();
  • Mediawiki on Azure
  • その他 Ruby on Rails on Azure
    • FastCGI 対応のものは動かせる
      • Ruby on Rails も
      • http://rubyonrails.cloudapp.net
  • まとめ
    • Azure を試してみた
      • LL 系言語アプリも十分動かせる
    • Amazon EC2 の対抗として十分なポテンシャルがありそう
    • ただし、もうすこし UNIX-like な開発環境があると親和性が高くなる
      • OSX な開発者もいるので ..