【Azure】PythonでAzure環境にファイルアップロードする

■ はじめに

 Azure にファイル転送することになったので、メモ。
また、そもそも Azure (アジュール) が全く分からないので、
そういったことも簡単だが調べてみた。

目次

【1】Azure の ストレージサービス
 1)Azure Blob Storage
 2)Azure Data Lake Storage Gen2
【2】関連用語
 1)コンテナ
【3】PythonでAzureにファイル転送する
 1)環境設定
 2)サンプル
【4】補足:Azure の勉強について
 1)Microsoft Learn

【1】Azure の ストレージサービス

* 代表的なものは以下の通り。
~~~~~~
1)Azure Blob Storage
2)Azure Data Lake Storage Gen2 << 今回扱うサービス
~~~~~~

他にも「Azure File ストレージ」「Azure Queue Storage」
「Azure Table Storage」がある。
(今回は、関係ないので、これ以上の深追いはしない)

1)Azure Blob Storage

* Blob (ブロブ) = Binary Large Objects
* Azure の オブジェクトストレージ
 => AWS で言うと、S3みたいなもの?

2)Azure Data Lake Storage Gen2

https://docs.microsoft.com/ja-jp/azure/storage/blobs/data-lake-storage-introduction

より抜粋
~~~~~~~~~~
* Azure Blob Storage をベースに構築された
 ビッグ データ分析専用の一連の機能
* Azure Blob Storage と Azure Data Lake Storage Gen1 の機能を集約したもの
~~~~~~~~~~

【2】関連用語

1)コンテナ

* ファイルなどのオブジェクトを格納する入れもの

【3】PythonでAzureにファイル転送する

* 以下が詳しく載っている

https://docs.microsoft.com/ja-jp/azure/storage/blobs/data-lake-storage-directory-file-acl-python

1)環境設定

# Python 向けの Azure Data Lake Storage クライアント ライブラリをインストール
pip install azure-storage-file-datalake

2)サンプル

* 大きく分けて、3段階(下記サンプルのStep1~Step3を参照)

例1:既存コンテナにファイルを転送する

from azure.storage.filedatalake import DataLakeServiceClient

# Step1: アカウント キーを使用して接続する

# Azureストレージ アカウントの名前
storage_account_name = "demo_storege_user"
# ストレージ アカウントのアクセス キー
storage_account_key = "xxxxxxx"

service_client = DataLakeServiceClient(
  account_url=f"https://{storage_account_name}.dfs.core.windows.net",
  credential=storage_account_key
)

# Step2: 既存コンテナを取得する
file_system_client = service_client.get_file_system_client(
  file_system="my-file-system"
)
# コンテナが存在しない場合は、作成する
# file_system_client = service_client.create_file_system(
#   file_system="my-file-system"
# )

# Step3: ファイルをディレクトリにアップロードする
#  => 参考にしたサイトの
#  「大きなファイルをディレクトリにアップロードする」参照
directory_client = file_system_client.get_directory_client("my-directory")
file_client = directory_client.get_file_client("azure-uploaded-file.txt")

# バイナリファイルなら "r" => "rb" に変更
with open("C:\\local-file-to-upload.txt", "r") as local_file:
  file_contents = local_file.read()
  # upload_data メソッドを使用して大きなファイルをアップロード
  file_client.upload_data(file_contents, overwrite=True)
  # 大きいファイルをサポートしていない場合
  # file_client.append_data(
  #   data=file_contents,
  #   offset=0,
  #   length=len(file_contents)
  # )
  # file_client.flush_data(len(file_contents))

【4】補足:Azure の勉強について

* Azure は、AWSと同じで、無料枠でもアカウント作成にはクレジットが必須
* ただし、Microsoft Learnという学習サイトは用意されている

1)Microsoft Learn

* ハンズオン環境としてAzure環境が利用できるオンライン学習サイト
 => 本格的ではなく、とりあえず教養として勉強したいので、
  こういったサイトは、エンジニアとして、ありがたい、、、
 => 今回の記事に関わる以下のカリキュラムがある
 + Azure ストレージ サービスについて
 + Azure Storage アカウントの作成

公式サイト
https://docs.microsoft.com/ja-jp/learn/

参考文献

Microsoft Learn
https://atmarkit.itmedia.co.jp/ait/articles/1811/07/news015.html
https://www.acrovision.jp/service/azure/?p=1258