46
高橋 道也 at PyCon APAC 2013

Pycon APAC 2013 Windows Azure Session

Embed Size (px)

DESCRIPTION

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

Citation preview

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