狠狠撸

狠狠撸Share a Scribd company logo
高橋 道也
at PyCon APAC 2013
高橋 道也
東洋ソフトウェアエンジニアリング株式
会社勤務
? Windows Azureの導入支援業務を担当
?
?
Pycon APAC 2013 Windows Azure Session
Pycon APAC 2013 Windows Azure Session
Pycon APAC 2013 Windows Azure Session
?

汎用IaaS
? Windows Server (2008R2/2012)
? SQL Server導入済み仮想マシンなどの選択も可能

? Linux (CentOS/Ubuntu/SUSE)
? VM DEPOTより各種OSSインストール済み仮想マシ
ンの選択も可能

?
?

OSレベルで柔軟にカスタマイズ可能
オートスケール機能が利用可能
Pycon APAC 2013 Windows Azure Session
汎用PaaS
専用SDKでアプリケーションをパッケージン
グし、クラウド専用構成のWindows Server
インスタンスにデプロイ
? 柔軟なスケーリング
? 状態確認のためのOSレベルの操作は可能
? Webロール/Workerロール
? DjangoアプリケーションをWebロールとし
てデプロイ可能
?
?

? IIS上のFastCGIプロセスとして動作
Pycon APAC 2013 Windows Azure Session
?
?
?
?
?
?
?

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

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

?

フェデレーション構成によるスケーリン
グが可能
Pycon APAC 2013 Windows Azure Session
?

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

?

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

?

独自のDNSサーバを仮想ネットワーク内
に設定することが可能
Pycon APAC 2013 Windows Azure Session
?

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

?

Media Service

動画のエンコード?配信
?

HDInsight

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

Service Bus

非同期メッセージング
?
?
?

Cache Service
CDN
ストア(サードパーティから提供のサービス)
ClearDB(MySQLサービス)、SendGrid(メール送信サービス)、
Engine Yard(RoR PaaS)など

など
Pycon APAC 2013 Windows Azure Session
?

管理ポータル
? 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からインストール可能
Pycon APAC 2013 Windows Azure Session
?
?

インスタンス上のPythonインタプリタは
2.7(32bit)
クラウドサービス独特のルール
SDKの使用方法
設定ファイルの記述ルール
デプロイ処理シーケンス
ロールのライフサイクル
ローカルファイルシステムの構成
など
?
?
?
?
?

?

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

Linux仮想マシンの初期状態ではスワップ領域が
構成されていない

? /etc /waagent.cfgを編集してスワップ領域を構成す

る必要

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

一時領域用ディスクにファイルを保存しない

?

?
?
?

Windows仮想マシンの場合はDドライブ
Linux仮想マシンの場合は/dev/sdb
追加のディスク領域が必要な場合はデータディスク
を作成してアタッチする
?

パッケージの作成方法によりデプロイ後
の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をdjangopyodbcに統合することに
? 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をお使いください!

More Related Content

Pycon APAC 2013 Windows Azure Session