Azure SDK for Python
Azure SDK for Pythonとは
[[Python]] から Azure のリソースを操作する公式SDKです。[[boto3(AWS SDK for Python)]] が1つのパッケージで全サービスを扱うのに対し、Azure SDK はサービスごとにパッケージが分かれているのが大きな違いです。
pip install azure-identity azure-mgmt-resource azure-storage-blob
| パッケージの系統 | 役割 |
|---|---|
azure-identity | 認証。どのSDKからも共通で使う |
azure-mgmt-* | リソースの管理操作(作成・一覧・削除) |
| サービス別 | データ面の操作(azure-storage-blob など) |
必要なものだけを入れる設計のため依存が小さく保てる一方、「管理操作」と「データ操作」でパッケージが別という構造を最初に理解しておく必要があります。ストレージのコンテナを作るのは azure-mgmt-storage、その中のファイルを読み書きするのは azure-storage-blob、という具合です。
認証はazure-identityに集約する
認証はどのサービスでも azure-identity の資格情報オブジェクトを渡す形で統一されています。
from azure.identity import DefaultAzureCredential
from azure.mgmt.resource import ResourceManagementClient
credential = DefaultAzureCredential()
client = ResourceManagementClient(credential, subscription_id)
for group in client.resource_groups.list():
print(group.name)
DefaultAzureCredential は、環境変数・開発者のログイン状態・マネージドIDなどを順に試す仕組みです。ローカルでは開発者のログイン、本番ではマネージドIDが選ばれるため、コードを変えずに環境だけを切り替えられます。
本番でマネージドIDを使えば、資格情報そのものを配置せずに済みます。[[シークレット管理]] の観点では、鍵を安全に保管するより鍵を持たない構成にするほうが確実です。
実務での注意点
- サブスクリプションIDが必須 — 管理系クライアントはほぼ必ず必要です。環境変数で渡す設計にしておくと環境の切り替えが楽になります
- 一覧はイテレータで返る — 内部でページングされ、繰り返し処理の中で追加取得が起きます。全件をリストへ展開すると待ち時間が集中します
- APIバージョン —
azure-mgmt-*はサービスのAPIバージョンに紐づきます。ドキュメントとパッケージの版が食い違うと、存在しない引数を渡して失敗します - クラウド差異 — [[クラウドコンピューティング]] の概念は共通でも、権限モデルや命名はAWSと異なります。同じ処理を両クラウドで書くときは、呼び出し口を抽象化して差異を1箇所へ閉じ込めます
関連技術とのつながり
- [[Python]] — 実装言語。運用スクリプトから呼ぶ用途が多い
- [[クラウドコンピューティング]] — 操作対象。概念は共通でも権限モデルは各社で異なる
- [[シークレット管理]] — マネージドIDで「鍵を持たない」構成にできる
- [[boto3(AWS SDK for Python)]] — 同じ立ち位置のAWS版。パッケージ構成と認証の作りが対照的
Q: Azure SDK for Python のパッケージ構成の特徴はどれ?
- [ ] 1つのパッケージで全サービスを扱う
- [x] 認証・管理操作・データ操作がサービスごとのパッケージに分かれている
- [ ] 認証専用のパッケージは存在しない
解説: `azure-identity` が認証、`azure-mgmt-*` が管理操作、サービス別パッケージがデータ操作を担う構成です。
Q: `DefaultAzureCredential` の利点はどれ?
- [x] 環境に応じて資格情報の取得方法を自動で選ぶため、コードを変えずに環境を切り替えられる
- [ ] 認証を省略できる
- [ ] アクセスキーをコードへ埋め込みやすくなる
解説: 環境変数・開発者のログイン・マネージドIDなどを順に試すため、ローカルと本番で同じコードが使えます。
Q: 本番のAzure環境で資格情報の配置を避ける手段はどれ?
- [ ] 設定ファイルにキーを書いて権限を絞る
- [x] マネージドIDを使う
- [ ] キーを暗号化してリポジトリへ入れる
解説: マネージドIDを使えば資格情報そのものを配置せずに済み、管理対象を減らせます。