App Service の中で zip ファイルを作成する方法について。
はじめに
App Service はサンドボックスでの提供のため、アプリケーションの追加や一部標準コマンドの実行に制限があります。
例えば Compress-Archive コマンドレットに関しても、 'Write-Progress : Win32 internal error' が応答されるため zip ファイルを作成することが出来ません。
そのため、App Service 内で (WebJob などから) zip ファイルを作成するためには、C# や Node.js, Java などのアプリから作成するか、外部の実行ファイルを使用することが必要です。
7-zip の使用
おそらく広く使われており、App Service 上でも動作する処理系として OSS で公開されている 7-zip があります。
App Service 上で 7-zip を使用する方法として以下の手順が使用できます。
(1). 7-zip のダウンロード: \home\bin に配置することにします。
mkdir %HOME%\bin
cd %HOME%\bin
// 7-Zip 22.01 (2022-07-15) を使用する場合
curl -OL https://7-zip.org/a/7zr.exe
// 7-Zip 9.20 (2010-11-18) を使用する場合
curl -OL https://7-zip.org/a/7za920.zip
unzip 7za920.zip
-> 7za.exe を含むいくつかのファイルが展開されます。
(2). 圧縮の実行
7-zip の日本語解説にもありますが、a オプションと出力先になる zip ファイル、格納するファイルを指定するだけです。
以下の例は \home\LogFiles フォルダを圧縮して \home\LogFiles.zip を作成する例です。
cd %HOME%
// 7-Zip 22.01 (2022-07-15) を使用する場合
%HOME%\bin\7zr.exe a LogFiles.zip .\LogFiles
cd %HOME%
// 7-Zip 9.20 (2010-11-18) を使用する場合
%HOME%\bin\7za.exe a LogFiles.zip .\LogFiles
以下のように作成されます。zip ファイルの中に配置される際のパスは、最後に指定するファイル、フォルダのパスの指定方法に依存します。
zip フォルダ内に格納したい方法に合わせて調整してください。
あちこちのフォルダを 1 つの zip に、決まったフォルダ構成で配置したい場合は、特定のフォルダにコピーして配置したファイルを zip でまとめるか、プログラムを書いて zip ファイルを作る必要があります。