Azure Functionsでtemp fileを使う

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ファイルの場所です。

cloudpathcapacity
AWS Lambda/tmp500MB limit
10GB limit
ただし、512MB以上は追加料金
詳細はこちら
Azure Functions環境変数TMP500MB limit
GCP Cloud Functions/tmp500MB limit

コメントする

メールアドレスが公開されることはありません。