Pycon APAC 2013 Windows Azure Session

46
高橋 道也 at PyCon APAC 2013

description

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

Transcript of Pycon APAC 2013 Windows Azure Session

Page 1: Pycon APAC 2013 Windows Azure Session

高橋 道也 at PyCon APAC 2013

Page 2: Pycon APAC 2013 Windows Azure Session

高橋 道也 東洋ソフトウェアエンジニアリング株式会社勤務

Windows Azureの導入支援業務を担当

Page 3: Pycon APAC 2013 Windows Azure Session
Page 4: Pycon APAC 2013 Windows Azure Session
Page 5: Pycon APAC 2013 Windows Azure Session
Page 6: Pycon APAC 2013 Windows Azure Session

汎用IaaS

Windows Server (2008R2/2012)

▪ SQL Server導入済み仮想マシンなどの選択も可能

Linux (CentOS/Ubuntu/SUSE)

▪ VM DEPOTより各種OSSインストール済み仮想マシンの選択も可能

OSレベルで柔軟にカスタマイズ可能 オートスケール機能が利用可能

Page 7: Pycon APAC 2013 Windows Azure Session
Page 8: Pycon APAC 2013 Windows Azure Session

汎用PaaS 専用SDKでアプリケーションをパッケージングし、クラウド専用構成のWindows Serverインスタンスにデプロイ

柔軟なスケーリング 状態確認のためのOSレベルの操作は可能 Webロール/Workerロール DjangoアプリケーションをWebロールとしてデプロイ可能 IIS上のFastCGIプロセスとして動作

Page 9: Pycon APAC 2013 Windows Azure Session
Page 10: Pycon APAC 2013 Windows Azure Session

Webアプリケーション特化型のPaaS GitやFTPなど一般的なツールでアプリケーションをデプロイ可能

最大10サイトまでの無料枠 OSレベルの操作は不可 スケーリング性能上の制限 Django/Flaskを標準でサポート 他のWSGI準拠フレームワークも使用可能

Page 11: Pycon APAC 2013 Windows Azure Session
Page 12: Pycon APAC 2013 Windows Azure Session

コンピューティングサービスで処理する各種データを永続保管 Blob Storage アプリケーションで使用する各種ファイル、仮想マシンのディスクイメージ

Table Storage アプリケーションから使用するKVS型分散データストア

Queue Storage インスタンス間非同期通信用メッセージキュー

Page 13: Pycon APAC 2013 Windows Azure Session
Page 14: Pycon APAC 2013 Windows Azure Session

SQL ServerベースのRDBサービス ODBCでアプリケーションから接続

Pythonでは以下の構成で接続可能 Windows

pyodbcまたはpywin32+SQL Server Native Client

Linux pyodbc+unixODBC+Microsoft ODBC Driver for SQL ServerまたはFreeTDS

フェデレーション構成によるスケーリングが可能

Page 15: Pycon APAC 2013 Windows Azure Session
Page 16: Pycon APAC 2013 Windows Azure Session

クラウド上に仮想的なプライベートネットワークを作成、仮想マシン間のセキュアな通信

IPSec VPNによるオンプレミスネットワークとの相互接続が可能

独自のDNSサーバを仮想ネットワーク内に設定することが可能

Page 17: Pycon APAC 2013 Windows Azure Session
Page 18: Pycon APAC 2013 Windows Azure Session

Mobile Service モバイルアプリケーションバックエンド

Media Service 動画のエンコード・配信

HDInsight Hadoopベースのビッグデータ処理

Service Bus 非同期メッセージング

Cache Service CDN ストア(サードパーティから提供のサービス)

ClearDB(MySQLサービス)、SendGrid(メール送信サービス)、 Engine Yard(RoR PaaS)など

など

Page 19: Pycon APAC 2013 Windows Azure Session
Page 20: Pycon APAC 2013 Windows Azure Session

管理ポータル

WebブラウザベースのGUI管理ツール

各種サービスの作成・管理

Windows Azure SDK

クラウドサービス開発キット

▪ クラウドサービスエミュレータ

▪ デプロイ用パッケージ作成ツール

Page 21: Pycon APAC 2013 Windows Azure Session

Windows Azure PowerShell

コマンドラインからWindows Azure管理操作

クラウドサービスプロジェクト作成機能

Django Webロール作成機能

▪ Add-AzureDjangoWebRoleコマンド

クロスプラットフォームCLI

コマンドラインからWindows Azure管理操作

Windows・Mac・Linuxで利用可能

Page 22: Pycon APAC 2013 Windows Azure Session

Python Tools for Visual Studio

Visual StudioにPython IDE機能を提供するフリーのアドオン

Djangoプロジェクト作成機能

クラウドサービス/Webサイトへのデプロイ機能(Visual Studio Professional以上)

無償のVisual Studio Shellに導入可能

Visual Studio Expressへの導入は不可

Page 23: Pycon APAC 2013 Windows Azure Session

Windows Azure SDK for Python

下記Windows Azureサービス用のPython版クライアントライブラリ

▪ Azure Storage (Blob/Tale/Queue)

▪ Service Bus

▪ Service Management

PythonスクリプトからのWindows Azure各種サービス作成・管理

“azure”の名前でPyPIからインストール可能

Page 24: Pycon APAC 2013 Windows Azure Session
Page 25: Pycon APAC 2013 Windows Azure Session

インスタンス上のPythonインタプリタは2.7(32bit)

クラウドサービス独特のルール SDKの使用方法 設定ファイルの記述ルール デプロイ処理シーケンス ロールのライフサイクル ローカルファイルシステムの構成 など

WorkerロールのPythonアプリを実装する手段が標準提供されていない バッチ処理的なPythonアプリは仮想マシン上に実装

Page 26: Pycon APAC 2013 Windows Azure Session

Linux仮想マシンの初期状態ではスワップ領域が構成されていない /etc/waagent.cfgを編集してスワップ領域を構成する必要

一時領域用ディスクにファイルを保存しない Windows仮想マシンの場合はDドライブ

Linux仮想マシンの場合は/dev/sdb

追加のディスク領域が必要な場合はデータディスクを作成してアタッチする

ResourceDisk.EnableSwap=y ResourceDisk.SwapSizeMB=サイズ

Page 27: Pycon APAC 2013 Windows Azure Session

パッケージの作成方法によりデプロイ後のPythonインタプリタの構成が異なる

Python Tools for Visual Studioの場合

▪ 開発段階で作成したvirtualenvの内容をまるごとパッケージに含めてデプロイ

Windows Azure PowerShellの場合

▪ 必要なライブラリはデプロイ時点に追加でインストールする、または予めパッケージに含める必要

▪ Djangoのみ自動でインストールされるがバージョンが古い(1.4)

Page 28: Pycon APAC 2013 Windows Azure Session

メンテナンスダウンへの対策 メンテナンスダウンの発生は不可避

一部のインスタンスがダウンしてもサービスの稼働継続が可能なシステム構成を考える必要

仮想マシンの場合 ▪ 複数のインスタンスによる「可用性セット」を構成してメンテナンス中のサービス全面ダウンを回避

クラウドサービスの場合 ▪ 複数インスタンスで1つのロールを実行することで、各インスタンスがAzure内部で自動的に異なる障害/更新ドメインに配置される

Page 29: Pycon APAC 2013 Windows Azure Session

Pythonインタプリタは2.7(32bit)

フレームワークギャラリーに登録されているDjangoのバージョンが古い(1.4)

easy_install/pipをクラウド上で実行できないため、必要なライブラリはネイティブ含め全部入りでデプロイする

Page 30: Pycon APAC 2013 Windows Azure Session

Table Storageの検索性能

レコードを一意に特定するためのキーはPartitionKey(パーティショニングの単位)とRowKey(パーティション内での主キー)

パーティション内のインデックスはRowKeyのみ、セカンダリインデックス作成不可

パーティション当たりのレコード数やRowKeyの構造を慎重に設計して検索性能を確保する必要

Page 31: Pycon APAC 2013 Windows Azure Session

1DB当たり最大150GBの容量制限

制限を超える場合はフェデレーションを使う

パッケージ版SQL Serverとの違い

一部のSQLがサポートされない

バックアップ取得方法

スロットリングの対策

可用性維持のため接続が強制切断される場合がある

接続リトライのロジックを実装する必要

Page 32: Pycon APAC 2013 Windows Azure Session

Linux用Microsoft ODBC Driverのサポート対象

64bit版のRHEL/SUSEのみ提供

FreeTDSによる接続

ビルド時に--with-opensslオプションを指定

サポートされるTDSプロトコルのバージョンが古く、SQL Server 2008以降に導入されたデータ型(datetime2など)を扱えない

Page 33: Pycon APAC 2013 Windows Azure Session

SQL Server/SQL Database用のDjangoデータベースバックエンドライブラリ

PyCon JP 2012 Sprintをきっかけに作成・公開

Page 34: Pycon APAC 2013 Windows Azure Session

経緯その1(2012年8月) PyCon JP 2012 Sprint向けにWindows

Azureのハンズオンを準備

参加者はみなMacユーザのためLinux仮想マシンを使用

Linux仮想マシンを触るだけではWindows Azureな感じがしないのでSQL Databaseを使ってもらう方向を検討

Linux+SQL Databaseで使えるDjangoバックエンドを探す

Page 35: Pycon APAC 2013 Windows Azure Session

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

Page 36: Pycon APAC 2013 Windows Azure Session

経緯その3(2012年10月~2013年1月)

しかしよく見るとフォーク元のDjango1.4対応がいろいろ不十分であることに気付く

フォーク元のGitHubリポジトリもすでに放置っぽいことに気付く

仕方なく不足分のDjango1.4対応を自分で始める

Page 37: Pycon APAC 2013 Windows Azure Session

経緯その4(2013年2月~3月)

Django1.5の正式リリースが近づき、Python3対応を始めとするDjango1.5対応のための修正も必要となる

SQL Database上での動作はAzureでテスト

Azure上でのテストを実行し過ぎてクラウド破産の危機に瀕する

▪ 最大の原因はSQL Databaseの料金計算方法

Page 38: Pycon APAC 2013 Windows Azure Session

経緯その5(2013年4月~5月)

Django1.5対応を終えPyPIに登録

▪ django-pyodbc-azureの名前で登録

▪ GitHubにも登録

上記とは別にdjango-pyodbcの名前のパッケージがPyPIにあることに気付く

▪ 海外の開発者がGitHubに作成したdjango-pyodbcのDjango1.5対応版フォーク

▪ 対応内容がいろいろ不十分、SQL Database未サポート

Page 39: Pycon APAC 2013 Windows Azure Session

経緯その6(2013年5月~6月) GitHub上でメッセージが届く

▪ 「django-pyodbc-azureとdjango-pyodbcを統合したら?」

上記の発案者がDjango公式ドキュメント中のリンクでdjango-pyodbcのGitHubリポジトリを指すようpull request、Django公式ドキュメントに取り込まれる

将来的にdjango-pyodbc-azureをdjango-pyodbcに統合することに ▪ django-pyodbcリポジトリのコミッタになる

Page 40: Pycon APAC 2013 Windows Azure Session

経緯その7(2013年6月~7月)

統合先リポジトリのdjango-pyodbcを試してみたらバグだらけでまともに動かない

▪ なぜか自分がそれらのバグを直す羽目に

▪ SQL Databaseにも接続できるように修正

PTVSのチュートリアルを眺めていたら、自分が登録したdjango-pyodbc-azureが使われていることに気付く

▪ 「リポジトリを統合する」と言った矢先からdjango-pyodbc-azureの廃止が難しくなる

Page 41: Pycon APAC 2013 Windows Azure Session

経緯その8(2013年8月~)

Django1.6の正式リリースが近付く

▪ トランザクション管理などDBバックエンドに対する大幅な変更

▪ Django1.6対応のため既存コードの全面的な修正が必要、1.5以前の互換性を捨てざるを得なくなる

▪ django-pyodbcとの統合がますます難しくなる

django-pyodbcとの統合はもう少し先になりそう

Page 42: Pycon APAC 2013 Windows Azure Session

Microsoft ODBC Driverのサポート対象

64bit版のRHEL/SUSEのみ正式サポート

FreeTDSによる接続

ビルド時に--with-opensslオプションを指定

サポートされるTDSプロトコルのバージョンが古く、SQL Server 2008以降に導入されたデータ型(datetime2など)を扱えない

同名DBでも作成の度に日割り料金発生

DB再作成を伴う単体テストなどはなるべくSQL Server Express(またはそのLocalDB)で

Page 43: Pycon APAC 2013 Windows Azure Session

IPアドレスの永続期間

プライベートIPアドレスはDHCPで割り当て

仮想マシンを停止した時点で、割り当てられていたプライベートIPアドレスは解放される(再起動の場合は解放されない)

プライベートIPアドレスを維持したまま仮想マシンを停止することも可能、ただし停止後も引き続き課金される

Page 44: Pycon APAC 2013 Windows Azure Session

Windows Azureの各コンピューティングサービスでPythonを使用可能

Pythonアプリ開発用の各種ツール

Windows Azureの各サービスにそれぞれ固有の注意するべきポイント

注意点を事前に把握して効率的な開発を

Page 45: Pycon APAC 2013 Windows Azure Session

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/

Page 46: Pycon APAC 2013 Windows Azure Session

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