pythonアクションを利用する

アクションを作成する

まず、以下のように、名前と場所を含む"Hello World"を出力する簡単なpythonアクションである'hello'を作成します。

hello python Action

def main(args):
    name = args.get("name", "World")
    place = args.get("place", "Naver")
    greeting = "Hello " + name + " in " + place + "!"
    print(greeting)
    return {"payload": greeting}

Pythonコードは、複数の関数を含むことができるが、Main関数はプログラムの開始点として必ず宣言されなければなりません。

上記で作成したコードでhelloという名前のアクションを作ります。

compute-15-2-201

依存ファイルを一緒にパッケージングしてアクションを作成する

コードを作成していると、1つのアクションの他の依存モジュールをパッケージしなければならない場合があります。このような場合、関連のファイルを1つのモジュールでパッケージングし、パッケージングされたファイルを利用してアクションを作ることができます。

関数にアクセスするためのentry pointであるmain関数は、_main\_.pyファイル内に定義されていなければなりません。例えば、メインアクションで利用される関数の作成されたhelper.pyファイルとともにパッケージングしてアクションを作りたい場合には、以下のコマンドを使います。

アクションに関連するファイルをhelloPython.zipで圧縮します。

zip -r helloPython.zip __main__.py helper.py

その後、作られた圧縮ファイルを利用してアクションを作成します。

virtual environmentとともにパッケージングしてアクションを作成する

1. Linux & Mac

Cloud Functionsで基本提供されるライブラリーの他の追加のライブラリーを利用するために、virtual environment(virtualenv)を使って一緒にパッケージングすることができます。

基本対応するパッケージング方法と同様に、メイン関数は_main\_.pyのファイル内に定義されていなければならず、virtualenvのフォルダ名は必ず'virtualenv'に設定する必要があります。

例題

virtual environmentを構築し、Cloud Functionsから提供しないpyjokesのライブラリーを利用し、jokeを返すアクションを作成する例です。

  1. まず、virtualenv名を有するvirtualenvの環境を構築します。

     virtualenv virtualenv
     source virtualenv/bin/activate
     pip install pyjokes
    
  2. __main__.pyからget_joke()メソッドを呼び出し、jokeを返す以下のコードを作成します。

     import pyjokes
    
     def main(args):
         return {"joke": pyjokes.get_joke()}
    
  3. virtualenvのフォルダと__main__.pyのファイルを一緒に圧縮します。

     zip -r jokes.zip virtualenv __main__.py
    

Cloud Functionsは、最大のアクションソースコードのサイズが48MBに制限されています。よって、利用するライブラリーが多くて、ファイルサイズが制限容量を超過する場合、配布が制限されることがあり、頻繁に使用されないアクションの場合、コンテナーがcold状態に切り替わり、初期アクションの実行時間が延びることがあります。

2. Windows

現在、Windows OSにおいては、macとLinuxとに対応するvirtualenvと同様の形式での対応が困難な状態です。Windowsでは、仮想で環境を構築してパッケージ化する2つの方法をご案内します。(Pythonやpipは、インストールされていると仮定します。)

方法1:Dockerを利用してパッケージ

Dockerを利用できる開発環境なら、簡単に仮想で開発環境を構築してパッケージ化することができます。

Step 1. 自分のOSに合うDocker for Windows (Community Edition)又はDocker Toolboxをインストールします。

参照:https://www.docker.com/docker-windows

Step 2. ソースコードの作成

__main__.py

import pyjokes

def main(args):
    return {"joke": pyjokes.get_joke()}

Step 3. requirements.txtファイルの作成

requirements.txt

pyjokes==0.5.0
  • 上記の文書を作る方法は、依存ライブラリーのバージョンを知っているか、作成法を知っている場合、直接作成が可能です。

  • 参照:https://pip.readthedocs.io/en/1.1/requirements.html

  • 作成法を知らない場合、windows用のvirtualenvをインストールした後、pip freezeを利用して作成することができます。

    c:\WorkingDir>pip install virtualenv
    c:\WorkingDir>virtualenv virtualenv
    c:\WorkingDir>c:\WorkingDir\virtualenv\Scripts\activate
    (virtualenv) c:\WorkingDir>pip freeze > requirements.txt
    

Step 4. Dockerのコマンドを利用したzipファイルの作成

  • ファイルの構造が以下のような場合、作業パスはC:\WorkingDirと仮定します。

    c:\WorkingDir>dir
    XXXX-XX-XX  午後 09:07    <DIR>          .
    XXXX-XX-XX  午後 09:07    <DIR>          ..
    XXXX-XX-XX  午後 09:07               200 __main__.py
    XXXX-XX-XX  午後 09:07               100 requirements.txt
    
  • 以下のDockerのコマンドを実行します。 以下のコマンドは、dockerを利用して仮想の開発環境を作って、その環境を圧縮してzipファイルで作るまでの過程を含みます。

    c:\WorkingDir> docker run --rm -v "\\C:\WorkingDir:/tmp" python:3.6.1-alpine /bin/sh -c 'mkdir workdir && cp -R /tmp/* /workdir/ && rm -rf /workdir/virtualenv && pip install virtualenv && apk add --no-cache zip && cd /workdir && virtualenv virtualenv && source virtualenv/bin/activate && pip install -r requirements.txt && zip -r /tmp/project.zip ./*'
    

Step 5. Zipファイルのアップロード

方法2:依存ライブラリーのみを別にパッケージング

Dockerのような追加環境の構築が困難なら、windows用のpython vitualenvでマイコードと依存ライブラリーのみを別に圧縮してパッケージングすることができます。

Step 1. ソースコードの作成

__main__.py

import pyjokes

def main(args):
    return {"joke": pyjokes.get_joke()}

Step 2. Vitualenvの作成及び依存パッケージのインストール及びコピー

c:\WorkingDir>pip install virtualenv
c:\WorkingDir>virtualenv virtualenv
c:\WorkingDir>c:\WorkingDir\virtualenv\Scripts\activate
(virtualenv) c:\WorkingDir>pip install pyjokes
(virtualenv) c:\WorkingDir>xcopy .\virtualenv\Lib\site-packages\*.* .\ /e /h /k

Step 3. 作業パスc:\WorkingDir内のvirtualenvフォルダを除いて全て圧縮(zip)

compute-15-2-202

Step 4. 圧縮されたファイルのアップロード

基本パラメータを設定する

毎回アクションを実行する度にパラメータを転送する代わりに、特定のパラメータに基本値を指定することができます。 上記で作成したhelloアクションのplaceパラメータに基本値を登録してみます。

compute-15-2-105

アクション実行時にパラメータを転送する

アクションの実行の際、入力でパラメータを転送することができます。 Main関数に転送されるパラメータは、JSON object形式で転送されます。

パラメータは、アクションの実行の際に直接入力するか、JSON形式のファイルを作成して転送することができます。 ファイルを通じてパラメータを転送する場合には、以下のようなJSON形式のファイルを作成する必要があります。

compute-15-2-106

アクションのランタイム情報

各アクションのコンテナーには、基本ライブラリーが内蔵されており、このライブラリーは別途の追加作業なしにインポートして利用することができます。

Python 3のライブラリー

Python 3.6.1バージョンを提供し、アクションの作成の際に明示的にPython 3のアクションのコンテナーを作成することができます。

  • aiohttp v1.3.3
  • appdirs v1.4.3
  • asn1crypto v0.21.1
  • async-timeout v1.2.0
  • attrs v16.3.0
  • beautifulsoup4 v4.5.1
  • cffi v1.9.1
  • chardet v2.3.0
  • click v6.7
  • cryptography v1.8.1
  • cssselect v1.0.1
  • Flask v0.12
  • gevent v1.2.1
  • greenlet v0.4.12
  • httplib2 v0.9.2
  • idna v2.5
  • itsdangerous v0.24
  • Jinja2 v2.9.5
  • kafka-python v1.3.1
  • lxml v3.6.4
  • MarkupSafe v1.0
  • multidict v2.1.4
  • packaging v16.8
  • parsel v1.1.0
  • pyasn1 v0.2.3
  • pyasn1-modules v0.0.8
  • pycparser v2.17
  • PyDispatcher v2.0.5
  • pyOpenSSL v16.2.0
  • pyparsing v2.2.0
  • python-dateutil v2.5.3
  • queuelib v1.4.2
  • requests v2.11.1
  • Scrapy v1.1.2
  • service-identity v16.0.0
  • simplejson v3.8.2
  • six v1.10.0
  • Twisted v16.4.0
  • w3lib v1.17.0
  • Werkzeug v0.12
  • yarl v0.9.8
  • zope.interface v4.3.3

関連情報へ

下のガイドから関連情報をご確認いただけます。

に対する検索結果は~件です。 ""

    に対する検索結果がありません。 ""

    処理中...