LoginSignup
5
7

More than 5 years have passed since last update.

Google Cloud FunctionsでPythonを使ってみる

Posted at

Public Betaになりましたが、Pythonのサポートはまだのようなので無理やり使ってみます。

準備

Node.jsは書いたことないのですが、ググってこんな感じに書いてみました。

index.js
const spawnSync = require('child_process').spawnSync;

exports.helloWorld = function helloWorld(req, res) {

  result = spawnSync('python', ['./inspect.py'], {
    stdio: 'pipe',
  });

  if (result.stdout){
    res.status(200).send(result.stdout);
  }else if (result.stderr){
    res.status(200).send(result.stderr);
  }
};
inspect.py
print('hello functions!')

この2つのファイルをZipで圧縮し、Cloud FunctionsのConsole画面でアップロードします。

Cloud_Functions_-_Test_fx_lab.png

これでdeployは完了、HTTP Triggerなので記載のURLをブラウザで開けばPythonが出力 'hello functions!'が表示されます。

Python環境

Pythonを使えることがわかったので、もうちょっと詳細を調べてみます。

inspect.py
try:
    import tensorflow as tf
    print('tensorflow %s' % tf.__version__)
except:
    print('tensorflow n/a')

try:
    import sklearn
    print('sklearn %s' % sklearn.__version__)
except:
    print('sklearn n/a')

try:
    import numpy as np
    print('numpy %s' % np.__version__)
except:
    print('numpy n/a')

try:
    import scipy as sp
    print('scipy %s' % sp.__version__)
except:
    print('scipy n/a')

とりあえず気になったライブラリの有無を列挙。 ・・・全滅でした
3rd-party libは準備されていないようです。

他ざっと調べた内容

Python version 2.7.9
OS Debian系 8.7
pip N/A
easy_install N/A
File System read only

File Systemがread onlyなので、実行時に何かをインストールして使うのは無理そうです。
ですがdeploy時のZipに含まれるファイル形式に制限はなさそうなので、
バイナリなど予め入れておけば実行できそうです。

参考

GooglerがGoで同じことをやっています。そちらの方が参考になるかも。
https://github.com/kelseyhightower/google-cloud-functions-go

最後に

Pythonを使うのは現状かなり手間ですが、通常通りNode.jsを使うぶんには非常に簡便に機能を実行できる環境だと思います。Console上でサクッと書いて、すぐにdeployできるのはとても魅力です。

5
7
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
5
7