開発

Cloud FunctionsでOSError Read-only file systemになる原因と対策

GCPのクラウド環境上で処理を実行できるCloud Functions

便利なサービスだが、気をつけないと以下のようなエラーが発生する。

OSError: [Errno 30] Read-only file system

書き込みをしようとすると「読み込み専用です」と言ってエラーにしてくる。

ではこのエラーの原因は何なのか。

そこで今回はCloud FunctionsでOSError Read-only file systemになる原因と対策について紹介する。

この記事を書いている人


システムエンジニア、AIエンジニアと、IT業界で10年以上働いている中堅。PythonとSQLが得意。

記事を読むメリット

Cloud FunctionsでOSError Read-only file systemになる原因と対策がわかる


CloudFunctionsでOSError Read-only file systemになる原因

Google Cloud FunctionsOSError: [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などに転送しよう。


ファイルの書き込みができると、上流工程からファイルを連携できたりして便利だね
そうですね
Cloud Functionsだけで処理が完結しない場合はファイル連携も必要となるので、 /tmp には書き込めるのを覚えておくといいかもしれませんね


Cloud Functionはクラウド上に処理を定義しておける便利なサービスである。

しかしクラウドサービスなので当然利用料が発生する。

もしかしたら利益につながらない処理にはランニングコストをかけたくないかもしれない。

そんな場合には安価な小型マシンを用意するとランニングコストが抑えられるので検討すると良いかも知れない。

役に立ったらシェアしてくれると励みになります。

にほんブログ村 IT技術ブログへ

-開発
-,

Translate »

© 2021 ITips