Node.jsのアクションを利用する

アクションを作成する

まず、以下のように、名前と場所を含む"Hello World"を出力する簡単なJavaScriptコードであるhello.jsを作成します。

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

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

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

アクションをNodeJSのモジュールでパッケージングする

コードを作成していると、1つ以上のファイルを作らなければならない場合や、基本提供されるライブラリーの他に別途のライブラリーを使用しなければならない場合などがあります。このような場合、関連のファイルを1つのモジュールでパッケージングし、パッケージングされたファイルを利用してアクションを作ることができます。

以下のように、簡単なpackage.jsonファイルを作成します。

{
  "name": "my-action",
  "main": "index.js",
  "dependencies" : {
    "left-pad" : "1.1.3"
  }
}

そして、'left-pad'を利用する簡単な'index.js'ファイルを作成します。

function myAction(args) {
    const leftPad = require("left-pad")
    const lines = args.lines || [];
    return { padded: lines.map(l => leftPad(l, 30, ".")) }
}
exports.main = myAction;

npm installコマンドで'left-pad'のライブラリーをインストールし、ZIPファイルを作成します。

$ npm install
$ zip -r action.zip *

ZIPファイルを作成する際、'package.json'ファイルは必ずZIPファイルのルート(root)に位置する必要があります。

以下のように作成されたZIPファイルでアクション(Action)を作ります。

compute-15-2-102

アクションの実行は、従来と同様の方法で実行することができます。

現在、npm installの実行の際、インストールされたDependencyの中にバイナリーファイルが含まれている場合には、アクションが正常に実行されません。

非同期(Asynchronous)アクションを作成する

注意:以下のように実行する場合、リソースを独占して過度な料金発生の原因になることがあります。

非同期(Asynchronous)的に動作するJavaScript関数の場合、main関数が終了した後、Activationの結果値を返さなければならない場合があります。このような場合は、アクション内でPromiseを返すことで解決することができます。

次のように、asynchActionを作成します。

function main(args) {
     return new Promise(function(resolve, reject) {
       setTimeout(function() {
         resolve({ done: true });
       }, 2000);
    })
 }

上記の例は、main関数からPromiseを返しています。 それは、アクションの実行がまだ完了しておらず、未来に完了することを示します。

setTimeout関数によって2秒後にCallbackが実行されます。Callback内のresolve()関数が実行される時点でPromiseが満たされ、アクションの実行は正常に完了します。 もし、reject()関数を呼び出す場合、アクションが正常に完了できていないことを示すことがあります。

次は、asyncActionを作成する画面です。

compute-15-2-103

asyncActionを実行すると、約2秒後に結果が返されることが分かります。そのActivation情報を確認すると、startendとの間のTimestampに約2秒ほど差が生じていることを確認することができます。

compute-15-2-103

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

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

compute-15-2-105

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

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

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

compute-15-2-106

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

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

NodeJS 6のライブラリー

NodeJS 6.12.2バージョンが提供され、アクションの作成の際に明示的にNode.js 6のアクションコンテナーを作成することができます。

NodeJS 6のアクションコンテナーは、基本的に以下のライブラリーを含んでいます。

以下に並べれられたライブラリーは、別途の追加作業なしに、次の例のコードのように、require 構文を通じてアクションコード内で利用することができます。

var rp = require('request-promise')

function main(params) {
    return rp('https://www.naver.com')
        .then(function (htmlString) {
            console.log("yes");
            return { status: 'ok' };
        })
        .catch(function(err) {
            console.log("no");
            return { status: 'error' };
        });
}
  • apn v2.1.2 - A Node.js module for interfacing with the Apple Push Notification service.
  • async v2.1.4 - Provides functions for working with asynchronous functions.
  • btoa v1.1.2 - A port of the browser's btoa function.
  • cheerio v0.22.0 - Fast, flexible & lean implementation of core jQuery designed specifically for the server.
  • cloudant v1.6.2 - This is the official Cloudant library for Node.js.
  • commander v2.9.0 - The complete solution for Node.js command-line interfaces.
  • consul v0.27.0 - A client for Consul, involving service discovery and configuration.
  • cookie-parser v1.4.3 - Parse Cookie header and populate req.cookies with an object keyed by the cookie names.
  • cradle v0.7.1 - A high-level, caching, CouchDB client for Node.js.
  • errorhandler v1.5.0 - Development-only error handler middleware.
  • glob v7.1.1 - Match files by using patterns that the shell uses, like stars and stuff.
  • gm v1.23.0 - GraphicsMagick and ImageMagick for Node.
  • lodash v4.17.2 - The Lodash library exported as Node.js modules.
  • log4js v0.6.38 - A conversion of the log4js framework designed to work with Node.
  • iconv-lite v0.4.15 - Pure JS character encoding conversion
  • marked v0.3.6 - A full-featured markdown parser and compiler, which is written in JavaScript. Built for speed.
  • merge v1.2.0 - Merge multiple objects into one, optionally creating a new cloned object.
  • moment v2.17.0 - A lightweight JavaScript date library for parsing, validating, manipulating, and formatting dates.
  • mongodb v2.2.11 - The official MongoDB driver for Node.js.
  • mustache v2.3.0 - Mustache.js is an implementation of the mustache template system in JavaScript.
  • nano v6.2.0 - Minimalistic couchdb driver for Node.js.
  • node-uuid v1.4.7 - Deprecated UUID packaged.
  • nodemailer v2.6.4 - Send e-mails from Node.js – easy as cake!
  • oauth2-server v2.4.1 - Complete, compliant, and well tested module for implementing an OAuth2 Server/Provider with express in Node.js.
  • openwhisk v3.11.0 - JavaScript client library for the OpenWhisk platform. Provides a wrapper around the OpenWhisk APIs.
  • pkgcloud v1.4.0 - pkgcloud is a standard library for Node.js that abstracts away differences among multiple cloud providers.
  • process v0.11.9 - Require('process'); just like any other module.
  • pug v2.0.0-beta6 - Implements the Pug templating language.
  • redis v2.6.3 - This is a complete and feature-rich Redis client for Node.js.
  • request v2.79.0 - Request is the simplest way possible to make HTTP calls.
  • request-promise v4.1.1 - The simplified HTTP request client 'request' with Promise support. Powered by Bluebird.
  • rimraf v2.5.4 - The UNIX command rm -rf for node.
  • semver v5.3.0 - Supports semantic versioning.
  • sendgrid v4.7.1 - Provides email support via the SendGrid API.
  • serve-favicon v2.3.2 - Node.js middleware for serving a favicon.
  • socket.io v1.6.0 - Socket.IO enables real-time bidirectional event-based communication.
  • socket.io-client v1.6.0 - Client-side support for Socket.IO.
  • superagent v3.0.0 - SuperAgent is a small progressive client-side HTTP request library, and Node.js module with the same API, sporting many high-level HTTP client features.
  • swagger-tools v0.10.1 - Tools that are related to working with Swagger, a way to document APIs.
  • tmp v0.0.31 - A simple temporary file and directory creator for node.js.
  • twilio v2.11.1 - A wrapper for the Twilio API, related to voice, video, and messaging.
  • underscore v1.8.3 - Underscore.js is a utility-belt library for JavaScript that supports the usual functional suspects (each, map, reduce, filter...) without extending any core JavaScript objects.
  • uuid v3.0.0 - Simple, fast generation of RFC4122 UUIDS.
  • validator v6.1.0 - A library of string validators and sanitizers.
  • watson-developer-cloud v2.29.0 - Node.js client library to use the Watson Developer Cloud services, a collection of APIs that use cognitive computing to solve complex problems.
  • when v3.7.7 - When.js is a rock solid, battle-tested Promises/A+ and when() implementation, including a complete ES6 Promise shim.
  • winston v2.3.0 - A multi-transport async logging library for node.js. "CHILL WINSTON! ... I put it in the logs."
  • ws v1.1.1 - ws is a simple to use, blazing fast, and thoroughly tested WebSocket client and server implementation.
  • xml2js v0.4.17 - Simple XML to JavaScript object converter. It supports bi-directional conversion.
  • xmlhttprequest v1.8.0 - node-XMLHttpRequest is a wrapper for the built-in http client to emulate the browser XMLHttpRequest object.
  • yauzl v2.7.0 - Yet another unzip library for node. For zipping.

NodeJS 8のライブラリー

  • openwhisk v3.11.0 - JavaScript client library for the OpenWhisk platform. Provides a wrapper around the OpenWhisk APIs.
  • request v2.79.0 - Request is the simplest way possible to make HTTP calls.
  • request-promise v4.1.1 - The simplified HTTP request client 'request' with Promise support. Powered by Bluebird.

関連情報へ

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

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

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

    処理中...