UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

【GAE】AppEngineサーバーの一時ファイル置き場

GCSにあるファイルを取得してそのままStreamとして使ったときにOutOfMemoryが発生した

一つの対策案としてGCSにあるファイルを一度AppEngineのサーバーのローカルに置いて、そのローカルのファイルを読んで使うとどうなるかという案がでたので試したい

このとき、AppEngineにおける一時ファイルの置き場所がどこなのか調べた

公式ドキュメントを見つけた
cloud.google.com

一時ファイルの書き込みだけが必要な場合は、標準の Java 11 メソッドを使用して、/tmp という名前のディレクトリにファイルを書き込むことができるみたい

実装するとこんな感じになる

    Blob blob = storage.get(BlobId.of(properties.getGcs().getBucketName(), fileName));
    blob.downloadTo(Path.of("/tmp", fileName));
    Path path = Path.of("/tmp", fileName);
    BufferedReader bufferedReader = Files.newBufferedReader(path, StandardCharsets.UTF_8);

ただ、これでもダメで、以下のエラーが出てしまったので別の手を考える

Exceeded hard memory limit of 512 MB with 592 MB after servicing 0 requests total. Consider setting a larger instance class in app.yaml.