azure-storage-ruby がもうメンテナンスされていない。
マイクロソフトはもう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は出されているが、まったく誰も反応していない大惨事。こんなライブラリはもう使ってられない。
Gemfileに azure-storage-ruby が入ってるだけで、Faraday 1系を使わされて最悪なので、ファイルのアップロード処理などは自前で書くことにしよう。
JavaScriptやC#のライブラリでやっているように、4MBずつ分割アップロードする。
Yes, you can upload large files in chunks using the Azure Blob Storage REST API. Here are the high-level steps you can follow:
- Divide the large file into smaller chunks. The maximum chunk size is 4 MB for the Azure Blob Storage REST API.
- 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.
- Upload each chunk of the file using the "Put Block" operation. This operation uploads a block of data to the specified block blob.
- 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:
- Azure Blob Storage REST API documentation: https://docs.microsoft.com/en-us/rest/api/storageservices/blob-service-rest-api
- Uploading large blobs in blocks: https://docs.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-dotnet#upload-blobs-in-blocks
- 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
REST APIは以下の3つ。
- https://learn.microsoft.com/en-us/rest/api/storageservices/put-blob?tabs=shared-access-signatures
- https://learn.microsoft.com/en-us/rest/api/storageservices/put-block?tabs=shared-access-signatures
- https://learn.microsoft.com/en-us/rest/api/storageservices/put-block-list?tabs=shared-access-signatures
認証方式が独特で少しわかりづらい。単純にアクセストークンをAuthorizationヘッダーに入れるのではなく、チェックサム的なものに秘匿情報を混ぜ込んでsignatureを生成してそれをパラメータに渡して、改ざん検知と認証を同時にやる的なものだ。
公式リファレンスは以下のものだが、マイクロソフトのドキュメントなので読んでも全く何を言っているかわからない。
参考になりそうなのは、Python用のAzure Storege Blobのライブラリのソースコード。
どうやらService SASってのを使うとよさげではある。