Open3

azure-storage-ruby がもうメンテナンスされていない。

Yusuke IwakiYusuke Iwaki

マイクロソフトはもうRubyに投資する気がなさそう。
https://github.com/Azure/azure-storage-ruby

This project will be in Community Support until 13 September 2024. After this date the project and associated client libraries will be retired permanently. For more details on the retirement and alternatives to using this project, visit Retirement notice: The Azure Storage Ruby client libraries will be retired on 13 September 2024.

Ruby 3対応、Faraday 2対応、など結構重要なPull Requestは出されているが、まったく誰も反応していない大惨事。こんなライブラリはもう使ってられない。

Yusuke IwakiYusuke Iwaki

Gemfileに azure-storage-ruby が入ってるだけで、Faraday 1系を使わされて最悪なので、ファイルのアップロード処理などは自前で書くことにしよう。

JavaScriptやC#のライブラリでやっているように、4MBずつ分割アップロードする。

https://learn.microsoft.com/en-us/answers/questions/1194952/how-to-upload-large-files-in-chunks-using-rest-api

Yes, you can upload large files in chunks using the Azure Blob Storage REST API. Here are the high-level steps you can follow:

  1. Divide the large file into smaller chunks. The maximum chunk size is 4 MB for the Azure Blob Storage REST API.
  2. Create a new blob in the Azure Blob Storage account using the "Put Blob" operation. This operation creates a new blob or updates an existing blob with the specified content.
  3. Upload each chunk of the file using the "Put Block" operation. This operation uploads a block of data to the specified block blob.
  4. Commit the blocks to the blob using the "Put Block List" operation. This operation commits the list of blocks that have been uploaded to the specified block blob.

Here are some resources that can help you implement this solution:

  1. Azure Blob Storage REST API documentation: https://docs.microsoft.com/en-us/rest/api/storageservices/blob-service-rest-api
  2. Uploading large blobs in blocks: https://docs.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-dotnet#upload-blobs-in-blocks
  3. Sample code for uploading large blobs in blocks using the Azure Blob Storage REST API: https://github.com/Azure-Samples/storage-blobs-dotnet-quickstart/blob/master/UploadBlobs.cs
Yusuke IwakiYusuke Iwaki

REST APIは以下の3つ。

認証方式が独特で少しわかりづらい。単純にアクセストークンをAuthorizationヘッダーに入れるのではなく、チェックサム的なものに秘匿情報を混ぜ込んでsignatureを生成してそれをパラメータに渡して、改ざん検知と認証を同時にやる的なものだ。

公式リファレンスは以下のものだが、マイクロソフトのドキュメントなので読んでも全く何を言っているかわからない。
https://learn.microsoft.com/ja-jp/azure/storage/common/storage-sas-overview

参考になりそうなのは、Python用のAzure Storege Blobのライブラリのソースコード。

https://github.com/Azure/azure-sdk-for-python/blob/cdb4cad5d561c61a569279d51f070c969f8fa23f/sdk/storage/azure-storage-blob/azure/storage/blob/_shared_access_signature.py#L244

どうやらService SASってのを使うとよさげではある。

https://learn.microsoft.com/en-us/rest/api/storageservices/create-service-sas