Pycon APAC 2013 Windows Azure Session
-
Author
microsoft-openness-japan -
Category
Technology
-
view
1.919 -
download
4
Embed Size (px)
description
Transcript of Pycon APAC 2013 Windows Azure Session

高橋 道也 at PyCon APAC 2013

高橋 道也 東洋ソフトウェアエンジニアリング株式会社勤務
Windows Azureの導入支援業務を担当




汎用IaaS
Windows Server (2008R2/2012)
▪ SQL Server導入済み仮想マシンなどの選択も可能
Linux (CentOS/Ubuntu/SUSE)
▪ VM DEPOTより各種OSSインストール済み仮想マシンの選択も可能
OSレベルで柔軟にカスタマイズ可能 オートスケール機能が利用可能


汎用PaaS 専用SDKでアプリケーションをパッケージングし、クラウド専用構成のWindows Serverインスタンスにデプロイ
柔軟なスケーリング 状態確認のためのOSレベルの操作は可能 Webロール/Workerロール DjangoアプリケーションをWebロールとしてデプロイ可能 IIS上のFastCGIプロセスとして動作


Webアプリケーション特化型のPaaS GitやFTPなど一般的なツールでアプリケーションをデプロイ可能
最大10サイトまでの無料枠 OSレベルの操作は不可 スケーリング性能上の制限 Django/Flaskを標準でサポート 他のWSGI準拠フレームワークも使用可能


コンピューティングサービスで処理する各種データを永続保管 Blob Storage アプリケーションで使用する各種ファイル、仮想マシンのディスクイメージ
Table Storage アプリケーションから使用するKVS型分散データストア
Queue Storage インスタンス間非同期通信用メッセージキュー


SQL ServerベースのRDBサービス ODBCでアプリケーションから接続
Pythonでは以下の構成で接続可能 Windows
pyodbcまたはpywin32+SQL Server Native Client
Linux pyodbc+unixODBC+Microsoft ODBC Driver for SQL ServerまたはFreeTDS
フェデレーション構成によるスケーリングが可能


クラウド上に仮想的なプライベートネットワークを作成、仮想マシン間のセキュアな通信
IPSec VPNによるオンプレミスネットワークとの相互接続が可能
独自のDNSサーバを仮想ネットワーク内に設定することが可能


Mobile Service モバイルアプリケーションバックエンド
Media Service 動画のエンコード・配信
HDInsight Hadoopベースのビッグデータ処理
Service Bus 非同期メッセージング
Cache Service CDN ストア(サードパーティから提供のサービス)
ClearDB(MySQLサービス)、SendGrid(メール送信サービス)、 Engine Yard(RoR PaaS)など
など


管理ポータル
WebブラウザベースのGUI管理ツール
各種サービスの作成・管理
Windows Azure SDK
クラウドサービス開発キット
▪ クラウドサービスエミュレータ
▪ デプロイ用パッケージ作成ツール

Windows Azure PowerShell
コマンドラインからWindows Azure管理操作
クラウドサービスプロジェクト作成機能
Django Webロール作成機能
▪ Add-AzureDjangoWebRoleコマンド
クロスプラットフォームCLI
コマンドラインからWindows Azure管理操作
Windows・Mac・Linuxで利用可能

Python Tools for Visual Studio
Visual StudioにPython IDE機能を提供するフリーのアドオン
Djangoプロジェクト作成機能
クラウドサービス/Webサイトへのデプロイ機能(Visual Studio Professional以上)
無償のVisual Studio Shellに導入可能
Visual Studio Expressへの導入は不可

Windows Azure SDK for Python
下記Windows Azureサービス用のPython版クライアントライブラリ
▪ Azure Storage (Blob/Tale/Queue)
▪ Service Bus
▪ Service Management
PythonスクリプトからのWindows Azure各種サービス作成・管理
“azure”の名前でPyPIからインストール可能


インスタンス上のPythonインタプリタは2.7(32bit)
クラウドサービス独特のルール SDKの使用方法 設定ファイルの記述ルール デプロイ処理シーケンス ロールのライフサイクル ローカルファイルシステムの構成 など
WorkerロールのPythonアプリを実装する手段が標準提供されていない バッチ処理的なPythonアプリは仮想マシン上に実装

Linux仮想マシンの初期状態ではスワップ領域が構成されていない /etc/waagent.cfgを編集してスワップ領域を構成する必要
一時領域用ディスクにファイルを保存しない Windows仮想マシンの場合はDドライブ
Linux仮想マシンの場合は/dev/sdb
追加のディスク領域が必要な場合はデータディスクを作成してアタッチする
ResourceDisk.EnableSwap=y ResourceDisk.SwapSizeMB=サイズ

パッケージの作成方法によりデプロイ後のPythonインタプリタの構成が異なる
Python Tools for Visual Studioの場合
▪ 開発段階で作成したvirtualenvの内容をまるごとパッケージに含めてデプロイ
Windows Azure PowerShellの場合
▪ 必要なライブラリはデプロイ時点に追加でインストールする、または予めパッケージに含める必要
▪ Djangoのみ自動でインストールされるがバージョンが古い(1.4)

メンテナンスダウンへの対策 メンテナンスダウンの発生は不可避
一部のインスタンスがダウンしてもサービスの稼働継続が可能なシステム構成を考える必要
仮想マシンの場合 ▪ 複数のインスタンスによる「可用性セット」を構成してメンテナンス中のサービス全面ダウンを回避
クラウドサービスの場合 ▪ 複数インスタンスで1つのロールを実行することで、各インスタンスがAzure内部で自動的に異なる障害/更新ドメインに配置される

Pythonインタプリタは2.7(32bit)
フレームワークギャラリーに登録されているDjangoのバージョンが古い(1.4)
easy_install/pipをクラウド上で実行できないため、必要なライブラリはネイティブ含め全部入りでデプロイする

Table Storageの検索性能
レコードを一意に特定するためのキーはPartitionKey(パーティショニングの単位)とRowKey(パーティション内での主キー)
パーティション内のインデックスはRowKeyのみ、セカンダリインデックス作成不可
パーティション当たりのレコード数やRowKeyの構造を慎重に設計して検索性能を確保する必要

1DB当たり最大150GBの容量制限
制限を超える場合はフェデレーションを使う
パッケージ版SQL Serverとの違い
一部のSQLがサポートされない
バックアップ取得方法
スロットリングの対策
可用性維持のため接続が強制切断される場合がある
接続リトライのロジックを実装する必要

Linux用Microsoft ODBC Driverのサポート対象
64bit版のRHEL/SUSEのみ提供
FreeTDSによる接続
ビルド時に--with-opensslオプションを指定
サポートされるTDSプロトコルのバージョンが古く、SQL Server 2008以降に導入されたデータ型(datetime2など)を扱えない

SQL Server/SQL Database用のDjangoデータベースバックエンドライブラリ
PyCon JP 2012 Sprintをきっかけに作成・公開

経緯その1(2012年8月) PyCon JP 2012 Sprint向けにWindows
Azureのハンズオンを準備
参加者はみなMacユーザのためLinux仮想マシンを使用
Linux仮想マシンを触るだけではWindows Azureな感じがしないのでSQL Databaseを使ってもらう方向を検討
Linux+SQL Databaseで使えるDjangoバックエンドを探す

経緯その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を使えるよう修正

経緯その3(2012年10月~2013年1月)
しかしよく見るとフォーク元のDjango1.4対応がいろいろ不十分であることに気付く
フォーク元のGitHubリポジトリもすでに放置っぽいことに気付く
仕方なく不足分のDjango1.4対応を自分で始める

経緯その4(2013年2月~3月)
Django1.5の正式リリースが近づき、Python3対応を始めとするDjango1.5対応のための修正も必要となる
SQL Database上での動作はAzureでテスト
Azure上でのテストを実行し過ぎてクラウド破産の危機に瀕する
▪ 最大の原因はSQL Databaseの料金計算方法

経緯その5(2013年4月~5月)
Django1.5対応を終えPyPIに登録
▪ django-pyodbc-azureの名前で登録
▪ GitHubにも登録
上記とは別にdjango-pyodbcの名前のパッケージがPyPIにあることに気付く
▪ 海外の開発者がGitHubに作成したdjango-pyodbcのDjango1.5対応版フォーク
▪ 対応内容がいろいろ不十分、SQL Database未サポート

経緯その6(2013年5月~6月) GitHub上でメッセージが届く
▪ 「django-pyodbc-azureとdjango-pyodbcを統合したら?」
上記の発案者がDjango公式ドキュメント中のリンクでdjango-pyodbcのGitHubリポジトリを指すようpull request、Django公式ドキュメントに取り込まれる
将来的にdjango-pyodbc-azureをdjango-pyodbcに統合することに ▪ django-pyodbcリポジトリのコミッタになる

経緯その7(2013年6月~7月)
統合先リポジトリのdjango-pyodbcを試してみたらバグだらけでまともに動かない
▪ なぜか自分がそれらのバグを直す羽目に
▪ SQL Databaseにも接続できるように修正
PTVSのチュートリアルを眺めていたら、自分が登録したdjango-pyodbc-azureが使われていることに気付く
▪ 「リポジトリを統合する」と言った矢先からdjango-pyodbc-azureの廃止が難しくなる

経緯その8(2013年8月~)
Django1.6の正式リリースが近付く
▪ トランザクション管理などDBバックエンドに対する大幅な変更
▪ Django1.6対応のため既存コードの全面的な修正が必要、1.5以前の互換性を捨てざるを得なくなる
▪ django-pyodbcとの統合がますます難しくなる
django-pyodbcとの統合はもう少し先になりそう

Microsoft ODBC Driverのサポート対象
64bit版のRHEL/SUSEのみ正式サポート
FreeTDSによる接続
ビルド時に--with-opensslオプションを指定
サポートされるTDSプロトコルのバージョンが古く、SQL Server 2008以降に導入されたデータ型(datetime2など)を扱えない
同名DBでも作成の度に日割り料金発生
DB再作成を伴う単体テストなどはなるべくSQL Server Express(またはそのLocalDB)で

IPアドレスの永続期間
プライベートIPアドレスはDHCPで割り当て
仮想マシンを停止した時点で、割り当てられていたプライベートIPアドレスは解放される(再起動の場合は解放されない)
プライベートIPアドレスを維持したまま仮想マシンを停止することも可能、ただし停止後も引き続き課金される

Windows Azureの各コンピューティングサービスでPythonを使用可能
Pythonアプリ開発用の各種ツール
Windows Azureの各サービスにそれぞれ固有の注意するべきポイント
注意点を事前に把握して効率的な開発を

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/

ぜひWindows Azure上でも存分にPythonをお使いください!