More Related Content Similar to PHP on Windows Azure Training Similar to PHP on Windows Azure Training (20) More from Microsoft Openness Japan More from Microsoft Openness Japan (11) PHP on Windows Azure Training1. PHP
on
Windows Azure
training
ver.20121127-1.3.3
日本マイクロソフト株式会社
株式会社pnop
3. About me
© 2011 Microsoft Corporation
All Rights Reserved.
Windows
Azure Database
Find me
kuniteru.asami
4. Agenda (1)
1. Windows Azure概要・アーキテクチャ
2. クラウドサービスへのデプロイ環境
3. クラウドサービスのプロジェクトファイル構成
4. クラウドサービスへのデプロイ
5. Demo - クラウドサービスプロジェクト作成からデプロイ
6. クラウドサービスへのPHP環境の構築
7. Azure Storageを利用する
8. Azure Blobを利用する
9. Azure Tableを利用する
10. SQL Databaseを利用する
4
7. Windows Azure
Fabric SQL Database
Computing
Controller
Cloud Services Caching Database
Load
WebSites Data Sync
Balancer
Virtual Machine Windows Linux Business
Analytics
CDN Blob Drive Table Queue
Storage
Networking Mobile Services Hadoop/HPC
Vitrual Network Connect Traffic Manager
Media Services Store
7
8. Computing(1)
Firewall Rules
Virtual Network
O/S O/S
Virtualization Virtualization Virtualization
Hardware Hardware Hardware
10. Webサイト
(Websites)(1)
• 環境構築が超簡単
• git pushやftpsで、アプリケーションをデプロイできる
• GALLERYからいくつかのオープンソースWebアプリケーション
を選択してインストールできる
• Drupal、Joomla!、WordPress
• WebMatrixを利用してオープンソースWebアプリケーションを構
築できる
• 65のWebアプリケーションがある(.NET及び同アプリ言語違いを含む、
2012/06/30現在)
• SQL DatabaseやMySQLの環境構築もワンストップでできる
11. Webサイト(2)
• 運用コストが低い
• OSパッチ適用などはサービスが停止しないまま自動で実施される
• 無料で利用することもできる
• 制限が多い
• 1サイトに10インスタンスまで
• Webサーバーしか作れない
• 3種類のサーバータイプから選択できる
• 共有サーバー(無料)
• 独自ドメインが利用できない
• 共有サーバー
• VM占有
12. 仮想マシン
(Virtual Machines)
• なんでもできる
• MySQLや他のアプリケーションの構築が簡単
• Linuxを選択できる
• もちろんWindows Serverも
• 永続的なローカルディスクを持つ
• メンテナンスコストが高い
• OSパッチなどは自身で管理する必要がある
• PHPのランタイムは自分でインストールする必要がある
13. クラウドサービス
(Cloud Services) (1)
• 運用コストが低い
• OSパッチ適用などはサービスが停止しないまま自動で実施するこ
ともできる
• Memcached互換サーバーの構築が簡単
• イレギュラーなことをやろうとすると環境構築が難しい
• MySQLなどの構築もできるがバックアップなどの運用も考えると
大変な場合も
• PHPのランタイムは自分でセットアップする必要がある
14. クラウドサービス(2)
• Hosted Serviceには以下の種類のRoleのインスタンス(仮想サーバー)群が
含まれる
各ロールの中には複数のゲストOSが稼働することができる
• Web Role
主にWebサーバーになる
• Worker Role
主にバックグラウンドでサービスを受け持つサーバーになる
• VM Role(過去のもの)
アプリケーションを組み込んだOSイメージごとアップロードして稼働させる
カスタマイズが容易だがメンテナンス性が低い
• インスタンスサイズはExtraLarge, Large, Medium, Small, ExtraSmallがある
• 負荷に応じてRole内で稼働させるインスタンスの台数を増減することが容易
• メンテナンスなどによりインスタンスがリフレッシュ(再起動)すると、OS
やIISなどの設定や、ローカルディスクに保存していたファイルが初期状態に
戻る。そのため、永続化したい設定やデータは、Azure StorageやSQL
Databaseに格納する必要がある。
14
15. Azure Storage
以下のコンポーネントを持つ
• Azure Blob
• ファイルを格納するストレージ
• Azure Drive
• インスタンスにマウントできるディスクイメージファイル
• Azure Blobに格納される
• Azure Table
• Key Value Store
• Azure Queue
• インスタンス間のデータの受け渡しをする
• 格納したデータを他のインスタンスが参照するとそのデータはなくな
る
ここに格納されたデータは、同一データセンター内で3重化されて保持し、
さらに他のリージョンのデータセンターにもコピーを保持する。
15
16. SQL Database
SQL ServerをベースにWindows Azureに最適化されたリレーショナ
ルデータベース
• マスタサーバーに加えて、自動で2つのスレーブサーバーにデータ
のコピーを保持する
• マスタサーバーの障害時には、スレーブサーバーの内の一つがマ
スタに昇格することで、停止時間を最小限に抑える
• データベースレベルでのバックアップは自動でとられている
(ユーザーが任意にリカバリすることはできない)
→ ユーザーの操作ミスなどによるデータ損失にはユーザーが責任
を
持つことになる
• 以前はSQL Azureと呼ばれていた
16
19. データセンター
• 北ヨーロッ
パ
(ダブリ アメリカ合衆国
ン) 北
東アジア
(シカゴ)
(香港)
アメリカ合衆国
西 アメリカ合衆国
西ヨーロッパ (非公開) 東
(アムステルダ 東南アジア (非公開)
ム) (シンガポー
ル) アメリカ合衆国中
央
CDNノードは以下の24か所に存在する (サン・アントニ
US EMEA Asia-Pacific/Rest of World オ)
• Ashburn, VA • Amsterdam, NL • Hong Kong, HK
• Bay Area, CA • Doha, QT • São Paulo, BR
• Chicago, IL • Dublin, IE • Seoul, KR
• San Antonio, TX • London, GB • Singapore, SG
• Los Angeles, CA • Moscow, RU • Sydney, AU
• Miami, FL • Paris, FR • Taipei, TW
• Newark, NJ • Stockholm, SE • Tokyo, JP
• Seattle, WA • Vienna, AT
• Zurich, CH
19
21. ここではクラウドサービスに対応するWindows Azureサービスパッケージの作成
とエミュレータ上でのテスト実行ができるものを紹介する
• Visual Studio系
• Visual Studio 2012, 2010
• Visual Studio Express 2012 for Web (無料)
• Visual Web Developer 2010 (無料)
• Windows Azure PowerShell
• 過去のもの
• Windows Azure Tools for Eclipse
• PHPAzureコマンド
• Webサイトの管理を中心としたWindows Azureコマンドラインツールもある
• Mac OS XやLinuxにも対応
エディタやデバッグは基本的には好みのIDE(Eclipse PDTやNetBeansなど)が
利用でき、Windows AzureへのデプロイはWebブラウザで実施できるのでここで
は取り上げない
21
22. デプロイ環境のセットアップ (1)
• PHP Developer CenterからWindows用のInstallerを利用してイン
ストールすることで、最低限必要なものが一式インストールされ
る
http://www.windowsazure.com/ja-jp/develop/php/
• 以下を追加するとなおよい
• Azure SQL Databaseに接続するための『Microsoft Drivers 3.0 for
PHP v5.3 for SQL Server in IIS(IIS Express)』
• Visual Studioを使う予定がなくても『Visual Studio Express 2012
for Web with Windows Azure SDK』をインストールしておいた方
が困った時に参考になる
22
24. デプロイ環境のセットアップ (2)
• ここまでの作業でWeb Platform InstallerがPCにインストールさ
れ、スタートメニューに存在する
• Web Platform Installerを利用することで、Azure開発に関するツー
ルが簡単にインストールできる
• PHPのオフィシャルサイトにあるバイナリを利用してインストー
ルしたい場合は、 Non Thread Safe版を利用する
24
25. Visual Studio 2012,
Visual Studio 2012 Express for Web
• Microsoftから提供される標準ツール
• Visual Studio 2012 Express for Webは無償で利用可能
• GUIで設定が可能
• 各種パラメータ設定
• リモートデスクトップの設定
• SSL証明書の組込
• OnStart, OnStop, Runなどのメソッドが利用可能(.NETで記述)
• 管理者モードで起動する必要がある
※ これ以降このドキュメント内では、
Visual Studioを『VS』と表記する場合がある
25
26. Windows Azure PowerShell
• Microsoftから提供されるPowerShellコマンド
• 全ての設定などは作成されたファイルを直接修正する
• 利用できるコマンドの一覧は、PowerShellコンソールでHelpコマ
ンドを実行すると取得できる
PS> help Azure
• コマンドのヘルプはHelpコマンドで対象のコマンドを指定すると
取得できる
PS> Get-Help Publish-AzureServiceProject
26
27. PHPAzureコマンド(過去のもの)
http://phpazure.codeplex.com/
• PHPAzure(Windows Azure SDK for PHP)にコマンドラインツールが含ま
れている
• 特別な設定なしでWindows AzureインスタンスにPHPラインタイムがインス
トールされる
• サービスパッケージ作成に必要なテンプレートファイルが用意されている
• 全ての設定などは作成されたファイルを直接修正する
• packageコマンドでデプロイパッケージの作成やエミュレータでの実行ができ
る
• PHPのコーディングには好きなテキストエディタを利用する
• セットアップ方法
1. ダウンロードしたファイルを適当なフォルダに解凍する
2. PHPランタイムのフォルダにPATHを通す
3. PHPAzureのbinフォルダにPATHを通す
27
28. Windows Azure Tools for Eclipse
(WindowsAzure4e) (過去のも
の)
http://www.windowsazure4e.org/
• ※ 開発が止まっていてWindows Azure SDK v1.6以降には対応していないのでお奨めしない
• Eclipse PDT + プラグイン
• PHPに対応したIDE
• XdebugやZend Debuggerなどが利用可能
• 一部の機能はGUIでは設定できない
• 各種パラメータ設定
• インスタンス数、インスタンスサイズの変更
• リモートデスクトップの設定
• SSL証明書の組込
• 特別な設定なしでWindows AzureインスタンスにPHPラインタイムがインストールされる
• php_azure.dll(後述)が古い
• PHPAzure(後述)が古い
• WebサーバーがデフォルトではHWCになる
• OnStartなどの.NETメソッドを実行することができない
• セットアップ方法 http://msdn.microsoft.com/ja-jp/windowsazure/hh240574
• Windows Azure SDK v1.6以降でも、以下の対応をすることで既存のプロジェクトのデプロイパッケージの作成は可能に
なる
• コマンドプロンプトを管理者モードで起動してcsrun.exeとMicrosoft.ServiceHosting.Tools.dllのシンボリックリンクを
SDKのbinに作成する
C:> mklink "%ProgramFiles%Windows Azure SDKv1.6bincsrun.exe"
"%ProgramFiles%Windows Azure Emulatoremulatorcsrun.exe"
C:> mklink "%ProgramFiles%Windows Azure SDKv1.6binMicrosoft.ServiceHosting.Tools.dll"
"%ProgramFiles%Windows Azure EmulatoremulatorMicrosoft.ServiceHosting.Tools.dll"
28
31. Roleの設定を記述するファイル (1)
• *.cscfgファイル(サービス構成ファイル)
• Windows Azure ファブリックでのサービスの実
行中に構成できるホステッド サービスの値を設
定するファイル。 サービス構成ファイル内の値
には、各ロールに必要なインスタンスの数、サー
ビス定義ファイルで設定されている構成パラメー
ターの値、サービスに関連付けられた管理証明書
がある場合はそのサムプリントなどが含まれる。
• インスタンス数やAzure OSバージョンの指定も
ここ。
• インスタンス数
Instanceエレメントのcountに指定
• OSバージョン
ServiceConfigurationエレメントのosFamilyアト
リビュート
• 1:Windows Server 2008 + IIS 7.0
• 2:Windows Server 2008 R2 + IIS 7.5
• 3:Windows Server 2012 + IIS 8.0 Visual Studio/Visual Web Developer の例
31
32. Roleの設定を記述するファイル (2)
• ServiceDefinition.csdef(サービス定義ファ
イル)
• アプリケーションのサービス モデルを定義
するファイル。このファイルには、ホス
テッド サービスを構成するロール、サービ
ス エンドポイント、構成設定、SSL エンド
ポイント用の証明書などが含まれる。 サー
ビスをデプロイして実行した後で、サービ
ス モデルを変更することはできない。
• インスタンスサイズの指定はここ。
WebRoleエレメントもしくはWorkerRoleエ
レメントのvmsizeアトリビュート
• ExtraSmall
• Small
• Medium
• Large
• ExtraLarge
Visual Studio/Visual Web Developer の例
32
33. Roleごとのプロジェクトファイル
Roleに配布するファイルなどを配置する
• WebサーバーRoleの場合は、
DOCUMENT_ROOTになる
• PHPスクリプト、画像、JavaScript、cssな
どを配置
• DOCUMENT_ROOTを変更することも可能
• *.csファイル(右画像の例では
WebRole.cs)
• OnStart(後述)やRunメソッドなどを記述
する
• Web.configファイル
• Apacheの.htaccessに相当する物
• URL Rewriteなど、ディレクトリごとのIIS
設定
• diagnostics.wadcfgファイル Visual Studio/Visual Web Developer の例
• httpdログやパフォーマンスログの取得設定
33
37. #5
Demo
クラウドサービスの
プロジェクト作成か
ら
デプロイ 37
38. • Visual Studio 2012 Express for Webによる
アプリケーションプロジェクト作成~パッケージ作成
• Windows Azure PowerShellによる
プロジェクト作成~パッケージ作成
• Windows Azure管理ポータルからのデプロイ
38
42. Startup Task (1)
インスタンス初期化時に任意のコマンドを実行することができる。
パッケージ内にバッチファイルを作成し、それを実行することが多い。
• ServiceDefinition.csdefに<startup>エレメント内で呼び出すコマンドを記載
<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="SimpleDemo" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
<WebRole name="WebRole" vmsize="Small">
:
<Startup>
<Task commandLine="startup.cmd" executionContext="elevated" taskType="simple" />
</Startup>
</WebRole>
</ServiceDefinition>
• commandLine:実行するコマンド。Roleルートからの相対パス
• executionContext:コマンドを実行する権限
• elevated:プロセスは管理者特権で起動される
• limited:プロセスをホストしているロールと同じ特権で実行
• taskType
• simple:現在のタスクが終了してから別のタスクが起動される
• background:現在のタスクが終了するのを待たない
• foreground:バックグラウンドと同様だが、この値ではすべての
フォアグラウンド タスクが終了するまでロールは再起動されない
42
43. Startup Task (2)
• バッチファイルはBOM付きのUTF-8で保存してはいけない
• VSやメモ帳で編集して保存すると、デフォルトではBOM付き
UTF-8になってしまう。
• メモ帳ではANSIを指定して保存すればOK
• 環境変数が使える
• %ProgramFiles%
• %ProgramFiles(x86)%
• %SystemDrive%
• %SystemRoot%
• appcmd.exeでIISの設定変更を行うことができる
• バッチファイルからPowerShellコマンドを呼び出すことも可能
• 最初に「@echo off」をして出力を抑制する
43
45. OnStartメソッド (2)
• IISの設定変更などその実行に管理者権限を必要とする処理がある
場合は、ServiceDefinition.csdefファイルでロールのRuntimeを
管理者特権に昇格する
<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="SimpleDemo" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
<WebRole name="WebRole" vmsize="Small">
:
<Runtime executionContext="elevated" />
</WebRole>
</ServiceDefinition>
• executionContext:
• elevated:管理者特権でプロセスが起動される
• limited:管理者特権なしでプロセスが起動される
45
46. WebPi Commandを利用して
PHPランタイムをセットアップする
(1)
Startup TaskでWebPi Commandを利用してPHPのランタイムをインストールす
る方法を紹介する
1. %ProgramFiles%MicrosoftWeb Platform Installerにある以下の4つのファ
イルをプロジェクトに含める
• Microsoft.Web.PlatformInstaller.dll
• Microsoft.Web.PlatformInstaller.UI.dll
• WebpiCmd.exe
• WebpiCmd.exe.config
2. VSの場合、含めたすべてのファイルの
『出力ディレクトリにコピー』プロパティを
『常にコピー』に変更する
※ Azure Power Shellなど、VS以外の場合は不要
3. ServiceDefinition.csdefを変更する(詳細次頁)
4. WebPiCmdを呼び出すバッチファイル
(setup_web.cmd)を作成し、
『出力ディレクトリにコピー』プロパティを
『常にコピー』に変更する(詳細次頁)
46
47. WebPi Commandを利用して
PHPランタイムをセットアップする
(2)
• ServiceDefinition.csdef
<?xml version="1.0"?>
<ServiceDefinition xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” xmlns:xsd=http://www.w3.org/2001/XMLSchema
name="phptest" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
<WebRole name="WebRole1" vmsize="ExtraSmall">
<Imports />
<Startup>
<Task commandLine="setup_web.cmd > log.txt" executionContext="elevated">
<Environment>
<Variable name="EMULATED">
<RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" />
</Variable>
<Variable name="RUNTIMEVERSIONPRIMARYKEY" value="5.3.17" />
<Variable name="RUNTIMEID" value="PHP" />
<Variable name="RUNTIMEURL" value="http://nodertea.blob.core.windows.net/php/5.3.17.exe" />
</Environment>
</Task>
</Startup>
<Endpoints>
<InputEndpoint name="Endpoint1" protocol="http" port="80" />
</Endpoints>
<Sites>
<Site name="Web">
<Bindings>
<Binding name="Endpoint1" endpointName="Endpoint1" />
</Bindings>
</Site>
</Sites>
</WebRole>
</ServiceDefinition>
出典:http://msdn.microsoft.com/ja-jp/library/windowsazure/hh691735(v=vs.103).aspx
47
48. WebPi Commandを利用して
PHPランタイムをセットアップする
(3)
• setup_web.cmd
@echo off
ECHO "Starting PHP Installation" >> log.txt
md "%~dp0appdata"
cd "%~dp0appdata"
cd "%~dp0"
reg add "hku.defaultsoftwaremicrosoftwindowscurrentversionexploreruser shell folders"
/v "Local AppData" /t REG_EXPAND_SZ /d "%~dp0appdata" /f
"%~dp0AssetsWebPICmd.exe" /Install /Products:PHP53,SQLDriverPHP53IIS /AcceptEula >>log.txt 2>>err.txt
reg add "hku.defaultsoftwaremicrosoftwindowscurrentversionexploreruser shell folders"
/v "Local AppData" /t REG_EXPAND_SZ /d %%USERPROFILE%%AppDataLocal /f
ECHO "Completed PHP Installation" >> log.txt
48
49. WebPi Commandを利用して
PHPランタイムをセットアップする
(4)
• Windows Azure PowerShellのAdd-AzurePHPWebRoleコマンド
により作成されるバッチファイルが参考になる
• 以下のコマンドを実行することでPHPをインストールするバッチ
ファイルが作成される
PS> Import-Module "C:Program FilesMicrosoft SDKsWindows AzurePowerShellAzureAzure.psd1"
PS> New-AzureServiceProject
:
ServiceName: phppj (任意のサービス名を入力する)
:
PS> cd phppj (直前にServiceNameで指定したサービス名)
PS> Add-AzurePHPWebRole
PS> cd WebRole1bin
PS> dir
Directory: C:tempphppjphptestWebRole1bin
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 10/25/2012 12:49 PM 2101 download.ps1
-a--- 9/13/2012 11:41 AM 1446 setup.cmd
-a--- 9/13/2012 11:41 AM 1268 setup.ps1
-a--- 10/31/2012 8:08 AM 1497 setup_web.cmd
※ 2012/11/28現在のバッチファイルは古いWebPIを利用してしまうので、新しいものを使うように書き換える必要が
ある
49
50. Windows Azure PowerShellを
利用してPHPランタイムをセットアップす
る(1)
1. Azureプロジェクトを作成する
PS> Import-Module "C:Program FilesMicrosoft SDKsWindows AzurePowerShellAzureAzure.psd1"
PS> Get-AzurePublishSettingsFile ← Webブラウザが起動するのでログインすると発行のための設定ファイルがダウンロードされる
PS> Import-AzurePublishSettingsFile “{ダウンロードしたファイル名をフルパスで}”
PS> mkdir ~phppj
PS> cd ~phppj
PS> New-AzureServiceProject
:
ServiceName: phppj (任意のサービス名を入力する)
:
PS> cd phppj (直前にServiceNameで指定したサービス名)
PS> Add-AzurePHPWebRole
2. 現時点(2012/11/28)では利用しているインストーラー
(WebPI)が古いため、WebRole1setup.cmdを最新のWebPIに
書き換える
“.webpicmdline” /Products:PHP53,SQLDriverPHP53IIS,PHPManager /AcceptEula
>> ..startup-tasks-log.txt 2>>..startup-tasks-error-log.txt
↓
“.webpicmd” /Install /Products:PHP53,SQLDriverPHP53IIS,PHPManager /AcceptEula
>> ..startup-tasks-log.txt 2>>..startup-tasks-error-log.txt
50
51. Windows Azure PowerShellを
利用してPHPランタイムをセットアップす
る(2)
3. %ProgramFiles%MicrosoftWeb Platform Installerにある以下
の4つのファイルをプロジェクトに含める
• Microsoft.Web.PlatformInstaller.dll
• Microsoft.Web.PlatformInstaller.UI.dll
• WebpiCmd.exe
• WebpiCmd.exe.config
4. パッケージファイルを作成する
PS> Publish-AzureServiceProject –Location “East Asia” -PackageOnly
51
53. インスタンスとストレージの
アフィニティグループ
• 仮想マシンのインスタンスと、仮想マシンがマウントするディス
クイメージを保存するAzure Blobは、同じアフィニティグループ
に保存すること
• アフィニティグループが同じである方が、そうでないよりもネッ
トワーク的に近くなるので、通信速度が速くなる。
• 簡易作成では、ディスクイメージを保存するアフィニティグルー
プを選択することができないので、『ギャラリーから』OSを選択
して作成する。
• 以下の手順で仮想マシンを作成する必要がある。
1. 仮想ネットワークの作成をすることで、アフィニティグループも
作成する。
2. 作成したアフィニティグループに属するAzure Storageを作成す
る。
3. 仮想マシンを『ギャラリーから』作成する。
4. 仮想マシンモードを選択する画面で作成した仮想ネットワークま 53
55. アフィニティグループ
• アフィニティグループとは、Windows Azure 内でインスタンスと
ストレージ アカウントを地理的にまとめたグループ。
アフィニティ グループは、コンピューティング ワークロードと
データ ストレージ ワークロードを同じデータ センター内または
対象ユーザーの近くに配置することにより、サービス パフォーマ
ンスを向上させることができる。
• インスタンスからアクセス対象となるストレージは、そのインス
タンスと同じアフィニティグループに所属させた方が、その間の
通信速度が速くなる。
• アフィニティグループの作成は、「仮想ネットワーク」の作成に
より可能。
• コンピューティングやストレージの作成時にアフィニティグルー
プを決定する必要があり、後からアフィニティグループに所属さ
せることはできない。
55
56. Windows Azure SDK for PHP
PHPからAzure Storageにアクセスするには、Windows Azure SDK
for PHPを利用する。
Windows Azure SDK for PHPには以下の2種類がある。
• Microsoftが作成しgithubで配布しているもの
https://github.com/WindowsAzure/azure-sdk-for-php
• PHPAzure - Windows Azure SDK for PHP
http://phpazure.codeplex.com/
githubで配布されているものが新しく、PHPAzureの作者もgithubで
配布されているものを利用することを推奨している。
ただし、現時点(2012/11/29)ではPHPAzureのすべての機能を
github配布版がカバーしているわけではない。
ここでは、githubで配布されているSDKでの説明をする。
56
59. Azure Blob用ツール
• Neudesic Azure Storage Explorer
• CloudBerry Explorer
• Gladinet
• ClumsyLeaf CloudXplorer
• Cyberduck
• myAzureStorage
• etc...
CloudBerry Explorer
59
60. PHPから
Azure Blobのファイルにアクセスする
(1)
Azure BlobにアクセスするためにはWindows Azure SDK for PHPを
利用する。
• 接続
ServiceBuilderのインスタンスのcreateBlobServiceメソッドに接
続文字列を渡して接続する。
// Windows Azure SDK for PHP ライブラリの読み込み
require_once 'vendorautoload.php';
use WindowsAzureCommonServicesBuilder;
use WindowsAzureCommonServiceException;
use WindowsAzureBlobModelsCreateBlobOptions;
$protocol = 'https'; // Storageへの通信プロトコル http or https
$accountName = 'YOUR STORAGE ACCOUNT'; // ストレージアカウント
$accountKey = 'YOUR STORAGE ACCOUNT KEY'; // ストレージアカウントキー
$connectionString = 'DefaultEndpointsProtocol=' . $protocol . ';'
. 'AccountName=' . $accountName . ';'
. 'AccountKey=' . $accountKey;
// Windows Azure Storageに接続
$blobRestProxy = ServicesBuilder::getInstance()->createBlobService($connectionString);
60
61. PHPから
Azure Blobのファイルにアクセスする
(2)
• ファイルの格納
ファイルの格納はcreateBlockBlobメソッドなどを使う。
createBlockBlobメソッドで作成されるファイルはBlock Blobになる。
ローカルストレージのファイル システムからコピーする事が可能。
//アップロードするファイル
$content = fopen('C:sample.png', 'r');
$blob_name = 'sample.png';
//Content-Typeの設定
$blobOptions = new CreateBlobOptions();
$blobOptions->setContentType('image/png');
//アップロード
$blobRestProxy->createBlockBlob('public', $blob_name, $content, $blobOptions);
•
この例ではContent-Typeをimage/pngとしている。
• 参考コンテンツ
• How to use the Blob service from PHP
https://www.windowsazure.com/ja-jp/develop/php/how-to-guides/blob-service/
• Windows Azure SDK for PHP API Documentation
http://dl.windowsazure.com/phpdocs/namespaces/WindowsAzure.Blob.html
61
63. Azure Tableとは (1)
Azure Table はKVS (Key value Store) の一種。
RDBMS のテーブルとは違いリレーションシップを持っておらず、
データ構造やインデックスに相当する機能に関しても考え方が異なる。
63
64. Azure Tableとは (2)
Partitionkey Rowkey Timestamp first last 性別
users 1 2012/01/08 クラウディ 窓辺 女性
ア
←エンティティ
users 2 2012/01/21 ななみ 窓辺 女性
users 3 2012/01/30 クロード 窓辺 男性
users 4 2012/02/13 店長 男性
users 5 2012/02/28 ウェブ マトリクスマ
↑ ン ↑
プロパティ 一部のプロパティが
(最大255個) なくても格納可能
64
65. Azure Tableとは (3)
• テーブルを論理的な構造で表現すると、エンティティ (赤の枠)
と
プロパティ (青の枠) で表す事ができる
• エンティティは、最大で 255 個のプロパティを持つオブジェクト
• プロパティの内 Partitionkey/Rowkey/Timestamp はシステムによ
り予約されており、エンティティクラスを定義する際の必須項目
である
• 各々のエンティティはRDBMS と異なり、プロパティの数と名前
が一致しなくても良い
• 固定のスキーマを持たず、制約、外部キー、主キーを持たない
• プロパティに必須項目とする概念などは無い為、特定のプロパ
ティをキーにしたソートやグループ化は行う事ができない
• Partitionkey によってストレージノードが分散されるので、慎重
な設計とチューニングが必要となる
65
67. PHPから
Azure Tableにアクセスする (1)
Azure TableにアクセスするためにはWindows Azure SDK for PHP
を利用する。
• 接続
ServiceBuilderのインスタンスのcreateBlobServiceメソッドに接
続文字列を渡して接続する。
// Windows Azure SDK for PHP ライブラリの読み込み
require_once 'vendorautoload.php';
use WindowsAzureCommonServicesBuilder;
use WindowsAzureCommonServiceException;
use WindowsAzureTableModelsEntity;
use WindowsAzureTableModelsEdmType;
$protocol = 'https'; // Storageへの通信プロトコル http or https
$accountName = 'YOUR STORAGE ACCOUNT'; // ストレージアカウント
$accountKey = 'YOUR STORAGE ACCOUNT KEY'; // ストレージアカウントキー
$connectionString = 'DefaultEndpointsProtocol=' . $protocol . ';'
. 'AccountName=' . $accountName . ';'
. 'AccountKey=' . $accountKey;
// Windows Azure Storageに接続
$blobRestProxy = ServicesBuilder::getInstance()->createTableService($connectionString);
67
68. PHPから
Azure Tableにアクセスする (2)
• エンティティ(行)の追加
エンティティの追加にはinsertEntityメソッドなどを使う。
// テーブル作成
$tableRestProxy->createTable("mytable");
// エンティティ(行)の作成
$entity = new Entity();
$entity->setPartitionKey("tasksSeattle");
$entity->setRowKey("1");
$entity->addProperty("Description", null, "Take out the trash.");
$entity->addProperty("DueDate",
EdmType::DATETIME,
new DateTime("2012-11-05T08:15:00-08:00"));
$entity->addProperty("Location", EdmType::STRING, "Home");
// エンティティの追加
$tableRestProxy->insertEntity("mytable", $entity);
• 参考コンテンツ
• How to use the Table service from PHP
https://www.windowsazure.com/ja-jp/develop/php/how-to-guides/table-service/
• Windows Azure SDK for PHP API Documentation
http://dl.windowsazure.com/phpdocs/namespaces/WindowsAzure.Table.html
• Windows Azure Table の利用 ~ 特性とパフォーマンスの検証
http://msdn.microsoft.com/ja-jp/windowsazure/hh398428
68
70. SQL Databaseとは
SQL Databaseは、Microsoft SQL Serverを基に開発された RDBMS
で、SQL Server同様 Transact-SQL (T-SQL) を用いて、アクセス
する事ができる。
分散構造で提供される Windows Azureストレージ サービスとは異な
り、RDBMS である SQL Databaseは単一障害点となり得るため、プ
ライマリーサーバーに加え2つの物理サーバー上にデータを複製し、
合計3台で稼働する事で高可用性を維持している。
プライマリーに障害が発生した場合は、自動的にセカンダリに切り替
わってサービスを継続する。
70
71. SQL Database管理ツール
• SQL Database管理ポータル
• Microsoft SQL Server Management Studio 2008 R2 SP1以降
Microsoft SQL Server Management Studio 2008 R2 SP1
71
72. データベースの作成
• データベースの作成
• Windows Azure管理ポータルの[+新規]ボタンから「データサービ
ス」 - 「SQLデータベース」 - 「カスタム作成」と選択する。
※ 「簡易作成」ではデータベースの照合順序を選択できない
72
73. 認証とファイアウォール (1)
SQL Databaseへの接続は以下にの2つより制御される
• 接続先サーバー名とログインID、パスワードによる認証
• Windows Azure管理ポータルで作成できるユーザーは1つの管理
ユーザーだけだが、T-SQLで権限を制限した追加ユーザーを作成
することができる
• 接続時に最低限指定するパラメータは以下
• サーバー名
Windows Azure管理ポータルでサーバーを作成したときに自
動で作られたランダムな文字列 + ".database.windows.net"
ex.) abcd1234.database.windows.net
• ログイン名
ログイン名 + "@" + Windows Azure管理ポータルでサーバー
を作成したときに自動で作られたランダムな文字列 +
ex.) yourename@abcd1234
• パスワード
73
74. 認証とファイアウォール (2)
• 接続元IPアドレスを制限するファイアウォール
• Windows Azure管理ポータルのデータベースの「構成」ページで
データベースに対して設定することができる
• Windows Azure外の接続元のグローバルIPアドレスを許可する必
要がある
• Windows Azure上のインスタンスからの接続を許可するには、
「使用できるサービス」の「」WINDOWS AZUREサービス」を
『はい』にする。
• 設定の反映に5分程度かかる
74
75. PHPから
SQL Databaseにアクセスする (1)
PHPからSQL Databaseにアクセスするには、Microsoft Drivers for
PHP for SQL Serverを利用する。
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=80e4
4913-24b4-4113-8807-caae6cf2ca05
Microsoft Drivers for PHP for SQL Serverは、PHPエクステンションと
して提供されている。
ローカルPCへのインストールにはWeb Platform Installerを利用し、
Windows Azure上のインスタンスへのインストールはWebPi Command
を利用する(前述の『WebPi Command を利用してPHPランタイムをイ
ンストールする 』のように/Productsオプションに
「SQLDriverPHP53IIS」を指定する)のが最も簡単である。
インストールが正常にできているかは、phpinfo()でネイティブの
『sqlsrv』および抽象化されたPDOの『pdo_sqlsrv』のうち利用したい
ものが表示されていることを確認する。
マニュアルはPHPのオフィシャルドキュメントと、上述のURLからダウ
ンロードできるファイルに含まれているヘルプファイルの両方を参照す
るのがよい
75
76. PHPから
SQL Databaseにアクセスする (2)
• sqlsrvドライバを利用した接続例
<?php
// 定数
define('SERVERNAME', "yourhost.database.windows.net"); // SQL Databaseの FQDN
define('DB_USER', 'username'); // ユーザー名
define('DB_PASS', 'password'); // パスワード
// 接続情報
$connectionInfo = array(
"UID" => DB_USER.'@'.SERVERNAME,
"PWD" => DB_PASS,
"Database" => "sample"
);
// SQL Databaseへの接続
$conn = sqlsrv_connect(SERVERNAME, $connectionInfo);
if ($conn === false) {
echo "接続に失敗しました。rn";
die(print_r(sqlsrv_errors(), true));
}
echo "接続しました。rn";
// 現在 SQL Databaseにアクセスしているユーザーを取得するクエリ
$tsql = "SELECT CONVERT(varchar(32), SUSER_SNAME())";
$stmt = sqlsrv_query( $conn, $tsql);
if( $stmt === false )
{
echo "クエリの発行に失敗しました。rn";
die( print_r( sqlsrv_errors(), true));
}
// クエリの結果取得
$row = sqlsrv_fetch_array($stmt);
echo "ログインしているユーザー: ".$row[0]."rn";
// コネクションとステートメントの開放
sqlsrv_free_stmt( $stmt);
sqlsrv_close($conn);
76
77. PHPから
SQL Databaseにアクセスする (3)
• pdo_sqlsrvドライバを利用した接続例
<?php
// 定数
define('SERVERNAME', "yourhost.database.windows.net"); // SQL Databaseの FQDN
define('DB_USER', 'username'); // ユーザー名
define('DB_PASS', 'password'); // パスワード
try {
$conn = new PDO("sqlsrv:server=" . SERVERNAME . ";Database = sample", DB_USER."@".SERVERNAME, DB_PASS);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("接続に失敗しました。rn");
var_dump($e);
}
echo "接続しました。rn";
// 現在 SQL Databaseにアクセスしているユーザーを取得するクエリ
$tsql = "SELECT CONVERT(varchar(32), SUSER_SNAME())";
$stmt = $conn->query($tsql);
// クエリの結果取得
$row = $stmt->fetch(PDO::FETCH_NUM);
echo "ログインしているユーザー: ".$row[0]."rn";
// コネクションとステートメントの開放
$stmt = null;
$conn = null;
77
78. SQL Databaseの制限
• SQL DatabaseはSQL Serverと比べていくつかの機能が制限されてい
る
• テーブルにはクラスタ化インデックスが必須
• プライマリキー作成時にそのインデックスがクラスタ化インデックス
になる
• その他の違いは以下を参照
http://msdn.microsoft.com/ja-jp/library/ff394115.aspx
• SQL Databaseは共有リソース上で動いているため以下のような場合
に強制的に切断される
• リソースの過度の使用
• 30分以上アイドル状態の接続
• サーバー障害によるフェイルオーバー
すなわち、強制切断に備えて、再接続する仕組みを入れておく必要が
ある
• ガイドラインと制限事項について以下にまとめられている
http://msdn.microsoft.com/ja-jp/library/ff394102.aspx
78
81. MySQL vs SQL Database
• バックアップ&リカバリ
• MySQL:ユーザーの責任
• SQL Database:自動で行われる
• 死活監視
• MySQL:ユーザーの責任
• SQL Database:自動で行われる
• クラスタリング環境
• MySQL
• ユーザーが実施
• 用意した台数分だけ、インスタンス費用とストレージ費用がかかる
• SQL Database
• 自動でマスターノード1台、スレーブノード2台
• 費用は標準価格に含まれる
81
82. #12
Framework
テンプレートエンジ
ン
82
85. セッション変数の利用
(仮想マシン&クラウドサービス)
• 複数のWebサーバーがある場合、デフォルトの
session.save_handler=filesでは、ロードバランサがどのサー
バーにつなぐことを選択するかわからないため機能しない
• 仮想マシンおよびクラウドサービス用のロードバランサはセッ
ションアフィニティの機能を持たない
• memcachedをセッション変数の保存先として利用することができ
る
• extension=php_memcache.dll
• session.save_handler=memcached
• session.save_path="tcp://memsv1:11211,tcp:memsv2:11211"
• sqliteやPostgreSQLなどのセッションハンドラも存在する
• カスタムセッションハンドらを作成することも可能
http://php.net/manual/ja/session.customhandler.php
85
88. Windows Azure上のWebサーバー
• クラウドサービスおよび仮想マシン上のWebサーバーは、Full IISと呼
ばれる通常のIISで動くモードと、HWC(Hostable Web Core)と呼
ばれるアプリケーション組込用のIISが動くモードがある
• 自由度の高いFull IISで動かすことをお奨めするが、Windows Azure
Tools for Eclipseでデプロイパッケージを作成するとデフォルトでは
HWCモードになる
• Full IISの場合、選択するAzure OSのバージョンにより、IIS 7.0かIIS
7.5、IIS 8.0のいずれかになる
• Azure OS 1.x系:IIS 7.0
• Azure OS 2.x系:IIS 7.5
• Azure OS 3.x系:IIS 8.0
特別な要件がない限りは、IIS 8.0のAzure OS 3.x系を利用することをお
奨めする。
各バージョンでは、同じ機能の設定方法がほとんどの場合は同じにな
るため、IIS 7.0の設定資料がIIS 7.5やIIS8.0でもそのまま利用できると
思って良い。
88
91. 記述方法の知り方
• ディレクトリ単位での設定
IISマネージャーで対象のディレクトリを選択した状態で設定を変更
し、それによってWeb.configの変更された内容を確認する。
それを参考にして、プロジェクトのWeb.configを作成する。
• IIS全体への設定
IISマネージャーでサーバーを選択し『構成エディター(英語:
Configuration Editor)』を開き、そこで変更をする。
変更したい項目はsystem.webセクションかsystem.webServerセク
ションにあることが多い。
値を変更したら画面右の『スクリプトの生成(英語:Generate
Script)』をクリックすることで、変更方法のコードが表示される
のでこれを参考にしてStartup TaskやOnStartメソッドを記述する。
91
92. URL Rewrite (1)
URL Rewriteについてはよく話題に出てくるので、参考情報としてこ
こにあげる。
Windows Azure上のIISでももちろん、URLをRewriteすることがで
きる。
IISマネージャーでApacheのmod_rewriteの設定文を変換することが
できるのでその方法を紹介する。
1. IISマネージャーで適当なサイトかフォルダを選択し、『URL書き
換え(英語:URL Rewrite)』を開く
2. 画面右側の『規則のインポート(英語:Import Rules)』をク
リックする
3. Rewrite rules欄にmod_rewriteの設定を書き込んで適用
(Apply)する
4. これによって作成されたWeb.configを参考に、Windows Azure
用のWeb.configを作成する
92
93. URL Rewrite (2)
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="インポートされた規則 1" stopProcessing="true">
<match url="^$" ignoreCase="false" />
<action type="Rewrite" url="app/webroot/" />
</rule>
<rule name="インポートされた規則 2" stopProcessing="true">
<match url="(.*)" ignoreCase="false" />
<action type="Rewrite" url="app/webroot/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
Web.config
93
98. Windows Azure
Web Hosting Suite
ファイルをFTPでアップロードしてバージョンアップすることができ
る。
FTPサーバーとWebサーバーは定期的にファイルを同期している。
http://azurehosting.codeplex.com/
• メリット
• FTPでバージョンアップできるのでなじみやすい
• デメリット
• FTPサーバー専用のインスタンスを動かしているため、その分余
計に費用がかかる
• FTPサーバーとWebサーバーの同期が定期的に行われているので、
アップロードした瞬間にWebサーバーに反映されるのではなく、
同期されるまでのタイムラグがある
98
101. Azure Storageと
SQL Databaseのデータ
• Azure Storageは6多重、SQL Databaseは3多重されて全体バック
アップも取られているため、ユーザーとしてはバックアップを取
らないという割り切りもあり
• ユーザーの操作ミスによるデータの損失はリカバリできないため、
そのためのバックアップは必要となる
• Azure Storageのデータは、通常のAzure Storageへのアクセス方
法でバックアップすることになる
• SQL Databaseのバックアップは、以下のツールなどが利用できる
• BCPコマンド
• DACエクスポート(SQL Database管理ポータルなどから実施)
• SQL Database Data Sync
• SQL Database Data Copy
101
105. アプリケーションとキャッシュを
異なるインスタンスに構築する方法
• キャッシュのロールは、前述の同じインスタンスにする設定と同
じ
• アプリケーションのロールで以下を行う
• NuGetで「Windows Azure Caching Memcache Shim」パッケージ
をプロジェクトにインストールする
• web.config(Webロール)またはapp.config(Workerロール)の
autoDiscovery要素にキャッシュをホストするロールのロール名を
記入する default config which is used for all Named Caches
<dataCacheClients>
<!-- This is the
This can be overriden by specifying other dataCacheClient sections with name being the NamedCache name -->
<dataCacheClient name="DefaultShimConfig" useLegacyProtocol="false">
<autoDiscover isEnabled="true" identifier="WorkerRole1" />
<!--<localCache isEnabled="true" sync="TimeoutBased" objectCount="100000" ttlValue="300" />-->
</dataCacheClient>
</dataCacheClients>
• アプリケーションからは、localhostにmemcachedサーバーがあ
るように見える
105
108. 事例1
モーグリのツイートキャッチ システム
構成
Windows Azure Platform
サーバー群
データベース
Webサーバー (SQL Database)
(PHP)
DB
HTTP WorkerRole
(ツイート収集)
Azure Storage Blob
CDN
(ビデオコンテンツ)
※Webで公開されている情報から読み取ったものなので正確ではない可能性があります
108
109. 事例2
ソーシャルゲーム 初期システム構成
Windows Azure Platform
L x 20, M×1 インスタンス データベース(MySQL)
L x 5, M×5 インスタンス
HTTP
Webサーバー
HTTP (PHP)
GREE L x 20インスタンス
User DB
(My SQL)
バッチ L x 5 インスタンス
M×1インスタンス
MASTER DB
運 M×3インスタンス
営
監視(phpMyAdmin) TEMP DB
M×1インスタンス M×2インスタンス
開発(PHP,バッチ)
M×2インスタンス
Azure Storage Azure Storage
共有ファイル/バックアップ領域 My SQLファイル
109
110. 事例2
ソーシャルゲーム 第二期システム構成
Windows Azure Platform
L x 20, M×1 インスタンス データベース(SQL Database)
3インスタンス,70GB
HTTP
Webサーバー
HTTP (PHP)
GREE L x 20インスタンス
User DB
50GB
バッチ
M×1インスタンス
MASTER DB
運 10GB
営
監視 TEMP DB
M×1インスタンス 10GB
開発(PHP,バッチ)
M×2インスタンス
Azure Storage
共有ファイル/バックアップ領域
110
111. 事例3
スマートフォンゲーム システム構成
Windows Azure Platform
日本向けサーバー(東アジア) データベース
(SQL Database)
Webサーバー(PHP) 4インスタンス
S×6インスタンス
日本向けDB
HTTP
アジア向けサーバー(東アジア)
Webサーバー(PHP) アジア向けDB
S×6インスタンス
アメリカ向けDB
アメリカ向けサーバー(北米)
運 Webサーバー(PHP)
営 XS×2インスタンス ヨーロッパ向けDB
ヨーロッパ向けサーバー(西欧)
Webサーバー(PHP) 開発(PHP,FTP)
XS×2インスタンス XS×1インスタンス
Azure Storage Blob
CDN
画像/音声ファイル
111
112. 事例2
mixiXmas システム構成
Windows Azure Platform
サーバー群
HTTP Web Role
memcachedサーバー
HTTP (.NET)
mixi
Worker Role
運 Table
営
Queue
CDN Blob
Azure Storage
112
114. 共通
• SQL Databaseでは日本語の取り扱いに気を付けるべし
• 照合順序の設定
• 'N'プリフィックスをつけるべし
• SQL Databaseではタイムゾーンを意識すべし
• UTCになっている
• PHPAzureは使うべからず
• 開発が止まっている
• セッション変数を使うべからず (クラウドサービス&仮想マシ
ン)
• 複数のWebサーバーがある場合、ロードバランサがどのサーバー
につなぐことを選択するかわからないため機能しない
• Azureのロードバランサはセッションアフィニティの機能を持た
ない 114
115. クラウドサービス(1)
• ファイルの書き込みをAzureインスタンスのローカルディスクにす
るべからず
• ローカルディスクはメンテナンスや障害で消えてしまうことがあ
る
→ ローカルディスクに保存したファイルは消えてしまうものと
思って扱うべし
• Azure BlobやSQL Databaseなど、永続化されるストレージに保存
すべし
• Frameworkのキャッシュなど、永続化不要なファイルはローカル
ディスクに保存すべし
• OSやIISの設定はStartup TaskやOnStartメソッドで実施すべし
115
116. クラウドサービス(2)
• Windows Azure Tools for Eclipse、php_azure.dllは使うべから
ず
• 開発が止まっている
• Eclipse PDTでコーディングするのは問題ない
• Full IISモードでWebサーバーを動かすべし
• 運用では2台以上のサーバーで運用すべし
• Azure OSアップデートによる再起動が1~2ヵ月に1回程度はある
• 複数台動かしていることによって、ローリングアップグレードに
なるのでサービス停止にならない
• Startup Taskのコマンドファイルはキャラクタセット『ANSI』か
『UTF-8 BOMなし』で保存すべし
メモ帳で日本語を書いたり、VSでファイルを保存すると、UTF-8
BOM付きで保存されてAzure上でインスタンスが起動しなくなる
116
119. PHPアクセラレータ
• APCは利用できない
• 『Windows Cache Extension for PHP』が利用できる
http://www.iis.net/download/wincacheforphp
http://www.php.net/manual/ja/book.wincache.php
• WebPiCmdでインストールできる
webpicmd.exe /Install /Products:PHP53,wincache53 /AcceptEula
119
122. Windows Azure Toolkit
for Social Games
https://github.com/WindowsAzure-Toolkits/wa-toolkit-games
Windows Azure Toolkit for Social Gamesには、開発者がWindows
Azure環境に手早くソーシャルゲームを構築することを助ける、ガイ
ダンス、サンプル、ツールなどが含まれている。
122
125. Mac OS Xでの開発
PHPのソースを書くことや、仮想マシンやWebサイトを構築するとい
う点では、Mac OS Xでも何ら問題ない。
Windows Azure SDK for PHPはそのまま動作する。
しかし、クラウドサービスでは以下の課題を解決する必要がある。
• デプロイするためのパッケージファイルの作成ができない
• Mac OS X上で動作確認するための環境
• SQL Databaseに接続するためのドライバ(php_sqlsrv.dll)がない
これを解決するためのアイディアとしてParallels Desktopや
VMWare Fusion、VirtualBoxなどのデスクトップ仮想化製品を利用
し、そのゲストOSとしてWindowsを入れ、そこにWindows Azure開
発環境を構築、ソースフォルダを共有してMac OS Xから編集する方
法が考えられる。
125
126. Webコンテンツ
• Windows Azure PHP Developer Center
http://www.windowsazure.com/en-us/develop/php/
• Windows Azure Training Kit
https://github.com/WindowsAzure-TrainingKit
• Windows Azure SDK for PHP
http://dl.windowsazure.com/phpdocs/
• Windows Azure によるアプリケーション開発基礎 (クラウドサービス)
http://msdn.microsoft.com/ja-jp/windowsazure/gg263608
• IT Pro (IT 担当者) のための Windows Azure Platform 運用管理ガイド 1.0 (クラ
ウドサービス)
http://technet.microsoft.com/ja-jp/cloud/hh224648.aspx
• Windows Azure
http://msdn.microsoft.com/en-us/library/windowsazure/
• Internet Information Services (IIS) TechCenter > PHP on IIS
http://technet.microsoft.com/ja-jp/iis/ee794964.aspx
• Windows Azureデベロッパーセンター - コミュニティ
http://msdn.microsoft.com/ja-jp/windowsazure/cc974147
126
127. トレーニング
• 無料 クラウド & モバイル開発トレーニング
~ Cloud Developer's Field
http://www.microsoft.com/japan/windowsazure/events/hol/
127
128. フォーラム
• Windows Azure - 全般
http://social.msdn.microsoft.com/Forums/ja-
JP/windowsazureja/threads
• SQL Azure 全般
http://social.msdn.microsoft.com/Forums/ja-
JP/sqlazureja/threads
• Internet Information Services – 全般
http://social.technet.microsoft.com/Forums/ja-jp/iis7ja/threads
• PHP on Windows
http://social.technet.microsoft.com/Forums/ja-
jp/phpwinja/threads
128
Editor's Notes NOTE: Add spectrum (arrow) that shows the “PaaS Continuum”We’re going to talk about a new sevice. You think about WAWS as the highest level service, abstracts away .. .. .. even web server.Reducing complexity, reducing management overhead.Add animation to build out each part -> final click reviels the cloud box at the bottom.