LoginSignup
9
8

More than 5 years have passed since last update.

GAEのFiles API終了で対応したこと

Last updated at Posted at 2015-08-09

Files APIとは?

GAEに付属しているBlobstoreに対して、プログラムから操作を行うために用意されたAPIです。
BlobstoreにはBlobstore APIと呼ばれるモノも用意されていますが、このAPIでBlobstoreにデータを保存するには、ユーザーにWeb Formを提示して、そこからローカルファイルをUploadするといった手順が必要になり、プログラマブルにデータの保管ができません。

Files APIの終了スケジュール

詳細は以下のURLに掲載されています。
https://cloud.google.com/appengine/docs/deprecations/files_api

この記事を書いた日(2015/8/9)の状況は以下になります。

  • 既に新規アプリケーションではFiles APIを使用不可
  • 既存アプリケーションからの使用について、日本時間で1時と18時からそれぞれ1時間の間、時々使用不可
  • 8/26からは24時間にわたって時々使用不可
  • 9/9には完全シャットダウン

既存プログラムコード(Java)

実際に手を入れる必要があったコードは以下になります。

FileService fileService = FileServiceFactory.getFileService();
AppEngineFile file = fileService.createNewBlobFile("text/tab-separated-values", filename);
FileWriteChannel writeChannel = fileService.openWriteChannel(file, true);
int size = writeChannel.write(ByteBuffer.wrap(requestData.getRequestBytes()));
writeChannel.close();
writeChannel.closeFinally();

Files APIを使用して、リクエストに含まれたデータをBlobstoreに保管するまでの処理です。

改修後のプログラムコード(Java)

改修後のコードは以下になります。

GcsService gcsService = GcsServiceFactory.createGcsService();
GcsFilename gcsFileName = new GcsFilename(BUCKET_NAME, gcsObjectName);
GcsFileOptions options = new GcsFileOptions.Builder().mimeType("text/tab-separated-values").build();
GcsOutputChannel gcsWriteChannel = gcsService.createOrReplace(gcsFileName, options);
int size = gcsWriteChannel.write(ByteBuffer.wrap(requestData.getRequestBytes()));
gcsWriteChannel.close();

Files APIの後継として用意されたGCSライブラリを使用しています。
リクエストに含まれたデータをGCSに保管するまでの処理です。

おわりに

データの保管先がBlobstoreからGCSに変わりましたが、比較的簡単に移行できました。
各種APIの終了という事態は避けられないものですが、皆で情報共有しながら乗り越えていければと思います。

9
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8