パッケージ(Package)、アクション(Action)を利用する

パッケージ(Package)

パッケージ(Package)は、関連するアクションやフィードを一ヵ所に集めて管理し、公認の共有パッケージをマイパッケージにコピーするために使われます。

  • パッケージにトリガーやルールは含まれません。
  • 今後、共有のPublic Package機能を追加し、頻繁に利用する機能に対するサポートを計画しています。

パッケージを作成する

  • パッケージを作る際、パッケージ名は別のEntityと重複することができません。
    • Entity:アクション(パッケージに含まれない場合)、ルール、トリガー
  • デフォルトパラメータは、パッケージに属している全てのアクションに適用されるパラメータです。
  • パッケージ名は、英文大文字・小文字、数字、特殊文字のうち、アンダースコア(_)、ハイフン(-)を含むことができます。
  • アクションがパッケージに含まれる場合、そのアクション名は、{package_name}/{action_name}形式で決められます。

パッケージを作成する

アクション(Action)

アクション(Action)は、ユーザーが定義するステートレス(Stateless)コードのコードスニペット(Snippets)として、色んな言語で作成することができます。

アクションは、明示的に実行されるか、特定のイベントの結果で実行されることができるが、アクションが実行される度に1つの固有の'Activation'が作られます。 'Activation'は、Activation IDで区分され、アクションの実行結果及びメタデータを盛り込んでいます。 アクションのInputとOutputとは、いずれもキー値(key-value)形式のJSON値です。 アクションは、また別のアクションを実行させることができ、複数のアクションが集まって1つの'Sequence アクション'を作ることもできます。

対応可能な言語は、次の通りです。

  • Node.js 6、8
  • Python 3
  • Java 8
  • Swift 3.1.1
  • PHP 7.1
  • Go 1.1
  • .Net Core 2.2
  • Ruby (対応予定)
  • Node.js 10 (対応予定)

アクションコンテナー

それぞれのアクションは、相互独立したコンテナー上で駆動されます。
1つのアクションが実行される度に、そのアクションのためのコンテナーが作られ、ユーザーの定義したコードが実行され、結果が転送されます。
一度作られたコンテナーは、直ちに終了されずに一定時間の間維持され、同じアクションが実行されると、再利用されます。
(別のユーザーのコードを実行した空間は再利用しません。)

アクションが初めて実行される際、コンテナーを作ることは凡そ50~200msほどかかり、この時間を短縮するために'pre-warming'という技法が適用されています。
'pre-warming'を通じて、予め特定の言語のアクションコンテナーを駆動させておくことができます。

アクションの実行結果(Activation)

通常、アクションを実行した結果は、以下のような情報を盛り込んでいます。

  • namespace:アクションの属するnamespace。ユーザーとの契約によって割り当てられた固有空間です。契約の終了後、再契約の際には別のnamespaceを割り当てられます。
  • name:アクション名
  • activationId:アクションの実行結果の固有ID
  • start:アクションが開始された時刻
  • end:アクションが終了した時刻
  • duration:アクションが実行された期間(ms)
  • response:アクションの実行結果。アクションが最終的に返した結果は、resultフィールドで転送されます。
  • logs:ユーザーがアクション内で出力したログ
  • annotations:アクションに関連する情報
  • publish:アクションが共有されたか否か

アクションの実行結果の例は、次の通りです。

{
    "namespace": "style95",
    "name": "rp",
    "version": "0.0.1",
    "subject": "style95",
    "activationId": "626c0dfabf274aa7ac0dfabf270aa759",
    "start": 1517461496130,
    "end": 1517461496451,
    "duration": 321,
    "response": {
        "status": "success",
        "statusCode": 0,
        "success": true,
        "result": {
            "status": "ok"
        }
    },
    "logs": [],
    "annotations": [
        {
            "key": "path",
            "value": "style95/rp"
        },
        {
            "key": "waitTime",
            "value": 33
        },
        {
            "key": "kind",
            "value": "nodejs:6"
        },
        {
            "key": "limits",
            "value": {
                "logs": 10,
                "memory": 256,
                "timeout": 60000
            }
        },
        {
            "key": "initTime",
            "value": 262
        }
    ],
    "publish": false
}

アクションを実行する際、resultオプションを利用すると、上記の情報のうち、resultに該当する情報のみが返されます。

{
  "status": "ok"
}

アクションログを残す

全てのアクションコンテナーは、stdoutstderrで出力された情報にTimestamp情報を追加し、logsフィールドに返します。

NodeJSアクションでログを残す

function main(params) {
    var name = params.name || 'World';
    var place = params.place || 'Naver';
    var payload = 'Hello, ' + name + ' in ' + place + '!';
    console.log(payload)
    console.error(payload)
    return {payload:  payload};
}

実行結果を照会すると、以下のようなlogs情報を確認することができます。

{
  ...
    "logs": [
        "2018-02-01T06:50:26.134193098Z stdout: Hello, World in Naver!",
        "2018-02-01T06:50:26.134293524Z stderr: Hello, World in Naver!"
    ],
  ...
}

Pythonアクションでログを残す

from __future__ import print_function
import sys

def main(args):
    name = args.get("name", "stranger")
    greeting = "Hello " + name + "!"
    print (greeting)
    print (greeting, file=sys.stderr)
    return {"greeting": greeting}
{
  ...
    "logs": [
        "2018-02-01T07:16:33.847246459Z stderr: Hello stranger!",
        "2018-02-01T07:16:33.847308738Z stdout: Hello stranger!"
    ],
  ...
}

類似する方式で別の言語のアクションでも、stdout又はstderrでメッセージを出力してログを残すことができます。次は、ログを残したアクションの例(NodeJS)です。

ログを残したアクションの例(NodeJS)

ログを残したアクションの例

アクションメタデータ(Action Metadata)を利用する

全てのアクションは、基本的に次のような環境変数が提供されます。

  • __OW_API_HOST:現在アクションが実行されるCloud Funtionsのendpoint情報
  • __OW_API_KEY:現在アクションを実行するのに使われたAPIキー
  • __OW_NAMESPACE:現在実行中のアクションの実行結果が保存されるnamespace情報
  • __OW_ACTION_NAME:現在実行中のアクションのfull name
  • __OW_ACTIVATION_ID:現在実行中のアクションのActivation ID
  • __OW_DEADLINE:アクションが実行され得る最終時刻

Example:metadata.js

function main(params) {
    return {
      payload: {
        apihost:    process.env.__OW_API_HOST,
        namespace:  process.env.__OW_NAMESPACE,
        name:       process.env.__OW_ACTION_NAME,
        activation: process.env.__OW_ACTIVATION_ID,
        deadline:   process.env.__OW_DEADLINE
      }
    };
}

関連情報へ

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

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

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

    処理中...