2022年3月10日
2022年4月1日
Azure Functionからtempファイルを扱い時、どうすればいいのかまとめました。
ざっくりいうと環境変数TMPを使えばいい。
App Serviceのファイルシステムについては以下に書いてありました。
https://docs.microsoft.com/ja-jp/azure/app-service/web-sites-available-operating-system-functionality#file-access
Azure Functionsではどうなのかわからなかったのでconsumption planを適当なnodejsの関数をデプロイし、環境変数を表示させてみました。以下に一部のせました。
APP_POOL_ID: 'mawsFnPlaceholder205_v2',
ASPNETCORE_HOSTINGSTARTUPASSEMBLIES: 'Microsoft.AspNetCore.Server.IISIntegration',
ASPNETCORE_IIS_HTTPAUTH: 'anonymous;',
PROCESSOR_ARCHITEW6432: 'AMD64',
SystemDrive: 'D:',
'ProgramFiles(x86)': 'D:\\Program Files (x86)',
ProgramW6432: 'D:\\Program Files',
PROCESSOR_IDENTIFIER: 'Intel64 Family 6 Model 63 Stepping 2, GenuineIntel',
TMP: 'D:\\local\\Temp',
PROCESSOR_ARCHITECTURE: 'x86',
Path: 'D:\\home\\site\\tools;D:\\Program Files (x86)\\nodejs\\8.11.1;D:\\Windows\\system32;D:\\Windows;D:\\Windows\\System32\\Wbem;D:\\Windows\\System32\\WindowsPowerShell\\v1.0\\;D:\\Users\\Administrator\\AppData\\Local\\Microsoft\\WindowsApps;;D:\\Program Files (x86)\\dotnet;D:\\Program Files\\Git\\cmd;D:\\Windows\\system32\\config\\systemprofile\\AppData\\Local\\Microsoft\\WindowsApps;D:\\Program Files (x86)\\PHP\\v5.6;D:\\Python27;',
AZURE_TOMCAT7_CMDLINE: '-Dport.http=%HTTP_PLATFORM_PORT% -Djava.util.logging.config.file="D:\\Program Files (x86)\\apache-tomcat-7.0.50\\conf\\logging.properties" -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Dsite.logdir="d:/home/LogFiles/" -Dsite.tempdir="d:\\home\\site\\workdir" -classpath "D:\\Program Files (x86)\\apache-tomcat-7.0.50\\bin\\bootstrap.jar;D:\\Program Files (x86)\\apache-tomcat-7.0.50\\bin\\tomcat-juli.jar" -Dcatalina.base="D:\\Program Files (x86)\\apache-tomcat-7.0.50" -Djava.io.tmpdir="d:\\home\\site\\workdir" org.apache.catalina.startup.Bootstrap',
AZURE_TOMCAT90_HOME: 'D:\\Program Files (x86)\\apache-tomcat-9.0.8',
PROCESSOR_REVISION: '3f02',
TEMP: 'D:\\local\\Temp',
TMPかTEMPの環境変数を使えばいいことがわかります。
TMPディレクトリ以下ファイルの扱い
- インスタンス間では共有されない
- kuduのdebug consoleでは関数で作ったtemp fileは見えない
- 再起動すれば消える
- 同一Function App内であれば他関数とTMPディレクトリは共通(他関数が作ったファイルが参照できる)
- 再起動しなければ結構残ってる(いつ消えるか検証中。再デプロイくらいでは消えない)
- 容量は500MBまで。
AWS/Azure/GCP tmp directory
各クラウドの場合のTMPファイルの場所です。
cloud | path | capacity |
---|---|---|
AWS Lambda | /tmp | 10GB limit ただし、512MB以上は追加料金 詳細はこちら |
Azure Functions | 環境変数TMP | 500MB limit |
GCP Cloud Functions | /tmp | 500MB limit |