【Azure】Blob StorageのファイルをPythonで参照する

当ページには広告が含まれています。

こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!

こんな方におすすめ!
  • Azure Blob Storageに保存されたデータをPythonで参照したい。
目次

【Microsoft】 Azure Blob Storageとは

Azure Blob Storage公式:https://azure.microsoft.com/ja-jp/products/storage/blobs

Azure Blob Storage(Azure Binary Large Objects Storage)とは、Microsoft Azureのオブジェクトストレージサービスです。オブジェクトストレージは、大量のデータ(CSV、画像、ビデオ、テキストファイルなど)を効率的かつ信頼度の高い方法で保存・管理・アクセスするための仕組みです。

【事前準備】 Azure Blob Storage内にファイルを配置

本記事では、PythonでAzure Blob Storage内のファイルを読み込む方法について解説します。

Pythonでのファイル読込時、Azure上で取得できる以下情報を渡す必要があるため、事前に確認しましょう。

  • 前提条件
  • ストレージアカウント名
  • アクセスキー
  • コンテナ名
  • 【任意】対象ファイルのSAS発行

前提条件

Pythonを用いたAzure Blob Storage内のファイル参照に際して、以下の前提条件を満たす必要があります。

  • アクティブなサブスクリプションを持つAzureアカウントを保有していること
  • Azure Storageアカウントを保有していること
  • Python3.6を活用していること

ストレージアカウント名

Pythonを用いたAzure Blob Storage内のファイル読込に際して、「ストレージアカウント名」をPythonに渡す必要があります。読込対象ファイルが保存されたストレージアカウント名をお手元にメモしておきましょう。

アクセスキー

Pythonを用いたAzure Blob Storage内のファイル読込に際して、「アクセスキー」も必要です。読込対象ファイルが保存されたストレージアカウントのアクセスキーをお手元にメモしましょう。

コンテナ名

Pythonを用いたAzure Blob Storage内のファイル読込に際して、「コンテナ名」も必要です。読込対象ファイルが保存されたのコンテナ名も併せてメモしておきます。

【任意】対象ファイルのSAS発行

Azure Blob Storageに保存されたコンテナおよびその内部に保存されたファイルには、一意のURL(BLOB SAS URL)が割り当てられます。それをもとに対象ファイルの参照も可能です。

※後述するPythonでのファイル参照方法は、BLOB SAS URLもPythonコードで併せて発行するため、現時点でSASの発行は任意です。参考として、BLOB SAS URLを手動で発行する方法も併せて解説します。

コンテナ内のファイルを選択して「SASの生成」をクリック

対象ファイルが保存されたコンテナを選択し、対象ファイル右側の・・・をクリックし、「SASの生成」を選択します。

BLOB SAS URLを取得

最下部のBLOB SAS URLをコピーします。こちらを用いてファイルへの参照が可能になります。

【Azure】Blob Storageの保存ファイルをPythonで参照する方法

Pythonを用いたBlob Storage内のファイル参照を実践します。

以下の手順で実行していきましょう。

  • Pythonパッケージのインストール
  • 認証情報を設定
  • コンテナ内のディレクトリ参照
  • BLOB SAS URLの生成
  • 【実践例】CSVファイルを参照

Pythonパッケージのインストール

azure-storage-blobを用いてAzure Storage Accountの認証情報を設定します。お手元のアクティブプロンプトを用いてインストールしておきましょう。

pip install azure-storage-blob

Azure Storage Accountの認証情報を設定

Azure Storage Accountの認証情報を指定するためのコードをPythonファイル先頭に配置しましょう。加えて、前述でメモしたストレージアカウント名アクセスキーコンテナ名を書き換えましょう。

from azure.storage.blob import BlobServiceClient, generate_blob_sas, BlobSasPermissions
from datetime import datetime, timedelta
import pandas as pd

# ====================================================================
# 認証情報を記述
# ==================================================================== 

# ストレージアカウント名
STORAGE_ACCOUNT_NAME = "<ストレージアカウント名を入力>"

# アクセスキー
STORAGE_ACCESS_KEY   = "<アクセスキーを入力>"

# コンテナ名
CONTAINER_NAME       = "<コンテナ名を入力>"

# ====================================================================
# 認証情報を用いたオブジェクト作成
# ==================================================================== 

CONNECT_STR         = 'DefaultEndpointsProtocol=https;AccountName=' + STORAGE_ACCOUNT_NAME + ';AccountKey=' + STORAGE_ACCESS_KEY+ ';EndpointSuffix=core.windows.net'
blob_service_client = BlobServiceClient.from_connection_string(CONNECT_STR)
container_client    = blob_service_client.get_container_client(CONTAINER_NAME)

コンテナ内のディレクトリ参照

前述で記述したcontainer_clientを用いると、コンテナ内のディレクトリ一覧が確認できます。

以下のコードを実行しましょう。

コード

# ====================================================================
# コンテナ内のディレクトリ参照
# ==================================================================== 

# コンテナ内のファイルリスト
blob_list = []

for blob_i in container_client.list_blobs():
    blob_list.append(blob_i.name)
    
# 出力
print(blob_list)

出力イメージ

指定したコンテナ名の内部に保存されたフォルダおよびファイルが一覧表示されます。

# 出力イメージ
# ['xxxxxx.pdf', 
#  'ooooo1.csv',
#  'ooooo2.csv',
#  'ooooo3.csv']

BLOB SAS URLの生成

前述で一覧表示したフォルダやファイルのBLOB SAS URLを取得します。以下のコードを実行しましょう。

コード

# ====================================================================
# BLOB SAS URLの生成
# ==================================================================== 

# BLOB SAS URLリスト
sas_list = []

for blob_i in blob_list:
    
    # SAS生成
    sas_i = generate_blob_sas(
                account_name   = STORAGE_ACCOUNT_NAME,                    # ストレージアカウント名
                container_name = CONTAINER_NAME,                          # コンテナ名
                blob_name      = blob_i,                                  # コンテナ内のファイルパス
                account_key    = STORAGE_ACCESS_KEY,                      # アクセスキー
                permission     = BlobSasPermissions(read=True),           # 参照権限
                expiry         = datetime.utcnow() + timedelta(hours=1),  # 期限
    )
    
    # SAS URL発行
    sas_url = 'https://' + STORAGE_ACCOUNT_NAME + '.blob.core.windows.net/' + CONTAINER_NAME + '/' + blob_i + '?' + sas_i
    
    # リストに格納
    sas_list.append({"FILENAME":blob_i, "BLOB_SAS_URL": sas_url})

出力イメージ

上記実行後sas_listを出力すると、ファイル名とそれに紐づくBLOB SAS URLが確認できます。

# 出力
print(sas_list)

# 出力イメージ
# [{'FILENAME': 'xxxxxx.pdf',
#   'BLOB_SAS_URL': 'https://storage-name.blob.core.windows.net/xxxxxxx'},

#  {'FILENAME': 'ooooo1.csv',
#   'BLOB_SAS_URL': 'https://storage-name.blob.core.windows.net/ooooooo'}]

【実践例】CSVファイルを参照

最後に、上記で取得したBLOB SAS URLを用いてPython環境でファイルを参照してみましょう。

CSVファイルの参照例を以下に示します。BLOB_SAS_URL_CSVにCSVファイルのURLを指定した上でコードを実行しましょう。

# ====================================================================
# CSVファイルを読み込む
# ==================================================================== 

# BLOB SAS URLを指定(CSV)
BLOB_SAS_URL_CSV = "https://......................"

# CSVファイルを読込
df = pd.read_csv(BLOB_SAS_URL_CSV)

【Azure × Python】Blob Storageファイル参照コードまとめ

本日ご紹介したコードをまとめて再掲します。

from azure.storage.blob import BlobServiceClient, generate_blob_sas, BlobSasPermissions
from datetime import datetime, timedelta
import pandas as pd

# ====================================================================
# 認証情報を記述
# ==================================================================== 

# ストレージアカウント名
STORAGE_ACCOUNT_NAME = "<ストレージアカウント名を入力>"

# アクセスキー
STORAGE_ACCESS_KEY   = "<アクセスキーを入力>"

# コンテナ名
CONTAINER_NAME       = "<コンテナ名を入力>"

# ====================================================================
# 認証情報を用いたオブジェクト作成
# ==================================================================== 

CONNECT_STR         = 'DefaultEndpointsProtocol=https;AccountName=' + STORAGE_ACCOUNT_NAME + ';AccountKey=' + STORAGE_ACCESS_KEY+ ';EndpointSuffix=core.windows.net'
blob_service_client = BlobServiceClient.from_connection_string(CONNECT_STR)
container_client    = blob_service_client.get_container_client(CONTAINER_NAME)

# ====================================================================
# コンテナ内のディレクトリ参照
# ==================================================================== 

# コンテナ内のファイルリスト
blob_list = []

for blob_i in container_client.list_blobs():
    blob_list.append(blob_i.name)
    
# ====================================================================
# BLOB SAS URLの生成
# ==================================================================== 

# BLOB SAS URLリスト
sas_list = []

for blob_i in blob_list:
    
    # SAS生成
    sas_i = generate_blob_sas(
                account_name   = STORAGE_ACCOUNT_NAME,                    # ストレージアカウント名
                container_name = CONTAINER_NAME,                          # コンテナ名
                blob_name      = blob_i,                                  # コンテナ内のファイルパス
                account_key    = STORAGE_ACCESS_KEY,                      # アクセスキー
                permission     = BlobSasPermissions(read=True),           # 参照権限
                expiry         = datetime.utcnow() + timedelta(hours=1),  # 期限
    )
    
    # SAS URL発行
    sas_url = 'https://' + STORAGE_ACCOUNT_NAME + '.blob.core.windows.net/' + CONTAINER_NAME + '/' + blob_i + '?' + sas_i
    
    # リストに格納
    sas_list.append({"FILENAME":blob_i, "BLOB_SAS_URL": sas_url})

# ====================================================================
# CSVファイルを読み込む
# ==================================================================== 

# BLOB SAS URLを指定(CSV)
BLOB_SAS_URL_CSV = "https://......................"

# CSVファイルを読込
df = pd.read_csv(BLOB_SAS_URL_CSV)

最後に

この記事が気に入ったら
フォローしてね!

本記事をシェア!
目次