DataStoreの辛いところ

Cloud Funcsionsを個別に呼び出す(リトライ処理)

# 概要

Cloud FunctionsをGCSに保存したタイミングで、画像データを変更してもう一度GCSにアップロードしたい。

## WebUIから実行

関数をテストから実行する










dataで必要なパラメータを指定。
今回はbucketとfileを使っていたのでその2つを指定する



以下は実際に読んでるコード

```
exports.helloWorld = (event, callback) => {
  const object = event.datat;
  console.log(`Bucket: ${object.bucket} File: ${object.name}`);
```

## コマンドラインからの実行

関数名、リージョンを指定して呼び出す

```
gcloud --project [PROJECT-NAME] beta functions call helloWorld --region asia-northeast1 --data '{"bucket":"hogehoge","name":foo.png"}'
```

Cloud Functionsを使ってImageMagickを使って画像変換してみる

JSからImageMagickを使う

nodeでImageMagickを使うライブラリがある

gm https://github.com/aheckmann/gm

こちらを使って行う

const gm = require("gm").subClass({ imageMagick: true });
gm('image.png')
  .colorspace("cmyk")
  .write('image.tif')


GCSからダウンロード

渡された引数にGCSのオブジェクトが渡されるのでそれを使ってダウンロードする

const object = event.data;
const file = storage.bucket(object.bucket).file(object.name);
const tempLocalPath = `/tmp/${path.parse(file.name).base}`;
file.download({ destination: tempLocalPath })
  .catch(err => {
    console.error("Failed to download file.", err);
    return Promise.reject(err);
  })
  .then(() => {
    console.log(`Image ${file.name} has been downloaded to ${tempLocalPath}.`);
  })

GCSへアップロード

ダウンロードの続きでbucketに対してuploadを行う

const newFileName = file.name.replace(".png", ".tif");
file.bucket
        .upload(tempLocalPath, {
          destination: newFileName,
          metadata: { contentType: "image/tiff" }
        })
        .catch(err => {
          console.error("Failed to upload cmyk image.", err);
          return Promise.reject(err);
        });

デプロイ

プロジェクトの指定

--project [PROJECT NAME]

regionの指定

--region asia-northeast1

デフォルトだとus-central1になる

実際のコマンドは以下

gcloud --project [PROJECT] beta functions deploy pngToCMYKConverter --region asia-northeast1 --trigger-resource sheet-yournail-staging --trigger-event google.storage.object.finalize


他のリージョンにDeployしてモジュールを削除

gcloud --project [PROJECT] beta functions deploy pngToCMYKConverter

参考
https://cloud.google.com/functions/docs/tutorials/imagemagick?hl=ja

DataStoreの辛いところ

# DataStoreの限界 FacebookやインスタグラムのようなSNSで、投稿、公開範囲、お気に入りなどの機能をDataStoreで実現しようとするとどうしても辛くなる。 ## DataStoreで実現可能? - users - id - feeds - i...