GCPのクラウド環境上で処理を実行できるCloud Functions。
便利なサービスだが、気をつけないと以下のようなエラーが発生する。
OSError: [Errno 30] Read-only file system
書き込みをしようとすると「読み込み専用です」と言ってエラーにしてくる。
ではこのエラーの原因は何なのか。
そこで今回はCloud FunctionsでOSError Read-only file systemになる原因と対策について紹介する。
この記事を書いている人
記事を読むメリット
Cloud FunctionsでOSError Read-only file systemになる原因と対策がわかる
CloudFunctionsでOSError Read-only file systemになる原因
Google Cloud Functionsで OSError: [Errno 30] Read-only file system
になる原因は、書き込み権限が無い場所にファイル書き込みをしようとしているから。
Cloud Functionsは処理のコードだけ用意すれば実行できる。
コードがどこで実行されているかというと、サーバーレス用のクラウド環境だ。
なのでユーザーがサーバーを準備する必要が無い。
しかしサーバーを準備する必要がないので書き込み権限も無いというわけである。
OSError Read-only file systemへの対策
ではCloud Functionsではファイル書き込みはできないのかというと、そうではない。
永続的なファイル書き込みはできないが、GCSからCSV等のファイルを取得して加工してからGCSに戻す、というような一時的にファイルを取り扱う処理は可能。
ではどのようにしてファイルの読み書きをすればよいのか。
答えは簡単で、/tmp
ディレクトリに書き込めば良い。
他の場所は書き込み禁止だが、/tmp
ディレクトリの下は書き込みすることが可能なので処理の中で扱う一時ファイルはここに書き込むと良い。
ただし1回の処理が終わればクリアされるので、あくまで処理中に一時的に保存する場所である。
処理後のファイルを保存したい場合はGCS等のストレージに転送しよう。
まとめ
今回はCloud FunctionsでOSError Read-only file systemになる原因と対策について紹介した。
CloudFunctionsでOSError Read-only file systemになる原因は、書き込み権限が無いから。
例外として /tmp
ディレクトリの下だけはに書き込み可能。
処理に用いる入力ファイルを持ってきたり、加工した結果ファイルの出力先に使える。
ただし保存期間はFunctionの実行中のみなので、処理後に結果ファイルを後工程で使う場合は処理の最後にGCSなどに転送しよう。
/tmp
には書き込めるのを覚えておくといいかもしれませんねCloud Functionはクラウド上に処理を定義しておける便利なサービスである。
しかしクラウドサービスなので当然利用料が発生する。
もしかしたら利益につながらない処理にはランニングコストをかけたくないかもしれない。
そんな場合には安価な小型マシンを用意するとランニングコストが抑えられるので検討すると良いかも知れない。
あわせて読みたい