SlideShare a Scribd company logo
1 of 130
PHP
            on
Windows Azure
      training
          ver.20121127-1.3.3
        日本マイクロソフト株式会社
                株式会社pnop
本ドキュメントに含まれる情報は、情報としての利用のみを目的としています。
ドキュメントの内容は発行時点におけるMicrosoft Corporation (以下、"Microsoft")
の見解を反映したものです。Microsoftは、本ドキュメントの正確性または目的へ
の適合性について、いかなる保証または表明も行いません。また、本ドキュメン
トの使用に起因するいかなる状況についても責任を負いません。この状況には、
過失(人体の負傷または死亡を除く)、あらゆる破損または損失(業務上の損失、収
益または利益などの結果的な損失を無制限に含む) などが含まれます。本ドキュメ
ントには技術的に不正確な記述や表記の誤りが含まれる場合があります。本ド
キュメントは市場状況などの変化により、内容が最新のものではない場合があり
ます。Microsoft は、本ドキュメントの内容を常に更新したり最新の情報を反映し
たりすることについて一切の義務を負わず、これらを行わないことによる責任を
問われないものとします。マイクロソフトは、本ドキュメントに記載されている
内容に関して、特許、特許出願、商標、著作権、またはその他の無体財産権を有
する場合があります。別途マイクロソフトのライセンス契約上に明示の規定のな
い限り、本ドキュメントはこれらの特許、商標、著作権、またはその他の無体財
産権に関する権利をお客様に許諾するものではありません。
 Microsoft、Windows、Windows Azureは、Microsoft Corporation の商標または登
録商標です。その他すべての商標は、その所有者に帰属します。
Copyright © 2012 Microsoft Corporation. All rights reserved.

                                                                  2
About me

                            © 2011 Microsoft Corporation
                                    All Rights Reserved.




                             Windows
                                Azure                      Database




             Find me
           kuniteru.asami
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
Agenda (2)
11. Framework、テンプレートエンジン
12. セッション変数 $_SESSION
13. IISの設定
14. クラウドサービスのアプリケーションの更新方法
15. データのバックアップ
16. memcached互換 Caching
17. 事例
18. PHP on Azure べし・べからず
19. Appendix
20. Q & A


                             5
#1
Windows Azure
概要・アーキテク
        チャー
                6
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
Computing(1)




                                          Firewall Rules

                                          Virtual Network

                             O/S               O/S

        Virtualization   Virtualization    Virtualization

         Hardware         Hardware          Hardware
Computing(2)




               9
Webサイト
(Websites)(1)
• 環境構築が超簡単
• git pushやftpsで、アプリケーションをデプロイできる
• GALLERYからいくつかのオープンソースWebアプリケーション
  を選択してインストールできる
 •   Drupal、Joomla!、WordPress
• WebMatrixを利用してオープンソースWebアプリケーションを構
  築できる
 •   65のWebアプリケーションがある(.NET及び同アプリ言語違いを含む、
     2012/06/30現在)
• SQL DatabaseやMySQLの環境構築もワンストップでできる
Webサイト(2)
• 運用コストが低い
 • OSパッチ適用などはサービスが停止しないまま自動で実施される
• 無料で利用することもできる
• 制限が多い
 • 1サイトに10インスタンスまで
 • Webサーバーしか作れない
• 3種類のサーバータイプから選択できる
• 共有サーバー(無料)
   •   独自ドメインが利用できない
• 共有サーバー
• VM占有
仮想マシン
(Virtual Machines)
• なんでもできる
  • MySQLや他のアプリケーションの構築が簡単
• Linuxを選択できる
  • もちろんWindows Serverも
• 永続的なローカルディスクを持つ
• メンテナンスコストが高い
  • OSパッチなどは自身で管理する必要がある
• PHPのランタイムは自分でインストールする必要がある
クラウドサービス
(Cloud Services) (1)
• 運用コストが低い
  • OSパッチ適用などはサービスが停止しないまま自動で実施するこ
    ともできる
• Memcached互換サーバーの構築が簡単
• イレギュラーなことをやろうとすると環境構築が難しい
  • MySQLなどの構築もできるがバックアップなどの運用も考えると
    大変な場合も
• PHPのランタイムは自分でセットアップする必要がある
クラウドサービス(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
Azure Storage
以下のコンポーネントを持つ
•   Azure Blob
  • ファイルを格納するストレージ
• Azure Drive
  • インスタンスにマウントできるディスクイメージファイル
  • Azure Blobに格納される
• Azure Table
  • Key Value Store
• Azure Queue
 • インスタンス間のデータの受け渡しをする
 • 格納したデータを他のインスタンスが参照するとそのデータはなくな
   る
ここに格納されたデータは、同一データセンター内で3重化されて保持し、
さらに他のリージョンのデータセンターにもコピーを保持する。

                                 15
SQL Database
SQL ServerをベースにWindows Azureに最適化されたリレーショナ
ルデータベース
• マスタサーバーに加えて、自動で2つのスレーブサーバーにデータ
  のコピーを保持する
• マスタサーバーの障害時には、スレーブサーバーの内の一つがマ
  スタに昇格することで、停止時間を最小限に抑える
• データベースレベルでのバックアップは自動でとられている
  (ユーザーが任意にリカバリすることはできない)
  → ユーザーの操作ミスなどによるデータ損失にはユーザーが責任
  を
    持つことになる
• 以前はSQL Azureと呼ばれていた

                                            16
Load Balancer
• ロードバランサは自動で構成される
• 60秒間、通信がない接続は強制切断される
• セッションアフィニティをサポートしない (Webサイト除く)
 • セッション変数を利用するには工夫が必要な場合もある(後述)




                                   17
CDN
• Azure BlobとクラウドサービスのWebRoleをサポートする
  Contents Delivery Network
• 日本国内にもノードがあるため、ユーザーに対する静的ファイル
  (画像、動画、html、JavaScript、cssなど)のレスポンスを向上
  する
• 大量の同時アクセスがあっても、CDNで捌ければコンピュートイ
  ンスタンスに負荷を肩代わりしてくれる




                                           18
データセンター
•            北ヨーロッ
               パ
             (ダブリ                                             アメリカ合衆国
              ン)                                                 北
                                                東アジア
                                                               (シカゴ)
                                                (香港)
                                                                      アメリカ合衆国
                                                                         西        アメリカ合衆国
                西ヨーロッパ                                                 (非公開)         東
                (アムステルダ                                        東南アジア               (非公開)
                  ム)                                          (シンガポー
                                                                   ル)     アメリカ合衆国中
                                                                              央
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
#2
クラウドサービスへ
        の
   デプロイ環境
             20
ここではクラウドサービスに対応する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
デプロイ環境のセットアップ (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
23
デプロイ環境のセットアップ (2)
• ここまでの作業でWeb Platform InstallerがPCにインストールさ
  れ、スタートメニューに存在する
  • Web Platform Installerを利用することで、Azure開発に関するツー
    ルが簡単にインストールできる
• PHPのオフィシャルサイトにあるバイナリを利用してインストー
   ルしたい場合は、 Non Thread Safe版を利用する




                                                   24
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
Windows Azure PowerShell
• Microsoftから提供されるPowerShellコマンド
• 全ての設定などは作成されたファイルを直接修正する
• 利用できるコマンドの一覧は、PowerShellコンソールでHelpコマ
  ンドを実行すると取得できる
  PS> help Azure

• コマンドのヘルプはHelpコマンドで対象のコマンドを指定すると
  取得できる
  PS> Get-Help Publish-AzureServiceProject




                                             26
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
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
#3
クラウドサービスの
プロジェクトファイ
        ル
       構成
             29
Roleの設定を記述する2種類のファイル
(*.cscfgとServiceDefinition.csdef)と、
Roleごとのプロジェクトファイルがある。
Roleごとのプロジェクトファイルは、それぞ
れのロールごとにフォルダが分かれており、
その中にプログラムファイルを作成する。
(例外あり)




                                      Visual Studioの例




                                                        30
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
Roleの設定を記述するファイル (2)
•   ServiceDefinition.csdef(サービス定義ファ
    イル)
    • アプリケーションのサービス モデルを定義
      するファイル。このファイルには、ホス
      テッド サービスを構成するロール、サービ
      ス エンドポイント、構成設定、SSL エンド
      ポイント用の証明書などが含まれる。 サー
      ビスをデプロイして実行した後で、サービ
      ス モデルを変更することはできない。
    • インスタンスサイズの指定はここ。
      WebRoleエレメントもしくはWorkerRoleエ
      レメントのvmsizeアトリビュート
       •   ExtraSmall
       •   Small
       •   Medium
       •   Large
       •   ExtraLarge
                                       Visual Studio/Visual Web Developer の例




                                                                               32
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
#4
クラウドサービス
  へのデプロイ

            34
作成したWebアプリケーションをクラウドサービスで稼働させるため
には、以下の手順を踏む必要がある。
1. 開発環境でアプリケーションのパッケージを作成
2. 作成したパッケージをWindows Azure実行環境にデプロイ
これらはVSやPowerShellなどのデプロイツールから一連のオペレー
ションで実施することもできるが、ここでは汎用的な方法である以下
の手順を紹介する。
1. 各開発ツールでアプリケーションのパッケージファイルを作成
  • Visual Studio 2012 Express for Web
  • Windows Azure PowerShell
2. WebブラウザでWindows Azure管理ポータルからデプロイ


                                         35
Web管理ポータル
https://manage.windowsazure.com/




                                   36
#5
      Demo
クラウドサービスの
プロジェクト作成か
         ら
     デプロイ    37
• Visual Studio 2012 Express for Webによる
  アプリケーションプロジェクト作成~パッケージ作成
• Windows Azure PowerShellによる
  プロジェクト作成~パッケージ作成
• Windows Azure管理ポータルからのデプロイ




                                          38
#6
クラウドサービス
       への
 PHP環境の構築
             39
Windows Azure上のインスタンスでPHPアプリケーションを動かす
ためには、インスタンスの初期化時にPHPをセットアップする必要が
ある。
そのための方法として以下のようなものが考えられる。
• WebPi Commandを利用してPHPランタイムをインストールする
• PHPランタイムのファイルをパッケージに含める
• インスタンスの初期化時にwindows.php.netよりファイルをダウ
  ンロードして、任意のバージョンをインストールする
ここでは、もっとも簡単な、WebPi Commandを利用してPHPラン
タイムをインストールする方法を紹介する。



                                         40
インスタンス初期化時に
任意の処理を実行
インスタンスの初期化時にPHPをセットアップするにはStartup Task
またはOnStartメソッド(.NET)に記述する。
• Startup Task
  • 任意のコマンドを実行することができる
• OnStartメソッド
   • .NETでOnStartメソッドに記述した処理がインスタンス初期化時
     に実行される
これらの処理はPHPのセットアップに限らず、フォルダの権限変更、
IISの設定変更やその他のアプリケーションのインストールなどに利
用できる。




                                          41
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
Startup Task (2)
• バッチファイルはBOM付きのUTF-8で保存してはいけない
 • VSやメモ帳で編集して保存すると、デフォルトではBOM付き
   UTF-8になってしまう。
    • メモ帳ではANSIを指定して保存すればOK
• 環境変数が使える
  • %ProgramFiles%
  • %ProgramFiles(x86)%
  • %SystemDrive%
  • %SystemRoot%
• appcmd.exeでIISの設定変更を行うことができる
• バッチファイルからPowerShellコマンドを呼び出すことも可能
• 最初に「@echo off」をして出力を抑制する

                                      43
OnStartメソッド (1)
*.csのOnStartメソッド内にインスタンス初期化時に実施する任意の
処理を.NETで記述することできる
 namespace WebRole
 {
     public class WebRole : RoleEntryPoint
     {
         public override bool OnStart()
         {
             // 構成の変更を処理する方法については、
             // MSDN トピック (http://go.microsoft.com/fwlink/?LinkId=166357) を参照してください。

             /**** ここに初期化時に実行する処理を記述する ****/

             return base.OnStart();
         }
     }
 }


• Microsoft.Web.Administration.dllを利用して、
  IISの設定変更などをすることができる




                                                                                       44
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
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
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 &gt; 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
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
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
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
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
#7
 仮想マシン
作成時の注意

          52
インスタンスとストレージの
アフィニティグループ
• 仮想マシンのインスタンスと、仮想マシンがマウントするディス
  クイメージを保存するAzure Blobは、同じアフィニティグループ
  に保存すること
 • アフィニティグループが同じである方が、そうでないよりもネッ
   トワーク的に近くなるので、通信速度が速くなる。
 • 簡易作成では、ディスクイメージを保存するアフィニティグルー
   プを選択することができないので、『ギャラリーから』OSを選択
   して作成する。
 • 以下の手順で仮想マシンを作成する必要がある。
    1. 仮想ネットワークの作成をすることで、アフィニティグループも
       作成する。
    2. 作成したアフィニティグループに属するAzure Storageを作成す
       る。
    3. 仮想マシンを『ギャラリーから』作成する。
    4. 仮想マシンモードを選択する画面で作成した仮想ネットワークま         53
#8
Azure Storage
    を利用する

                54
アフィニティグループ
• アフィニティグループとは、Windows Azure 内でインスタンスと
  ストレージ アカウントを地理的にまとめたグループ。
  アフィニティ グループは、コンピューティング ワークロードと
  データ ストレージ ワークロードを同じデータ センター内または
  対象ユーザーの近くに配置することにより、サービス パフォーマ
  ンスを向上させることができる。
• インスタンスからアクセス対象となるストレージは、そのインス
  タンスと同じアフィニティグループに所属させた方が、その間の
  通信速度が速くなる。
• アフィニティグループの作成は、「仮想ネットワーク」の作成に
  より可能。
• コンピューティングやストレージの作成時にアフィニティグルー
  プを決定する必要があり、後からアフィニティグループに所属さ
  せることはできない。

                                         55
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
#9
Azure Blob
 を利用する

             57
Azure Blobとは
Azure Blobはファイルを格納するストレージである。
コンテナーと呼ばれる、ファイルをまとめるフォルダーに相当する機能
があるが、コンテナーの作成は1階層のみで、コンテナーの中にコンテ
ナーを作成することはできない。
コンテナーより仮想のディレクトリ構成は、ファイル名に『/』を含ませ
ることで疑似的に利用できる。
Azure Blob用のツールによっては、このファイル名に含まれる『/』を
ディレクトリと解釈して表示してくれるものもある。
コンテナーごとに共有ポリシーを設定することができ、キーなしでアク
セスできるPublic、キーが必要なPrivateがある。
コンテナーの共有ポリシーがPublicであれば、http/httpsでファイルに
Azureの外部からも直接アクセスできる。
https://{アカウント名}.blob.core.windows.net/{コンテナー}/
{ファイル名}


                                                  58
Azure Blob用ツール
• Neudesic Azure Storage Explorer
• CloudBerry Explorer
• Gladinet
• ClumsyLeaf CloudXplorer
• Cyberduck
• myAzureStorage
• etc...




                                    CloudBerry Explorer




                                                          59
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
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
#10
Azure Table
  を利用する

              62
Azure Tableとは (1)
Azure Table はKVS (Key value Store) の一種。
RDBMS のテーブルとは違いリレーションシップを持っておらず、
データ構造やインデックスに相当する機能に関しても考え方が異なる。




                                      63
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
Azure Tableとは (3)
• テーブルを論理的な構造で表現すると、エンティティ (赤の枠)
  と
  プロパティ (青の枠) で表す事ができる
• エンティティは、最大で 255 個のプロパティを持つオブジェクト
• プロパティの内 Partitionkey/Rowkey/Timestamp はシステムによ
  り予約されており、エンティティクラスを定義する際の必須項目
  である
• 各々のエンティティはRDBMS と異なり、プロパティの数と名前
  が一致しなくても良い
• 固定のスキーマを持たず、制約、外部キー、主キーを持たない
• プロパティに必須項目とする概念などは無い為、特定のプロパ
  ティをキーにしたソートやグループ化は行う事ができない
• Partitionkey によってストレージノードが分散されるので、慎重
  な設計とチューニングが必要となる
                                                  65
Azure Table用ツール
• Neudesic Azure Storage Explorer
• ClumsyLeaf TableXplorer
• myAzureStorage




                                    Azure Storage Explorer




                                                             66
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
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
#11
SQL Database
    を利用する

               69
SQL Databaseとは
SQL Databaseは、Microsoft SQL Serverを基に開発された RDBMS
で、SQL Server同様 Transact-SQL (T-SQL) を用いて、アクセス
する事ができる。
分散構造で提供される Windows Azureストレージ サービスとは異な
り、RDBMS である SQL Databaseは単一障害点となり得るため、プ
ライマリーサーバーに加え2つの物理サーバー上にデータを複製し、
合計3台で稼働する事で高可用性を維持している。
プライマリーに障害が発生した場合は、自動的にセカンダリに切り替
わってサービスを継続する。




                                                   70
SQL Database管理ツール
• SQL Database管理ポータル
• Microsoft SQL Server Management Studio 2008 R2 SP1以降




                                  Microsoft SQL Server Management Studio 2008 R2 SP1




                                                                                       71
データベースの作成
• データベースの作成
 • Windows Azure管理ポータルの[+新規]ボタンから「データサービ
   ス」 - 「SQLデータベース」 - 「カスタム作成」と選択する。
   ※ 「簡易作成」ではデータベースの照合順序を選択できない




                                           72
認証とファイアウォール (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
認証とファイアウォール (2)
• 接続元IPアドレスを制限するファイアウォール
  • Windows Azure管理ポータルのデータベースの「構成」ページで
    データベースに対して設定することができる
  • Windows Azure外の接続元のグローバルIPアドレスを許可する必
    要がある
  • Windows Azure上のインスタンスからの接続を許可するには、
    「使用できるサービス」の「」WINDOWS AZUREサービス」を
    『はい』にする。
  • 設定の反映に5分程度かかる




                                           74
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
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
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
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
日本語やマルチバイト文字を扱う
SQL Server(SQL Databaseを含む)では、Unicode文字列を格納す
る型として、nvarchar/nchar が用意されている。
これらUnicode文字列を格納する際や比較を行う際のUnicodeリテラ
ル文字列には、プレフィックスとして『N』を付与する必要がある。
• INSERTの例
  INSERT INTO sample (ID, UserName, Created, Updated) VALUES ('1', N'テスト銀行 ', GETDATE(), GETDATE())



• SELECT ~ WHEREの例
  SELECT UserName WHERE UserName = N'クラウディア'




                                                                                                      79
タイムゾーン
グローバルに提供されるデータベースサービスのため、標準のタイム
ゾーンがUTCとなっている上に、接続ごとにタイムゾーンを指定するこ
とはできない。
そのため、各国での利用では標準時刻との差を補正する必要がある。
仮に日本でのサービスであれば以下のようにするとよい。
•    datetimeoffset型を使う
     datetimeoffset型にはタイムゾーンが含まれる。
     この型で扱うデータに対して、switchoffset関数とsysdatetimeoffset
     関数を利用することで、JSTに変換することができる。
    • INSERT INTO sample VALUES(switchoffset(sysdatetimeoffset(), '+09:00'))
      INSERTの際にJSTに変換して格納する

    • SELECT switchoffset(col, '+09:00') FROM sample
      UTCで格納されているデータをSELECTの時にJSTに変換する

    • これらを置き換えるユーザー定義関数やビューを作ってしまってもい
      いだろう

                                                                               80
MySQL vs SQL Database
•   バックアップ&リカバリ
  • MySQL:ユーザーの責任
  • SQL Database:自動で行われる
• 死活監視
  • MySQL:ユーザーの責任
  • SQL Database:自動で行われる
• クラスタリング環境
    • MySQL
         • ユーザーが実施
         • 用意した台数分だけ、インスタンス費用とストレージ費用がかかる
    • SQL Database
         • 自動でマスターノード1台、スレーブノード2台
         • 費用は標準価格に含まれる


                                            81
#12
   Framework
テンプレートエンジ
          ン
               82
Framework
テンプレートエンジンの利用
Windows Azureでも、CakePHPなどのFrameworkや、Smartyなどのテンプレー
トエンジンを利用することができる。
その際、以下の注意が必要となる。
•   キャッシュファイルを出力する場合は、その出力先フォルダがIIS_IUSRSグ
    ループから書き込み可能である必要がある
    • Startup TaskやOnStartメソッドでicaclsコマンドなどを利用して書き込み権限
      を与える
        icacls ..approottemp /grant "IIS_IUSRS":F /T

•   SQL Databaseを利用する場合、FrameworkのSQL Serverドライバが提供さ
    れており、さらに日本語を扱う場合はそのドライバが日本語に対応している必
    要がある
    以下にあげるFrameworkは対応しているようだ
    •   CakePHP
    •   ZendFramework
    •   CodeIgniter (http://cisqlsrvuni.codeplex.com/を利用する)
    •   symfony

                                                              83
#13
セッション変数
 $_SESSION

             84
セッション変数の利用
(仮想マシン&クラウドサービス)
• 複数の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
セッション変数の利用
(Webサイト)
• Webサイト用ののロードバランサはセッションアフィニティの機
  能を持つため、複数のWebサーバーがあってもデフォルトの
  session.save_handler=filesでセッション変数を利用できる
• Memcachedなどをセッション変数の保存先として利用することが
  できない




                                             86
#14
  IIS
の設定

        87
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
IIS全体への設定
オンプレミスのWindows ServerでのIISの設定は、IISマネージャーというGUI
ツールで実施するのが一般的である。
Windows Azureでもリモートデスクトップで接続してIISマネージャーで設定する
ことも可能だが、その方法だと以下のような場合にも手作業で設定しなければな
らないのでお奨めしない。
 • インスタンス追加時の新しいインスタンスに対して
 • インスタンスのOSがバージョンアップがされた場合
 • インスタンスを『初期状態にリセット』した場合
 • インスタンスに障害が発生し、別の物理サーバーにVMが移動した場合
 • 何らかの理由によりインスタンスが再起動した場合
その代わりとして、以下のような方法で上記のような場合にも再設定されるよう
にしておく必要がある。
 • Startup Taskでappcmd.exeを利用する
 • Startup TaskでPowerShellのWebAdministrationモジュールを利用する
 • OnStartメソッドでMicrosoft.Web.Administrationクラスなどを利用


                                                         89
ディレクトリ単位での設定
IISで公開されているディレクトリごとの設定はWeb.configでできる。
Apacheの.htaccessのような役割のファイルである。
SystemDriveのドライブレターや、DOCUMENT_ROOTのドライブ
レターが変更される可能性があるので、これらのパス情報を書き込む
ような設定をしてはいけない。




                                          90
記述方法の知り方
• ディレクトリ単位での設定
  IISマネージャーで対象のディレクトリを選択した状態で設定を変更
  し、それによってWeb.configの変更された内容を確認する。
  それを参考にして、プロジェクトのWeb.configを作成する。
• IIS全体への設定
 IISマネージャーでサーバーを選択し『構成エディター(英語:
 Configuration Editor)』を開き、そこで変更をする。
 変更したい項目はsystem.webセクションかsystem.webServerセク
 ションにあることが多い。
 値を変更したら画面右の『スクリプトの生成(英語:Generate
 Script)』をクリックすることで、変更方法のコードが表示される
 のでこれを参考にしてStartup TaskやOnStartメソッドを記述する。


                                              91
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
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
#15
クラウドサービスの
アプリケーションの
     更新方法
             94
クラウドサービスでは、従来のオンプレミスサーバーやホスティング
サーバーと同じ方法では、アプリケーションのバージョンアップがで
きない。
それは、バージョンアップでサーバー上のファイルを直接変更した状
態で、OSメンテナンスや障害などによりインスタンスが初期化され
ると、そのバージョンアップは消えてしまい、デプロイ時の状態に
戻ってしまうためである。
それに加えて、インスタンスを増加したときに、新しく追加されたイ
ンスタンスでもバージョンアップは反映されない。
ここではアプリケーションをバージョンアップする方法を紹介する。
• ステージングからのVIP Swap
• In-Place Upgrade
• Windows Azure Web Hosting Suite
                                    95
ステージングからのVIP Swap
同一ホステッドサービス内の運用環境のデプロイに割り当てていたVIPをステージ
ング環境のデプロイに付け替える機能。
運用中のホステッドサービスのステージング環境に最新バージョンのアプリケー
ションをデプロイし、運用環境とステージング環境を入れ替えることでバージョ
ンアップできる。
•   メリット
  • サービスの停止時間を最も短くできる
    VIP Swapにかかる時間は数秒
  • ステージング環境でテストしたものをそのままリリースできる
  • 新バージョンに不具合があった場合、すぐに旧バージョンに戻すことができ
    る
• デメリット
    • デプロイをする必要があるので作業時間が長くなりがち
    • ステージング環境にデプロイしたアプリケーションに不具合があった場合、
      その修正をしたものを再度デプロイしなければいけないので、さらに作業時
      間が長くなる
    • エンドポイント構成が同一でないと入れ替えできない
                                           96
In-Place Upgrade
稼働しているデプロイのすべてのインスタンスを5つ程度のグループ
に分けて、グループごとに順次アップグレードする機能。
• メリット
  • 全てのRoleで複数のインスタンスが稼働していればローリング
    アップグレードされるのでサービス停止しないで済む
• デメリット
 • アップグレード開始から終了まで、全てのインスタンスのアップ
   グレードが完了するのに時間がかかる
 • アップグレード中に、新旧2つのバージョンが共存してしまう




                                     97
Windows Azure
Web Hosting Suite
ファイルをFTPでアップロードしてバージョンアップすることができ
る。
FTPサーバーとWebサーバーは定期的にファイルを同期している。
http://azurehosting.codeplex.com/
• メリット
  • FTPでバージョンアップできるのでなじみやすい
• デメリット
  • FTPサーバー専用のインスタンスを動かしているため、その分余
    計に費用がかかる
  • FTPサーバーとWebサーバーの同期が定期的に行われているので、
    アップロードした瞬間にWebサーバーに反映されるのではなく、
    同期されるまでのタイムラグがある
                                    98
その他のアイディア
• gitやSubversionを利用して最新のファイルを取得する仕組みを作
  る
• ファイルの更新をAzure Blobに対して行い、そこからファイルを
  取得する仕組みを作る




                                         99
#16
  データの
バックアップ

      100
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
#17
memcached互換
     Caching

           102
Windows Azure Cachingはクラウドサービスのインスタンス上に構
築できるキャッシュサービスで、memcachdプロトコルでアクセス
することができる。
Cachingをホストするインスタンスを複数にすることによって、それ
ぞれのインスタンスでデータをコピーし、高可用性を実現することが
できる。
キャッシュの利用方法によって、以下の二つの構成をとる。
       Webロール          Webロール            Workerロール

      アプリケーショ          アプリケーショ
         ン                ン


        Caching                            Caching


  Memcacheサーバーゲートウェイ       Memcacheクライアントshim

                                                     103
アプリケーションとキャッシュを
同じインスタンスに構築する方法
• ロールのキャッシュ設定で「キャッシュを有効にする」にチェッ
  ク




• エンドポイント設定で
 名前=memcache_default / 種類=Internal / プロトコル=tcp / プライベートポート=11211

                                                               104
アプリケーションとキャッシュを
異なるインスタンスに構築する方法
• キャッシュのロールは、前述の同じインスタンスにする設定と同
  じ
• アプリケーションのロールで以下を行う
 • 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
PHPからmemcachedを利用する
• php_memcache.dllエクステンションをインストールする
 • PHPのextディレクトリにphp_memcache.dllファイルを置き、
   php.iniにextension=php_memcache.dllと記述する
 http://downloads.php.net/pierre/php_memcache-2.2.6-5.3-nts-vc9-x86.zip




                                                                          106
#18
事例

  107
事例1
モーグリのツイートキャッチ システム
構成
                  Windows Azure Platform



         サーバー群
                                       データベース
         Webサーバー                      (SQL Database)
            (PHP)

                                             DB
 HTTP    WorkerRole
        (ツイート収集)




                                     Azure Storage Blob
            CDN
                                     (ビデオコンテンツ)




                       ※Webで公開されている情報から読み取ったものなので正確ではない可能性があります




                                                            108
事例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
事例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
事例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
事例2
 mixiXmas システム構成
                                   Windows Azure Platform

                                          サーバー群

              HTTP    Web Role
                                                       memcachedサーバー
HTTP                   (.NET)

       mixi
                     Worker Role




       運                                                        Table
       営

                                                                Queue


                        CDN                                     Blob

                                                            Azure Storage




                                                                            112
#19
PHP on Azure
べし ・ べからず

           113
共通
• SQL Databaseでは日本語の取り扱いに気を付けるべし
  • 照合順序の設定
  • 'N'プリフィックスをつけるべし
• SQL Databaseではタイムゾーンを意識すべし
  • UTCになっている
• PHPAzureは使うべからず
  • 開発が止まっている
• セッション変数を使うべからず (クラウドサービス&仮想マシ
   ン)
 • 複数のWebサーバーがある場合、ロードバランサがどのサーバー
   につなぐことを選択するかわからないため機能しない
 • Azureのロードバランサはセッションアフィニティの機能を持た
   ない                              114
クラウドサービス(1)
• ファイルの書き込みをAzureインスタンスのローカルディスクにす
  るべからず
  • ローカルディスクはメンテナンスや障害で消えてしまうことがあ
    る
    → ローカルディスクに保存したファイルは消えてしまうものと
    思って扱うべし
  • Azure BlobやSQL Databaseなど、永続化されるストレージに保存
    すべし
  • Frameworkのキャッシュなど、永続化不要なファイルはローカル
    ディスクに保存すべし
• OSやIISの設定はStartup TaskやOnStartメソッドで実施すべし



                                           115
クラウドサービス(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
仮想マシン
• インスタンスと、インスタンスがマウントするディスクイメージ
  があるBlobストレージは同じアフィニティグループにすべし
• 仮想マシン同士で通信したい場合は、仮想マシン作成時に「既存
  の仮想マシンに接続します」を選択すべし




                                  117
#20
Appendix

       118
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
iOS、Androidアプリケーションから
Windows Azure Storageを利用す
る
iOSやAndroidからWindows Azure Storageを利用するためのToolkit
が提供されている
• Windows Azure Toolkit for iOS
  https://github.com/WindowsAzure-Toolkits/wa-toolkit-ios
• Windows Azure Toolkit for Android
  https://github.com/WindowsAzure-Toolkits/wa-toolkit-android




                                                                120
メールの送信
Windows Azureでは、SMTPサービスを提供していない。
また、Windows AzureのインスタンスにSMTPサーバーを構築し、そ
こからメールを配信することも推奨されていない。
• 利用しているIPアドレスが以前の利用者のせいでブラックリスト
  に登録されている可能性があるため。
メールを送信するには、Office 365やSendGridなどの、外部のSMTP
サービスを利用することになる。
• How to Send Email Using SendGrid(英語)
 • https://www.windowsazure.com/en-us/develop/net/how-to-
   guides/sendgrid-email-service/



                                                            121
Windows Azure Toolkit
for Social Games
https://github.com/WindowsAzure-Toolkits/wa-toolkit-games
Windows Azure Toolkit for Social Gamesには、開発者がWindows
Azure環境に手早くソーシャルゲームを構築することを助ける、ガイ
ダンス、サンプル、ツールなどが含まれている。




                                                            122
cronに相当するタスクスケジューラ
Linuxでバッチ処理を定期的に行う方法の一つとして、cronがある。
WindowsならびにWindows Azureでは『タスクスケジューラ』がこ
れに相当する。
タスクスケジューラには、schtasksコマンドでジョブを登録するこ
とができるため、Startup TaskやOnStartでこれを実装する。
• schtasksのヘルプは以下の引数を渡すことで参照できる
  C:> schtasks /Create /?


• schtasksの例
  schtasks /create /sc daily /MO 1 /tn SampleTask /ru "NT AUTHORITYLOCALSERVICE"
    /tr "%%ProgramFiles(x86)%%phpphp.exe %~dp0batchtest.php" /st 00:00


リモートデスクトップでAzure上のインスタンスにログインして、コ
マンドプロンプトでテスト実行してみるとよいだろう。
複数のインスタンスが稼働しているロールに設定して、同時に複数の
バッチが実行されないように注意すること

                                                                                    123
Azure OSバージョンの固定
Azure OSバージョンを自動にしていると、新しいバージョンのAzure
OSが利用可能になったときに、自動でバージョンアップする。
その結果、インスタンスが順次リフレッシュされる。
意図しないタイミングでのインスタンスのリフレッシュを望まない場合
は、Azure OSバージョンを指定しておくことで、その回数を減らすこと
ができる。
•   ServiceConfig.cscfgファイルのServiceConfigurationエレメントの
    osVersionアトリビュートにAzure OSバージョンを指定する
    ※ xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="2" osVersion="*">
        osFamilyアトリビュートと整合性のとれたバージョンを指定する
     <ServiceConfiguration serviceName="PhpOnAzure"

    こと

    osVersionに指定できる値は http://msdn.microsoft.com/en-
    us/library/ee924680.aspx から、各バージョンページの
    『Configuration value』である
osVersionを指定していても、インスタンスをホストしているサーバーの
バージョンアップや、深刻なセキュリティホールが発見されたAzure OS
バージョンを利用してた場合は、リフレッシュされることがある。
                                                                                                                     124
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
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
トレーニング
• 無料 クラウド & モバイル開発トレーニング
   ~ Cloud Developer's Field
  http://www.microsoft.com/japan/windowsazure/events/hol/




                                                            127
フォーラム
• 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
コミュニティ
• Japan Windows Azure User Group
  http://r.jazug.jp/




                                   129
Q&A


  130

More Related Content

What's hot

今さら聞けない!Microsoft Azure仮想マシン入門
今さら聞けない!Microsoft Azure仮想マシン入門今さら聞けない!Microsoft Azure仮想マシン入門
今さら聞けない!Microsoft Azure仮想マシン入門Trainocate Japan, Ltd.
 
DBP-008_SQL Server on Azure VM 最新情報とベスト プラクティス
DBP-008_SQL Server on Azure VM 最新情報とベスト プラクティスDBP-008_SQL Server on Azure VM 最新情報とベスト プラクティス
DBP-008_SQL Server on Azure VM 最新情報とベスト プラクティスdecode2016
 
Windows Azureプラットフォーム 現場からの報告
Windows Azureプラットフォーム 現場からの報告Windows Azureプラットフォーム 現場からの報告
Windows Azureプラットフォーム 現場からの報告Ryuji Tamagawa
 
無料セミナー20170321 awsから始めるlinux入門
無料セミナー20170321 awsから始めるlinux入門無料セミナー20170321 awsから始めるlinux入門
無料セミナー20170321 awsから始めるlinux入門Trainocate Japan, Ltd.
 
そのエラーやお困りごと、ツールを使えば解決できるかも! ~ Sysinternals や OS 標準ツールの徹底活用術 ~ (Microsoft de:c...
そのエラーやお困りごと、ツールを使えば解決できるかも! ~ Sysinternals や OS 標準ツールの徹底活用術 ~ (Microsoft de:c...そのエラーやお困りごと、ツールを使えば解決できるかも! ~ Sysinternals や OS 標準ツールの徹底活用術 ~ (Microsoft de:c...
そのエラーやお困りごと、ツールを使えば解決できるかも! ~ Sysinternals や OS 標準ツールの徹底活用術 ~ (Microsoft de:c...Takamasa Maejima
 
Windows Azure で 2/29 に起こった問題のまとめ
Windows Azure で 2/29 に起こった問題のまとめWindows Azure で 2/29 に起こった問題のまとめ
Windows Azure で 2/29 に起こった問題のまとめSunao Tomita
 
Windows Server 2016 で作るシンプルなハイパーコンバージドインフラ (Microsoft TechSummit 2016)
Windows Server 2016 で作るシンプルなハイパーコンバージドインフラ (Microsoft TechSummit 2016)Windows Server 2016 で作るシンプルなハイパーコンバージドインフラ (Microsoft TechSummit 2016)
Windows Server 2016 で作るシンプルなハイパーコンバージドインフラ (Microsoft TechSummit 2016)Takamasa Maejima
 
Windows Azure アプリケーション設計を賢く行うための基本知識
Windows Azure アプリケーション設計を賢く行うための基本知識Windows Azure アプリケーション設計を賢く行うための基本知識
Windows Azure アプリケーション設計を賢く行うための基本知識Kazuyuki Nomura
 
SQL Server/SQL Database の新機能のお話し
SQL Server/SQL Database の新機能のお話しSQL Server/SQL Database の新機能のお話し
SQL Server/SQL Database の新機能のお話しInsight Technology, Inc.
 
Ws2012フェールオーバークラスタリングdeep dive 130802
Ws2012フェールオーバークラスタリングdeep dive 130802Ws2012フェールオーバークラスタリングdeep dive 130802
Ws2012フェールオーバークラスタリングdeep dive 130802wintechq
 
C13 SQL Server2012知られざるTips集 by 平山理
C13 SQL Server2012知られざるTips集 by 平山理C13 SQL Server2012知られざるTips集 by 平山理
C13 SQL Server2012知られざるTips集 by 平山理Insight Technology, Inc.
 
Sql server浅く広く
Sql server浅く広くSql server浅く広く
Sql server浅く広くokumar savurou
 
Wsfc basic 130720
Wsfc basic 130720Wsfc basic 130720
Wsfc basic 130720wintechq
 
Windows Azure 概要
Windows Azure 概要Windows Azure 概要
Windows Azure 概要fumios
 
XPagesDay2015 - 誰も教えてくれなかったデバッグ方法
XPagesDay2015 - 誰も教えてくれなかったデバッグ方法XPagesDay2015 - 誰も教えてくれなかったデバッグ方法
XPagesDay2015 - 誰も教えてくれなかったデバッグ方法Mitsuru Katoh
 
Windows Server 2016 Active Directoryドメインサービス入門
Windows Server 2016 Active Directoryドメインサービス入門Windows Server 2016 Active Directoryドメインサービス入門
Windows Server 2016 Active Directoryドメインサービス入門Trainocate Japan, Ltd.
 
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (前編)
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (前編)大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (前編)
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (前編)Akihiro Kuwano
 

What's hot (20)

今さら聞けない!Microsoft Azure仮想マシン入門
今さら聞けない!Microsoft Azure仮想マシン入門今さら聞けない!Microsoft Azure仮想マシン入門
今さら聞けない!Microsoft Azure仮想マシン入門
 
azureから使うlinux
azureから使うlinuxazureから使うlinux
azureから使うlinux
 
active directory-slideshare
active directory-slideshareactive directory-slideshare
active directory-slideshare
 
DBP-008_SQL Server on Azure VM 最新情報とベスト プラクティス
DBP-008_SQL Server on Azure VM 最新情報とベスト プラクティスDBP-008_SQL Server on Azure VM 最新情報とベスト プラクティス
DBP-008_SQL Server on Azure VM 最新情報とベスト プラクティス
 
Windows Azureプラットフォーム 現場からの報告
Windows Azureプラットフォーム 現場からの報告Windows Azureプラットフォーム 現場からの報告
Windows Azureプラットフォーム 現場からの報告
 
無料セミナー20170321 awsから始めるlinux入門
無料セミナー20170321 awsから始めるlinux入門無料セミナー20170321 awsから始めるlinux入門
無料セミナー20170321 awsから始めるlinux入門
 
そのエラーやお困りごと、ツールを使えば解決できるかも! ~ Sysinternals や OS 標準ツールの徹底活用術 ~ (Microsoft de:c...
そのエラーやお困りごと、ツールを使えば解決できるかも! ~ Sysinternals や OS 標準ツールの徹底活用術 ~ (Microsoft de:c...そのエラーやお困りごと、ツールを使えば解決できるかも! ~ Sysinternals や OS 標準ツールの徹底活用術 ~ (Microsoft de:c...
そのエラーやお困りごと、ツールを使えば解決できるかも! ~ Sysinternals や OS 標準ツールの徹底活用術 ~ (Microsoft de:c...
 
Windows Azure で 2/29 に起こった問題のまとめ
Windows Azure で 2/29 に起こった問題のまとめWindows Azure で 2/29 に起こった問題のまとめ
Windows Azure で 2/29 に起こった問題のまとめ
 
Windows Server 2016 で作るシンプルなハイパーコンバージドインフラ (Microsoft TechSummit 2016)
Windows Server 2016 で作るシンプルなハイパーコンバージドインフラ (Microsoft TechSummit 2016)Windows Server 2016 で作るシンプルなハイパーコンバージドインフラ (Microsoft TechSummit 2016)
Windows Server 2016 で作るシンプルなハイパーコンバージドインフラ (Microsoft TechSummit 2016)
 
Windows Azure アプリケーション設計を賢く行うための基本知識
Windows Azure アプリケーション設計を賢く行うための基本知識Windows Azure アプリケーション設計を賢く行うための基本知識
Windows Azure アプリケーション設計を賢く行うための基本知識
 
SQL Server/SQL Database の新機能のお話し
SQL Server/SQL Database の新機能のお話しSQL Server/SQL Database の新機能のお話し
SQL Server/SQL Database の新機能のお話し
 
Ws2012フェールオーバークラスタリングdeep dive 130802
Ws2012フェールオーバークラスタリングdeep dive 130802Ws2012フェールオーバークラスタリングdeep dive 130802
Ws2012フェールオーバークラスタリングdeep dive 130802
 
C13 SQL Server2012知られざるTips集 by 平山理
C13 SQL Server2012知られざるTips集 by 平山理C13 SQL Server2012知られざるTips集 by 平山理
C13 SQL Server2012知られざるTips集 by 平山理
 
Sql server浅く広く
Sql server浅く広くSql server浅く広く
Sql server浅く広く
 
Wsfc basic 130720
Wsfc basic 130720Wsfc basic 130720
Wsfc basic 130720
 
Windows Azure 概要
Windows Azure 概要Windows Azure 概要
Windows Azure 概要
 
XPagesDay2015 - 誰も教えてくれなかったデバッグ方法
XPagesDay2015 - 誰も教えてくれなかったデバッグ方法XPagesDay2015 - 誰も教えてくれなかったデバッグ方法
XPagesDay2015 - 誰も教えてくれなかったデバッグ方法
 
Windows Server 2016 Active Directoryドメインサービス入門
Windows Server 2016 Active Directoryドメインサービス入門Windows Server 2016 Active Directoryドメインサービス入門
Windows Server 2016 Active Directoryドメインサービス入門
 
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (前編)
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (前編)大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (前編)
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (前編)
 
Microsoft Azureから使うLinux
Microsoft Azureから使うLinuxMicrosoft Azureから使うLinux
Microsoft Azureから使うLinux
 

Similar to PHP on Windows Azure Training

現場開発者視点で答えるWindows Azure
現場開発者視点で答えるWindows Azure現場開発者視点で答えるWindows Azure
現場開発者視点で答えるWindows AzureKeiichi Hashimoto
 
はじめての Azure 開発
はじめての Azure 開発はじめての Azure 開発
はじめての Azure 開発Yoshitaka Seo
 
JAZUG Nagoya Windows Azure Update 20140301
JAZUG Nagoya Windows Azure Update 20140301JAZUG Nagoya Windows Azure Update 20140301
JAZUG Nagoya Windows Azure Update 20140301Ayako Omori
 
わんくま東京勉強会#46 Azureセッション資料
わんくま東京勉強会#46 Azureセッション資料わんくま東京勉強会#46 Azureセッション資料
わんくま東京勉強会#46 Azureセッション資料Shinichiro Isago
 
わんくま東京勉強会#46 Azureセッション資料
わんくま東京勉強会#46 Azureセッション資料わんくま東京勉強会#46 Azureセッション資料
わんくま東京勉強会#46 Azureセッション資料guest628c07
 
OSC 2012 Microsoft Session [マイクロソフトの魅せるセンサー×クラウド技術]
OSC 2012 Microsoft Session [マイクロソフトの魅せるセンサー×クラウド技術]OSC 2012 Microsoft Session [マイクロソフトの魅せるセンサー×クラウド技術]
OSC 2012 Microsoft Session [マイクロソフトの魅せるセンサー×クラウド技術]Aya Tokura
 
B 2-2今年の夏は azure でキマリ! azure 使いこなしテクニックin ベルサール汐留
B 2-2今年の夏は azure でキマリ! azure 使いこなしテクニックin ベルサール汐留B 2-2今年の夏は azure でキマリ! azure 使いこなしテクニックin ベルサール汐留
B 2-2今年の夏は azure でキマリ! azure 使いこなしテクニックin ベルサール汐留GoAzure
 
20190705 mas ken_azure_stack
20190705 mas ken_azure_stack20190705 mas ken_azure_stack
20190705 mas ken_azure_stackOsamu Takazoe
 
Windows Azure for PHP Developers
Windows Azure for PHP DevelopersWindows Azure for PHP Developers
Windows Azure for PHP Developersfumios
 
Windows azureって何
Windows azureって何Windows azureって何
Windows azureって何Kana SUZUKI
 
SQL Beginners Day #1 - SQL Server および Azure SQL のインストールと管理
SQL Beginners Day #1 - SQL Server および Azure SQL のインストールと管理SQL Beginners Day #1 - SQL Server および Azure SQL のインストールと管理
SQL Beginners Day #1 - SQL Server および Azure SQL のインストールと管理Oshitari_kochi
 
MSC 2010 T5-1 クラウド時代の最新アプリケーション プラットフォーム「Windows Azure」概要
MSC 2010 T5-1 クラウド時代の最新アプリケーション プラットフォーム「Windows Azure」概要MSC 2010 T5-1 クラウド時代の最新アプリケーション プラットフォーム「Windows Azure」概要
MSC 2010 T5-1 クラウド時代の最新アプリケーション プラットフォーム「Windows Azure」概要kumo2010
 
PHP on Windows Azure
PHP on Windows AzurePHP on Windows Azure
PHP on Windows AzureMicrosoft
 
SQL Azure Management and Security
SQL Azure Management and SecuritySQL Azure Management and Security
SQL Azure Management and Securityjunichi anno
 
クラウド時代の Web サイト構築 ~ Windows Azure Web サイト概要 ~
クラウド時代の Web サイト構築 ~ Windows Azure Web サイト概要 ~クラウド時代の Web サイト構築 ~ Windows Azure Web サイト概要 ~
クラウド時代の Web サイト構築 ~ Windows Azure Web サイト概要 ~Akira Inoue
 
サーバーレスの今とこれから
サーバーレスの今とこれからサーバーレスの今とこれから
サーバーレスの今とこれから真吾 吉田
 
20140927 azure pack_slideshare
20140927 azure pack_slideshare20140927 azure pack_slideshare
20140927 azure pack_slideshareOsamu Takazoe
 
Azure Stack Hybrid DevOpsデモンストレーション
Azure Stack Hybrid DevOpsデモンストレーションAzure Stack Hybrid DevOpsデモンストレーション
Azure Stack Hybrid DevOpsデモンストレーションMasahiko Ebisuda
 

Similar to PHP on Windows Azure Training (20)

現場開発者視点で答えるWindows Azure
現場開発者視点で答えるWindows Azure現場開発者視点で答えるWindows Azure
現場開発者視点で答えるWindows Azure
 
はじめての Azure 開発
はじめての Azure 開発はじめての Azure 開発
はじめての Azure 開発
 
JAZUG Nagoya Windows Azure Update 20140301
JAZUG Nagoya Windows Azure Update 20140301JAZUG Nagoya Windows Azure Update 20140301
JAZUG Nagoya Windows Azure Update 20140301
 
わんくま東京勉強会#46 Azureセッション資料
わんくま東京勉強会#46 Azureセッション資料わんくま東京勉強会#46 Azureセッション資料
わんくま東京勉強会#46 Azureセッション資料
 
わんくま東京勉強会#46 Azureセッション資料
わんくま東京勉強会#46 Azureセッション資料わんくま東京勉強会#46 Azureセッション資料
わんくま東京勉強会#46 Azureセッション資料
 
OSC 2012 Microsoft Session [マイクロソフトの魅せるセンサー×クラウド技術]
OSC 2012 Microsoft Session [マイクロソフトの魅せるセンサー×クラウド技術]OSC 2012 Microsoft Session [マイクロソフトの魅せるセンサー×クラウド技術]
OSC 2012 Microsoft Session [マイクロソフトの魅せるセンサー×クラウド技術]
 
B 2-2今年の夏は azure でキマリ! azure 使いこなしテクニックin ベルサール汐留
B 2-2今年の夏は azure でキマリ! azure 使いこなしテクニックin ベルサール汐留B 2-2今年の夏は azure でキマリ! azure 使いこなしテクニックin ベルサール汐留
B 2-2今年の夏は azure でキマリ! azure 使いこなしテクニックin ベルサール汐留
 
20190705 mas ken_azure_stack
20190705 mas ken_azure_stack20190705 mas ken_azure_stack
20190705 mas ken_azure_stack
 
Sql azure入門
Sql azure入門Sql azure入門
Sql azure入門
 
Windows Azure for PHP Developers
Windows Azure for PHP DevelopersWindows Azure for PHP Developers
Windows Azure for PHP Developers
 
Windows azureって何
Windows azureって何Windows azureって何
Windows azureって何
 
SQL Beginners Day #1 - SQL Server および Azure SQL のインストールと管理
SQL Beginners Day #1 - SQL Server および Azure SQL のインストールと管理SQL Beginners Day #1 - SQL Server および Azure SQL のインストールと管理
SQL Beginners Day #1 - SQL Server および Azure SQL のインストールと管理
 
MSC 2010 T5-1 クラウド時代の最新アプリケーション プラットフォーム「Windows Azure」概要
MSC 2010 T5-1 クラウド時代の最新アプリケーション プラットフォーム「Windows Azure」概要MSC 2010 T5-1 クラウド時代の最新アプリケーション プラットフォーム「Windows Azure」概要
MSC 2010 T5-1 クラウド時代の最新アプリケーション プラットフォーム「Windows Azure」概要
 
PHP on Windows Azure
PHP on Windows AzurePHP on Windows Azure
PHP on Windows Azure
 
PHP on Windows Azure
PHP on Windows AzurePHP on Windows Azure
PHP on Windows Azure
 
SQL Azure Management and Security
SQL Azure Management and SecuritySQL Azure Management and Security
SQL Azure Management and Security
 
クラウド時代の Web サイト構築 ~ Windows Azure Web サイト概要 ~
クラウド時代の Web サイト構築 ~ Windows Azure Web サイト概要 ~クラウド時代の Web サイト構築 ~ Windows Azure Web サイト概要 ~
クラウド時代の Web サイト構築 ~ Windows Azure Web サイト概要 ~
 
サーバーレスの今とこれから
サーバーレスの今とこれからサーバーレスの今とこれから
サーバーレスの今とこれから
 
20140927 azure pack_slideshare
20140927 azure pack_slideshare20140927 azure pack_slideshare
20140927 azure pack_slideshare
 
Azure Stack Hybrid DevOpsデモンストレーション
Azure Stack Hybrid DevOpsデモンストレーションAzure Stack Hybrid DevOpsデモンストレーション
Azure Stack Hybrid DevOpsデモンストレーション
 

More from Microsoft Openness Japan (11)

Pycon APAC 2013 Windows Azure Session
Pycon APAC 2013 Windows Azure SessionPycon APAC 2013 Windows Azure Session
Pycon APAC 2013 Windows Azure Session
 
Windows Azure
Windows AzureWindows Azure
Windows Azure
 
Azure de PHP
Azure de PHPAzure de PHP
Azure de PHP
 
Azure de Linux
Azure de LinuxAzure de Linux
Azure de Linux
 
Windows Azure Community Open Day 2012
Windows Azure   Community Open Day 2012Windows Azure   Community Open Day 2012
Windows Azure Community Open Day 2012
 
Windows Azure PHP Tips
Windows Azure PHP Tips Windows Azure PHP Tips
Windows Azure PHP Tips
 
PHP on Azure
PHP on AzurePHP on Azure
PHP on Azure
 
Oss on Azure, Websites, WordPress
Oss on Azure, Websites, WordPressOss on Azure, Websites, WordPress
Oss on Azure, Websites, WordPress
 
Oss on Azure, social mobile web
Oss on Azure, social mobile webOss on Azure, social mobile web
Oss on Azure, social mobile web
 
Azure pm
Azure pmAzure pm
Azure pm
 
PHP on Windows Azure
PHP on Windows Azure PHP on Windows Azure
PHP on Windows Azure
 

PHP on Windows Azure Training

  • 1. PHP on Windows Azure training ver.20121127-1.3.3 日本マイクロソフト株式会社 株式会社pnop
  • 2. 本ドキュメントに含まれる情報は、情報としての利用のみを目的としています。 ドキュメントの内容は発行時点におけるMicrosoft Corporation (以下、"Microsoft") の見解を反映したものです。Microsoftは、本ドキュメントの正確性または目的へ の適合性について、いかなる保証または表明も行いません。また、本ドキュメン トの使用に起因するいかなる状況についても責任を負いません。この状況には、 過失(人体の負傷または死亡を除く)、あらゆる破損または損失(業務上の損失、収 益または利益などの結果的な損失を無制限に含む) などが含まれます。本ドキュメ ントには技術的に不正確な記述や表記の誤りが含まれる場合があります。本ド キュメントは市場状況などの変化により、内容が最新のものではない場合があり ます。Microsoft は、本ドキュメントの内容を常に更新したり最新の情報を反映し たりすることについて一切の義務を負わず、これらを行わないことによる責任を 問われないものとします。マイクロソフトは、本ドキュメントに記載されている 内容に関して、特許、特許出願、商標、著作権、またはその他の無体財産権を有 する場合があります。別途マイクロソフトのライセンス契約上に明示の規定のな い限り、本ドキュメントはこれらの特許、商標、著作権、またはその他の無体財 産権に関する権利をお客様に許諾するものではありません。 Microsoft、Windows、Windows Azureは、Microsoft Corporation の商標または登 録商標です。その他すべての商標は、その所有者に帰属します。 Copyright © 2012 Microsoft Corporation. All rights reserved. 2
  • 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
  • 5. Agenda (2) 11. Framework、テンプレートエンジン 12. セッション変数 $_SESSION 13. IISの設定 14. クラウドサービスのアプリケーションの更新方法 15. データのバックアップ 16. memcached互換 Caching 17. 事例 18. PHP on Azure べし・べからず 19. Appendix 20. Q & A 5
  • 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
  • 17. Load Balancer • ロードバランサは自動で構成される • 60秒間、通信がない接続は強制切断される • セッションアフィニティをサポートしない (Webサイト除く) • セッション変数を利用するには工夫が必要な場合もある(後述) 17
  • 18. CDN • Azure BlobとクラウドサービスのWebRoleをサポートする Contents Delivery Network • 日本国内にもノードがあるため、ユーザーに対する静的ファイル (画像、動画、html、JavaScript、cssなど)のレスポンスを向上 する • 大量の同時アクセスがあっても、CDNで捌ければコンピュートイ ンスタンスに負荷を肩代わりしてくれる 18
  • 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
  • 20. #2 クラウドサービスへ の デプロイ環境 20
  • 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
  • 23. 23
  • 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
  • 35. 作成したWebアプリケーションをクラウドサービスで稼働させるため には、以下の手順を踏む必要がある。 1. 開発環境でアプリケーションのパッケージを作成 2. 作成したパッケージをWindows Azure実行環境にデプロイ これらはVSやPowerShellなどのデプロイツールから一連のオペレー ションで実施することもできるが、ここでは汎用的な方法である以下 の手順を紹介する。 1. 各開発ツールでアプリケーションのパッケージファイルを作成 • Visual Studio 2012 Express for Web • Windows Azure PowerShell 2. WebブラウザでWindows Azure管理ポータルからデプロイ 35
  • 37. #5 Demo クラウドサービスの プロジェクト作成か ら デプロイ 37
  • 38. • Visual Studio 2012 Express for Webによる アプリケーションプロジェクト作成~パッケージ作成 • Windows Azure PowerShellによる プロジェクト作成~パッケージ作成 • Windows Azure管理ポータルからのデプロイ 38
  • 39. #6 クラウドサービス への PHP環境の構築 39
  • 40. Windows Azure上のインスタンスでPHPアプリケーションを動かす ためには、インスタンスの初期化時にPHPをセットアップする必要が ある。 そのための方法として以下のようなものが考えられる。 • WebPi Commandを利用してPHPランタイムをインストールする • PHPランタイムのファイルをパッケージに含める • インスタンスの初期化時にwindows.php.netよりファイルをダウ ンロードして、任意のバージョンをインストールする ここでは、もっとも簡単な、WebPi Commandを利用してPHPラン タイムをインストールする方法を紹介する。 40
  • 41. インスタンス初期化時に 任意の処理を実行 インスタンスの初期化時にPHPをセットアップするにはStartup Task またはOnStartメソッド(.NET)に記述する。 • Startup Task • 任意のコマンドを実行することができる • OnStartメソッド • .NETでOnStartメソッドに記述した処理がインスタンス初期化時 に実行される これらの処理はPHPのセットアップに限らず、フォルダの権限変更、 IISの設定変更やその他のアプリケーションのインストールなどに利 用できる。 41
  • 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
  • 44. OnStartメソッド (1) *.csのOnStartメソッド内にインスタンス初期化時に実施する任意の 処理を.NETで記述することできる namespace WebRole { public class WebRole : RoleEntryPoint { public override bool OnStart() { // 構成の変更を処理する方法については、 // MSDN トピック (http://go.microsoft.com/fwlink/?LinkId=166357) を参照してください。 /**** ここに初期化時に実行する処理を記述する ****/ return base.OnStart(); } } } • Microsoft.Web.Administration.dllを利用して、 IISの設定変更などをすることができる 44
  • 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 &gt; 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
  • 54. #8 Azure Storage を利用する 54
  • 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
  • 58. Azure Blobとは Azure Blobはファイルを格納するストレージである。 コンテナーと呼ばれる、ファイルをまとめるフォルダーに相当する機能 があるが、コンテナーの作成は1階層のみで、コンテナーの中にコンテ ナーを作成することはできない。 コンテナーより仮想のディレクトリ構成は、ファイル名に『/』を含ませ ることで疑似的に利用できる。 Azure Blob用のツールによっては、このファイル名に含まれる『/』を ディレクトリと解釈して表示してくれるものもある。 コンテナーごとに共有ポリシーを設定することができ、キーなしでアク セスできるPublic、キーが必要なPrivateがある。 コンテナーの共有ポリシーがPublicであれば、http/httpsでファイルに Azureの外部からも直接アクセスできる。 https://{アカウント名}.blob.core.windows.net/{コンテナー}/ {ファイル名} 58
  • 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
  • 62. #10 Azure Table を利用する 62
  • 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
  • 66. Azure Table用ツール • Neudesic Azure Storage Explorer • ClumsyLeaf TableXplorer • myAzureStorage Azure Storage Explorer 66
  • 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
  • 69. #11 SQL Database を利用する 69
  • 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
  • 79. 日本語やマルチバイト文字を扱う SQL Server(SQL Databaseを含む)では、Unicode文字列を格納す る型として、nvarchar/nchar が用意されている。 これらUnicode文字列を格納する際や比較を行う際のUnicodeリテラ ル文字列には、プレフィックスとして『N』を付与する必要がある。 • INSERTの例 INSERT INTO sample (ID, UserName, Created, Updated) VALUES ('1', N'テスト銀行 ', GETDATE(), GETDATE()) • SELECT ~ WHEREの例 SELECT UserName WHERE UserName = N'クラウディア' 79
  • 80. タイムゾーン グローバルに提供されるデータベースサービスのため、標準のタイム ゾーンがUTCとなっている上に、接続ごとにタイムゾーンを指定するこ とはできない。 そのため、各国での利用では標準時刻との差を補正する必要がある。 仮に日本でのサービスであれば以下のようにするとよい。 • datetimeoffset型を使う datetimeoffset型にはタイムゾーンが含まれる。 この型で扱うデータに対して、switchoffset関数とsysdatetimeoffset 関数を利用することで、JSTに変換することができる。 • INSERT INTO sample VALUES(switchoffset(sysdatetimeoffset(), '+09:00')) INSERTの際にJSTに変換して格納する • SELECT switchoffset(col, '+09:00') FROM sample UTCで格納されているデータをSELECTの時にJSTに変換する • これらを置き換えるユーザー定義関数やビューを作ってしまってもい いだろう 80
  • 81. MySQL vs SQL Database • バックアップ&リカバリ • MySQL:ユーザーの責任 • SQL Database:自動で行われる • 死活監視 • MySQL:ユーザーの責任 • SQL Database:自動で行われる • クラスタリング環境 • MySQL • ユーザーが実施 • 用意した台数分だけ、インスタンス費用とストレージ費用がかかる • SQL Database • 自動でマスターノード1台、スレーブノード2台 • 費用は標準価格に含まれる 81
  • 82. #12 Framework テンプレートエンジ ン 82
  • 83. Framework テンプレートエンジンの利用 Windows Azureでも、CakePHPなどのFrameworkや、Smartyなどのテンプレー トエンジンを利用することができる。 その際、以下の注意が必要となる。 • キャッシュファイルを出力する場合は、その出力先フォルダがIIS_IUSRSグ ループから書き込み可能である必要がある • Startup TaskやOnStartメソッドでicaclsコマンドなどを利用して書き込み権限 を与える icacls ..approottemp /grant "IIS_IUSRS":F /T • SQL Databaseを利用する場合、FrameworkのSQL Serverドライバが提供さ れており、さらに日本語を扱う場合はそのドライバが日本語に対応している必 要がある 以下にあげるFrameworkは対応しているようだ • CakePHP • ZendFramework • CodeIgniter (http://cisqlsrvuni.codeplex.com/を利用する) • symfony 83
  • 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
  • 86. セッション変数の利用 (Webサイト) • Webサイト用ののロードバランサはセッションアフィニティの機 能を持つため、複数のWebサーバーがあってもデフォルトの session.save_handler=filesでセッション変数を利用できる • Memcachedなどをセッション変数の保存先として利用することが できない 86
  • 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
  • 89. IIS全体への設定 オンプレミスのWindows ServerでのIISの設定は、IISマネージャーというGUI ツールで実施するのが一般的である。 Windows Azureでもリモートデスクトップで接続してIISマネージャーで設定する ことも可能だが、その方法だと以下のような場合にも手作業で設定しなければな らないのでお奨めしない。 • インスタンス追加時の新しいインスタンスに対して • インスタンスのOSがバージョンアップがされた場合 • インスタンスを『初期状態にリセット』した場合 • インスタンスに障害が発生し、別の物理サーバーにVMが移動した場合 • 何らかの理由によりインスタンスが再起動した場合 その代わりとして、以下のような方法で上記のような場合にも再設定されるよう にしておく必要がある。 • Startup Taskでappcmd.exeを利用する • Startup TaskでPowerShellのWebAdministrationモジュールを利用する • OnStartメソッドでMicrosoft.Web.Administrationクラスなどを利用 89
  • 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
  • 95. クラウドサービスでは、従来のオンプレミスサーバーやホスティング サーバーと同じ方法では、アプリケーションのバージョンアップがで きない。 それは、バージョンアップでサーバー上のファイルを直接変更した状 態で、OSメンテナンスや障害などによりインスタンスが初期化され ると、そのバージョンアップは消えてしまい、デプロイ時の状態に 戻ってしまうためである。 それに加えて、インスタンスを増加したときに、新しく追加されたイ ンスタンスでもバージョンアップは反映されない。 ここではアプリケーションをバージョンアップする方法を紹介する。 • ステージングからのVIP Swap • In-Place Upgrade • Windows Azure Web Hosting Suite 95
  • 96. ステージングからのVIP Swap 同一ホステッドサービス内の運用環境のデプロイに割り当てていたVIPをステージ ング環境のデプロイに付け替える機能。 運用中のホステッドサービスのステージング環境に最新バージョンのアプリケー ションをデプロイし、運用環境とステージング環境を入れ替えることでバージョ ンアップできる。 • メリット • サービスの停止時間を最も短くできる VIP Swapにかかる時間は数秒 • ステージング環境でテストしたものをそのままリリースできる • 新バージョンに不具合があった場合、すぐに旧バージョンに戻すことができ る • デメリット • デプロイをする必要があるので作業時間が長くなりがち • ステージング環境にデプロイしたアプリケーションに不具合があった場合、 その修正をしたものを再度デプロイしなければいけないので、さらに作業時 間が長くなる • エンドポイント構成が同一でないと入れ替えできない 96
  • 97. In-Place Upgrade 稼働しているデプロイのすべてのインスタンスを5つ程度のグループ に分けて、グループごとに順次アップグレードする機能。 • メリット • 全てのRoleで複数のインスタンスが稼働していればローリング アップグレードされるのでサービス停止しないで済む • デメリット • アップグレード開始から終了まで、全てのインスタンスのアップ グレードが完了するのに時間がかかる • アップグレード中に、新旧2つのバージョンが共存してしまう 97
  • 98. Windows Azure Web Hosting Suite ファイルをFTPでアップロードしてバージョンアップすることができ る。 FTPサーバーとWebサーバーは定期的にファイルを同期している。 http://azurehosting.codeplex.com/ • メリット • FTPでバージョンアップできるのでなじみやすい • デメリット • FTPサーバー専用のインスタンスを動かしているため、その分余 計に費用がかかる • FTPサーバーとWebサーバーの同期が定期的に行われているので、 アップロードした瞬間にWebサーバーに反映されるのではなく、 同期されるまでのタイムラグがある 98
  • 99. その他のアイディア • gitやSubversionを利用して最新のファイルを取得する仕組みを作 る • ファイルの更新をAzure Blobに対して行い、そこからファイルを 取得する仕組みを作る 99
  • 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
  • 102. #17 memcached互換 Caching 102
  • 104. アプリケーションとキャッシュを 同じインスタンスに構築する方法 • ロールのキャッシュ設定で「キャッシュを有効にする」にチェッ ク • エンドポイント設定で 名前=memcache_default / 種類=Internal / プロトコル=tcp / プライベートポート=11211 104
  • 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
  • 106. PHPからmemcachedを利用する • php_memcache.dllエクステンションをインストールする • PHPのextディレクトリにphp_memcache.dllファイルを置き、 php.iniにextension=php_memcache.dllと記述する http://downloads.php.net/pierre/php_memcache-2.2.6-5.3-nts-vc9-x86.zip 106
  • 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
  • 113. #19 PHP on Azure べし ・ べからず 113
  • 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
  • 117. 仮想マシン • インスタンスと、インスタンスがマウントするディスクイメージ があるBlobストレージは同じアフィニティグループにすべし • 仮想マシン同士で通信したい場合は、仮想マシン作成時に「既存 の仮想マシンに接続します」を選択すべし 117
  • 118. #20 Appendix 118
  • 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
  • 120. iOS、Androidアプリケーションから Windows Azure Storageを利用す る iOSやAndroidからWindows Azure Storageを利用するためのToolkit が提供されている • Windows Azure Toolkit for iOS https://github.com/WindowsAzure-Toolkits/wa-toolkit-ios • Windows Azure Toolkit for Android https://github.com/WindowsAzure-Toolkits/wa-toolkit-android 120
  • 121. メールの送信 Windows Azureでは、SMTPサービスを提供していない。 また、Windows AzureのインスタンスにSMTPサーバーを構築し、そ こからメールを配信することも推奨されていない。 • 利用しているIPアドレスが以前の利用者のせいでブラックリスト に登録されている可能性があるため。 メールを送信するには、Office 365やSendGridなどの、外部のSMTP サービスを利用することになる。 • How to Send Email Using SendGrid(英語) • https://www.windowsazure.com/en-us/develop/net/how-to- guides/sendgrid-email-service/ 121
  • 122. Windows Azure Toolkit for Social Games https://github.com/WindowsAzure-Toolkits/wa-toolkit-games Windows Azure Toolkit for Social Gamesには、開発者がWindows Azure環境に手早くソーシャルゲームを構築することを助ける、ガイ ダンス、サンプル、ツールなどが含まれている。 122
  • 123. cronに相当するタスクスケジューラ Linuxでバッチ処理を定期的に行う方法の一つとして、cronがある。 WindowsならびにWindows Azureでは『タスクスケジューラ』がこ れに相当する。 タスクスケジューラには、schtasksコマンドでジョブを登録するこ とができるため、Startup TaskやOnStartでこれを実装する。 • schtasksのヘルプは以下の引数を渡すことで参照できる C:> schtasks /Create /? • schtasksの例 schtasks /create /sc daily /MO 1 /tn SampleTask /ru "NT AUTHORITYLOCALSERVICE" /tr "%%ProgramFiles(x86)%%phpphp.exe %~dp0batchtest.php" /st 00:00 リモートデスクトップでAzure上のインスタンスにログインして、コ マンドプロンプトでテスト実行してみるとよいだろう。 複数のインスタンスが稼働しているロールに設定して、同時に複数の バッチが実行されないように注意すること 123
  • 124. Azure OSバージョンの固定 Azure OSバージョンを自動にしていると、新しいバージョンのAzure OSが利用可能になったときに、自動でバージョンアップする。 その結果、インスタンスが順次リフレッシュされる。 意図しないタイミングでのインスタンスのリフレッシュを望まない場合 は、Azure OSバージョンを指定しておくことで、その回数を減らすこと ができる。 • ServiceConfig.cscfgファイルのServiceConfigurationエレメントの osVersionアトリビュートにAzure OSバージョンを指定する ※ xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="2" osVersion="*"> osFamilyアトリビュートと整合性のとれたバージョンを指定する <ServiceConfiguration serviceName="PhpOnAzure" こと osVersionに指定できる値は http://msdn.microsoft.com/en- us/library/ee924680.aspx から、各バージョンページの 『Configuration value』である osVersionを指定していても、インスタンスをホストしているサーバーの バージョンアップや、深刻なセキュリティホールが発見されたAzure OS バージョンを利用してた場合は、リフレッシュされることがある。 124
  • 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
  • 129. コミュニティ • Japan Windows Azure User Group http://r.jazug.jp/ 129

Editor's Notes

  1. 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 -&gt; final click reviels the cloud box at the bottom.