LoginSignup
0
0

More than 1 year has passed since last update.

Java on Azure 実践開発【Blob Upload ③: 定期アップロード編】

Last updated at Posted at 2022-05-25

はじめに

本記事は、『Java on Azure 実践開発 Blob Upload』シリーズの第3回「定期アップロード」編です。
サンプルコードは、kohei3110/JavaOnAzure-BlobStorage に上がっています。

シナリオ概説

本シリーズでは、Blob Storage へのファイルアップロードについて、Azure を使った Java アプリケーションのサンプルコードを使用しながら、開発方法をご紹介します。

一口にファイルアップロードといっても、あらゆる方式があるかと思います。例えば、以下のようなものがあります。

No. シナリオ 概要 記事 URL
1 サーバー経由でのストリームライクなアップロード SAS の流出を懸念する場合、サーバー経由でのストリームライクなアップロード Java on Azure 実践開発【Blob Upload ①: ストリームライクなアップロード編】
2 サーバーに一時保存後アップロード アプリケーションサーバーのローカルストレージにファイルを一度保存後、アップロード(クライアントからは同期に見える) Java on Azure 実践開発【Blob Upload ②: App Service ローカル保存後アップロード編】
3 サーバーに一時保存後定期アップロード アプリケーションサーバーのローカルストレージにファイルを一度保存後、定期ジョブにてアップロード(クライアントからは非同期に見える) Java on Azure 実践開発【Blob Upload ③: 定期アップロード編】
4 署名付き URL を使ったアップロード アプリケーションから返却された署名付き URL を用いて、クライアントからファイルをアップロードする Java on Azure 実践開発【Blob Upload ④: 署名付き URL を使ったアップロード編】

本記事では、『3. 定期アップロード』について実装上のポイントを解説していきます。

実装内容

クライアントからリクエストされたアップロード対象のファイルを、App Service のローカルファイルシステムに一時保存します。保存が完了したら、クライアントに OK(200) を返却します。

App Service が実行されている App Service Plan の上で、最終更新日時が1分以内のファイルをアップロードする定期ジョブが別インスタンスとして実行されます。このジョブを、今回は Web Jobs にて実装しています。

この Web Jobs は、1 時間に 1 回、アップロード対象のファイルを削除するジョブも実行します。これにより、アップロードされたファイルが App Service Plan のファイルシステムから削除されます。

image.png

実装に必要なクラス

ここからは、実装する際に必要となるクラスについて解説していきます。

BlobAsyncClient クラス

BlobAsyncClient クラスは、Blob Storage の各オブジェクト(Blob)操作をするためのクライアントを提供します。BlobAsyncClient クラスにより、Blob アップロードやダウンロード、Blob のコピーなどの操作が可能になります。

BlobAsyncClient は、BlobClientBuilder でインスタンス化するか、getBlobAsyncClient()メソッドで取得することができます。

なお、Azure では以下3種類の Blob をサポートしています。今回は、ファイルアップロード用途なので、ブロック Blob を使用しました。
これらに対応するクライアントも、Azure SDK for Java で用意されています。

Blob 種類 概要 クライアント取得メソッド Javadoc
ブロック BLOB 大量のデータを効率的にアップロードするためのに最適。 BlobAsyncClient.getBlockBlobAsyncClient Method getBlockBlobAsyncClient()
追加 BLOB 追加操作(仮想マシンのデータのログ記録などのシナリオ)に最適。 BlobAsyncClient.getAppendBlobAsyncClient Method getAppendBlobAsyncClient()
ページ BLOB ランダムな読み取りと書き込みの操作用に最適。 BlobAsyncClient.getPageBlobAsyncClient Method getPageBlobAsyncClient()

参考: 『BlobAsyncClient Class
JavaDoc: 『Class BlobAsyncClient

UploadBlobStreamRepository.java
・・・
            BlobAsyncClient blobAsyncClient = new BlobClientBuilder()
                .connectionString(connectionString)
                .containerName(CONTAINER_NAME)
                .blobName(blobName)
                .buildAsyncClient();
・・・

Tips

実装上の Tips をご紹介します。

Web Jobs のアップロード方法

Azure WebJobsとは、Azureにて、crontabで定義するような定期処理または、デーモンプロセスのようなものを起動するための仕組みです。

デプロイには、以下の作業が必要です。

1)コンパイルし、jar ファイルにパッケージング
2)実行用のバッチファイル(run.cmdを作成)

run.cmd
set PATH=%PATH%;%JAVA_HOME%/bin
java -jar webjob-0.0.1-SNAPSHOT.jar

今回は、jar ファイルとバッチファイルの2つをzip化し、Azure Portal から WebJobs のデプロイを行いました。

image.png

App Service Plan でのインスタンスを跨いだストレージの参照

今回は、一つの App Service Plan に複数の App Service インスタンス(App Service / WebJobs)をデプロイしています。

App Service インスタンス間で共有ドライブを参照し、そのドライブに存在するファイルを操作するため、%HOME% 配下をマウントする構成としています。

image.png

App Service Plan のファイルシステムの構成は、以下サイトが詳しいです。

GitHub: Understanding the Azure App Service file system

おわりに

本記事は、『Java on Azure 実践開発 Blob Upload 編】③』として、アプリケーション実行環境のローカルストレージに保存後、定期ジョブにてファイルをアップロードする方法についてまとめました。

次回は、アプリケーションから返却された期限付き URL を用いて、クライアントからファイルをアップロードする方法についてまとめていきます!お楽しみに~。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0