Pycon APAC 2013 Windows Azure Session

Post on 04-Jul-2015

1.920 views 4 download

description

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

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をお使いください!