Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

Azure Microsoft

Azure Blob Storageに対してAPI経由でファイルをアップロードする方法(Python)

投稿日:

<目次>

Azure Blob Storageに対してAPI経由でファイルをアップロードする方法(Python)
 概要
 サンプルプログラム
 実行結果と注意点

Azure Blob Storageに対してAPI経由でファイルをアップロードする方法(Python)

Azure Blob Storage上のcsvに対して、Azureの外部アプリから更新(httpのPUTリクエストでcsvに書き込み)をするための方法とサンプルプログラムをご紹介します。

概要

(ポイント)
Azure Storageの認証は単にアクセスキーを指定するのみに留まりません。リクエストを証明するための「シグニチャ文字列」を生成して、それをヘッダーにセットして渡す必要があります。
シグニチャ文字列は「HMAC-SHA256」アルゴリズムを用いて出力ハッシュを生成し、それをBase64でエンコードした後に、ヘッダーにセットした上でHTTPリクエストを投げる事で、初めて更新が可能になります。

(図111)

目次にもどる

サンプルプログラム

今回は上記をPythonのプログラムで実現したサンプルをご紹介します。
(xxxxxの部分をご自身の値に置き換えて頂けたら、動作するようになっています)

import requests
import datetime
import hmac
import hashlib
import base64
from requests.auth import HTTPBasicAuth

def main():

  storage_account_name = 'xxxxxxxxxxxxxxxxxxxxxxx'
  storage_account_key = "xxxxxxxxxxxxxxxxxxxxxxxxx"
  container_name='xxxxxxxx'
  csv_name = 'xxxxxx.csv'
  api_version = '2015-02-21'
  #body_data = input["contents"]
  body_data = 'xxxx好きな文字列を設定xxxx'
  request_time = datetime.datetime.utcnow().strftime('%a, %d %b %Y %H:%M:%S GMT')
  print(request_time)

  string_params = {
      'verb': 'PUT',
      'Content-Encoding': '',
      'Content-Language': '',
      'Content-Length': str(len(body_data)),
      'Content-MD5': '',
      'Content-Type': 'text/plain; charset=UTF-8',
      'Date': '',
      'If-Modified-Since': '',
      'If-Match': '',
      'If-None-Match': '',
      'If-Unmodified-Since': '',
      'Range': '',
      'CanonicalizedHeaders': 'x-ms-blob-type:BlockBlob' + '\nx-ms-date:' + request_time + '\nx-ms-version:' + api_version + '\n',
      'CanonicalizedResource': '/' + storage_account_name +'/'+container_name+ '/' + csv_name
  }

  string_to_sign = (string_params['verb'] + '\n' 
                    + string_params['Content-Encoding'] + '\n'
                    + string_params['Content-Language'] + '\n'
                    + string_params['Content-Length'] + '\n'
                    + string_params['Content-MD5'] + '\n' 
                    + string_params['Content-Type'] + '\n' 
                    + string_params['Date'] + '\n' 
                    + string_params['If-Modified-Since'] + '\n'
                    + string_params['If-Match'] + '\n'
                    + string_params['If-None-Match'] + '\n'
                    + string_params['If-Unmodified-Since'] + '\n'
                    + string_params['Range'] + '\n'
                    + string_params['CanonicalizedHeaders']
                    + string_params['CanonicalizedResource'])

  signed_string = base64.b64encode(hmac.new(base64.b64decode(storage_account_key), msg=string_to_sign.encode('utf-8'), digestmod=hashlib.sha256).digest()).decode()

  headers = {
      'x-ms-version' : api_version,
      'x-ms-date' : request_time,
      'x-ms-blob-type': 'BlockBlob',
      'Content-Length': str(len(body_data)),
      'Content-Type': "text/plain; charset=UTF-8",
      'Authorization' : ('SharedKey ' + storage_account_name + ':' + signed_string)
  }

  url = ('https://' + storage_account_name + '.blob.core.windows.net/' + container_name + '/' + csv_name)
  r = requests.put(url, headers = headers,data=body_data)
  return {'dummy': 'dummy_data'}

if __name__ == "__main__":
    main()

例では「Test2.csv」というファイルに「Hello world444」という文字列を書き込みしようとしています。

(図121)

●storage_account_name
(図130)

●storage_account_key
・ストレージアカウント→「アクセスキー」ブレード→「key1」

(図131)

●container_name
(図132)

目次にもどる

実行結果と注意点

Azure Blob Storage上の「Test2.csv」に「Hello world444」という文字列を書き込まれています。

(図141)

もしも、csvのタイムスタンプ等が更新されない場合は、シグニチャ文字列に何かしら問題がある可能性があります(エラーにはならないため、気づきにくい)。
目次にもどる

Adsense審査用広告コード


Adsense審査用広告コード


-Azure, Microsoft
-

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

Azure Machine Learningで「OSError: Could not find kaggle.json」が出た時の原因と対処方法について

  <目次> (1) Azure Machine Learningで「OSError: Could not find kaggle.json」が出た時の原因と対処方法について  (1-1) …

no image

FlaskアプリをAzure App Serviceにデプロイする手順

  <目次> (1) FlaskアプリをAzure App Serviceにデプロイする手順  やりたいこと  (1-0) 前提事項  (1-1) STEP1:Flaskアプリの準備  (1 …

Azure App Serviceとは?概要と基本的な使い方をご紹介

  <目次> (1) Azure App Serviceとは?概要と基本的な使い方をご紹介  (1-1) Azure App Serviceとは?  (1-2) Azure App Serv …

Power BI Desktopで Oracle ORA-12504 エラーが出た時の対処方法

  <目次> Power BI Desktopで Oracle ORA-12504 エラーが出た時の対処方法  エラー内容  再現手順  原因  対処方法  関連するエラーについて Powe …

Azureリソースグループの作り方の手順について

  <目次> (1) Azureリソースグループの作り方の手順について  (1-1) Azureリソースグループとは?  (1-2) Azureリソースグループの作成手順  (1-3) Az …

  • English (United States)
  • 日本語
Top