Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Pycon APAC 2013 Windows Azure Session

3,621 views

Published on

Learn more about running Python on Windows Azureの心得
by 高橋道也さん

Published in: Technology
  • Be the first to comment

Pycon APAC 2013 Windows Azure Session

  1. 1. 高橋 道也 at PyCon APAC 2013
  2. 2. 高橋 道也 東洋ソフトウェアエンジニアリング株式 会社勤務  Windows Azureの導入支援業務を担当  
  3. 3.  汎用IaaS  Windows Server (2008R2/2012) ▪ SQL Server導入済み仮想マシンなどの選択も可能  Linux (CentOS/Ubuntu/SUSE) ▪ VM DEPOTより各種OSSインストール済み仮想マシ ンの選択も可能   OSレベルで柔軟にカスタマイズ可能 オートスケール機能が利用可能
  4. 4. 汎用PaaS 専用SDKでアプリケーションをパッケージン グし、クラウド専用構成のWindows Server インスタンスにデプロイ  柔軟なスケーリング  状態確認のためのOSレベルの操作は可能  Webロール/Workerロール  DjangoアプリケーションをWebロールとし てデプロイ可能    IIS上のFastCGIプロセスとして動作
  5. 5.        Webアプリケーション特化型のPaaS GitやFTPなど一般的なツールでアプリ ケーションをデプロイ可能 最大10サイトまでの無料枠 OSレベルの操作は不可 スケーリング性能上の制限 Django/Flaskを標準でサポート 他のWSGI準拠フレームワークも使用可能
  6. 6.  コンピューティングサービスで処理する 各種データを永続保管  Blob Storage アプリケーションで使用する各種ファイル、仮想マシ ンのディスクイメージ  Table Storage アプリケーションから使用するKVS型分散データスト ア  Queue Storage インスタンス間非同期通信用メッセージキュー
  7. 7.   SQL ServerベースのRDBサービス ODBCでアプリケーションから接続 Pythonでは以下の構成で接続可能  Windows pyodbcまたはpywin32+SQL Server Native Client  Linux pyodbc+unixODBC+Microsoft ODBC Driver for SQL ServerまたはFreeTDS  フェデレーション構成によるスケーリン グが可能
  8. 8.  クラウド上に仮想的なプライベートネッ トワークを作成、仮想マシン間のセキュ アな通信  IPSec VPNによるオンプレミスネット ワークとの相互接続が可能  独自のDNSサーバを仮想ネットワーク内 に設定することが可能
  9. 9.  Mobile Service モバイルアプリケーションバックエンド  Media Service 動画のエンコード・配信  HDInsight Hadoopベースのビッグデータ処理  Service Bus 非同期メッセージング    Cache Service CDN ストア(サードパーティから提供のサービス) ClearDB(MySQLサービス)、SendGrid(メール送信サービス)、 Engine Yard(RoR PaaS)など など
  10. 10.  管理ポータル  WebブラウザベースのGUI管理ツール  各種サービスの作成・管理  Windows Azure SDK  クラウドサービス開発キット ▪ クラウドサービスエミュレータ ▪ デプロイ用パッケージ作成ツール
  11. 11.  Windows Azure PowerShell  コマンドラインからWindows Azure管理操作  クラウドサービスプロジェクト作成機能  Django Webロール作成機能 ▪ Add-AzureDjangoWebRoleコマンド  クロスプラットフォームCLI  コマンドラインからWindows Azure管理操作  Windows・Mac・Linuxで利用可能
  12. 12.  Python Tools for Visual Studio  Visual StudioにPython IDE機能を提供する     フリーのアドオン Djangoプロジェクト作成機能 クラウドサービス/Webサイトへのデプロイ機 能(Visual Studio Professional以上) 無償のVisual Studio Shellに導入可能 Visual Studio Expressへの導入は不可
  13. 13.  Windows Azure SDK for Python  下記Windows Azureサービス用のPython版 クライアントライブラリ ▪ Azure Storage (Blob/Tale/Queue) ▪ Service Bus ▪ Service Management PythonスクリプトからのWindows Azure各種サービス作成・ 管理  “azure”の名前でPyPIからインストール可能
  14. 14.   インスタンス上のPythonインタプリタは 2.7(32bit) クラウドサービス独特のルール SDKの使用方法 設定ファイルの記述ルール デプロイ処理シーケンス ロールのライフサイクル ローカルファイルシステムの構成 など       WorkerロールのPythonアプリを実装する手段が 標準提供されていない  バッチ処理的なPythonアプリは仮想マシン上に実装
  15. 15.  Linux仮想マシンの初期状態ではスワップ領域が 構成されていない  /etc /waagent.cfgを編集してスワップ領域を構成す る必要 ResourceDisk.EnableSwap=y ResourceDisk.SwapSizeMB=サイズ 一時領域用ディスクにファイルを保存しない     Windows仮想マシンの場合はDドライブ Linux仮想マシンの場合は/dev/sdb 追加のディスク領域が必要な場合はデータディスク を作成してアタッチする
  16. 16.  パッケージの作成方法によりデプロイ後 のPythonインタプリタの構成が異なる  Python Tools for Visual Studioの場合 ▪ 開発段階で作成したvirtualenvの内容をまるごと パッケージに含めてデプロイ  Windows Azure PowerShellの場合 ▪ 必要なライブラリはデプロイ時点に追加でインス トールする、または予めパッケージに含める必要 ▪ Djangoのみ自動でインストールされるがバージョ ンが古い(1.4)
  17. 17.  メンテナンスダウンへの対策  メンテナンスダウンの発生は不可避  一部のインスタンスがダウンしてもサービスの稼 働継続が可能なシステム構成を考える必要  仮想マシンの場合 ▪ 複数のインスタンスによる「可用性セット」を構成して メンテナンス中のサービス全面ダウンを回避  クラウドサービスの場合 ▪ 複数インスタンスで1つのロールを実行することで、各 インスタンスがAzure内部で自動的に異なる障害/更新ド メインに配置される
  18. 18.  Pythonインタプリタは2.7(32bit)  フレームワークギャラリーに登録されて いるDjangoのバージョンが古い(1.4)  easy_install/pipをクラウド上で実行でき ないため、必要なライブラリはネイティ ブ含め全部入りでデプロイする
  19. 19.  Table Storageの検索性能  レコードを一意に特定するためのキーは PartitionKey(パーティショニングの単位) とRowKey(パーティション内での主キー)  パーティション内のインデックスはRowKey のみ、セカンダリインデックス作成不可  パーティション当たりのレコード数や RowKeyの構造を慎重に設計して検索性能を 確保する必要
  20. 20.  1DB当たり最大150GBの容量制限  制限を超える場合はフェデレーションを使う  パッケージ版SQL Serverとの違い  一部のSQLがサポートされない  バックアップ取得方法  スロットリングの対策  可用性維持のため接続が強制切断される場合 がある  接続リトライのロジックを実装する必要
  21. 21.  Linux用Microsoft ODBC Driverのサポー ト対象  64bit版のRHEL/SUSEのみ提供  FreeTDSによる接続  ビルド時に--with-opensslオプションを指定  サポートされるTDSプロトコルのバージョン が古く、SQL Server 2008以降に導入された データ型(datetime2など)を扱えない
  22. 22. SQL Server/SQL Database用のDjango データベースバックエンドライブラリ  PyCon JP 2012 Sprintをきっかけに作 成・公開 
  23. 23.  経緯その1(2012年8月)  PyCon JP 2012 Sprint向けにWindows Azureのハンズオンを準備  参加者はみなMacユーザのためLinux仮想マシ ンを使用  Linux仮想マシンを触るだけではWindows Azureな感じがしないのでSQL Databaseを 使ってもらう方向を検討  Linux+SQL Databaseで使えるDjangoバッ クエンドを探す
  24. 24.  経緯その2(2012年8~9月)  探した結果、django-pyodbcに行き着く  しかしDjango1.3対応を境に放置状態 (Sprint当時の最新Djangoは1.4)、PyPIに も未登録  Django1.4対応を謳うdjango-pyodbcフォー クをGitHubで発見  それをフォークし、Linux用のMicrosoft ODBC Driver for SQL Serverを使えるよう 修正
  25. 25.  経緯その3(2012年10月~2013年1月)  しかしよく見るとフォーク元のDjango1.4対 応がいろいろ不十分であることに気付く  フォーク元のGitHubリポジトリもすでに放 置っぽいことに気付く  仕方なく不足分のDjango1.4対応を自分で始 める
  26. 26.  経緯その4(2013年2月~3月)  Django1.5の正式リリースが近づき、 Python3対応を始めとするDjango1.5対応の ための修正も必要となる  SQL Database上での動作はAzureでテスト  Azure上でのテストを実行し過ぎてクラウド 破産の危機に瀕する ▪ 最大の原因はSQL Databaseの料金計算方法
  27. 27.  経緯その5(2013年4月~5月)  Django1.5対応を終えPyPIに登録 ▪ django-pyodbc-azureの名前で登録 ▪ GitHubにも登録  上記とは別にdjango-pyodbcの名前のパッ ケージがPyPIにあることに気付く ▪ 海外の開発者がGitHubに作成したdjango-pyodbc のDjango1.5対応版フォーク ▪ 対応内容がいろいろ不十分、SQL Database未サ ポート
  28. 28.  経緯その6(2013年5月~6月)  GitHub上でメッセージが届く ▪ 「django-pyodbc-azureとdjango-pyodbcを統合した ら?」  上記の発案者がDjango公式ドキュメント中のリ ンクでdjango-pyodbcのGitHubリポジトリを指 すようpull request、Django公式ドキュメントに 取り込まれる  将来的にdjango-pyodbc-azureをdjangopyodbcに統合することに ▪ django-pyodbcリポジトリのコミッタになる
  29. 29.  経緯その7(2013年6月~7月)  統合先リポジトリのdjango-pyodbcを試して みたらバグだらけでまともに動かない ▪ なぜか自分がそれらのバグを直す羽目に ▪ SQL Databaseにも接続できるように修正  PTVSのチュートリアルを眺めていたら、自分 が登録したdjango-pyodbc-azureが使われて いることに気付く ▪ 「リポジトリを統合する」と言った矢先から django-pyodbc-azureの廃止が難しくなる
  30. 30.  経緯その8(2013年8月~)  Django1.6の正式リリースが近付く ▪ トランザクション管理などDBバックエンドに対す る大幅な変更 ▪ Django1.6対応のため既存コードの全面的な修正が 必要、1.5以前の互換性を捨てざるを得なくなる ▪ django-pyodbcとの統合がますます難しくなる  django-pyodbcとの統合はもう少し先になり そう
  31. 31.  Microsoft ODBC Driverのサポート対象  64bit版のRHEL/SUSEのみ正式サポート  FreeTDSによる接続  ビルド時に--with-opensslオプションを指定  サポートされるTDSプロトコルのバージョンが古 く、SQL Server 2008以降に導入されたデータ 型(datetime2など)を扱えない  同名DBでも作成の度に日割り料金発生  DB再作成を伴う単体テストなどはなるべくSQL Server Express(またはそのLocalDB)で
  32. 32.  IPアドレスの永続期間  プライベートIPアドレスはDHCPで割り当て  仮想マシンを停止した時点で、割り当てられ ていたプライベートIPアドレスは解放される (再起動の場合は解放されない)  プライベートIPアドレスを維持したまま仮想 マシンを停止することも可能、ただし停止後 も引き続き課金される
  33. 33.  Windows Azureの各コンピューティング サービスでPythonを使用可能  Pythonアプリ開発用の各種ツール  Windows Azureの各サービスにそれぞれ 固有の注意するべきポイント  注意点を事前に把握して効率的な開発を
  34. 34.  Windows Azure http://www.windowsazure.com/ja-jp/  Windows Azure Pythonデベロッパーセンター http://www.windowsazure.com/ja-jp/develop/python/  Python Tools for Visual Studio http://pytools.codeplex.com/  Microsoft ODBC Driver for SQL Server http://www.microsoft.com/ja-jp/download/details.aspx?id=36434  azure-sdk-for-python https://github.com/WindowsAzure/azure-sdk-for-python  django-pyodbc-azure https://pypi.python.org/pypi/django-pyodbc-azure/
  35. 35.  ぜひWindows Azure上でも存分に Pythonをお使いください!

×