Node.js
    • PDF

    Node.js

    • PDF

    Article Summary

    Classic/VPC環境で利用できます。

    Node.js形式のアクションを作成して様々な形で活用する方法と、その例を紹介します。

    アクションの作成

    JavaScriptで作成したコードは複数の関数を含めますが、Main関数はプログラムのエントリーポイントとして宣言される必要があります。 以下は、この点を考慮して名前と場所を含めて「Hello World」を出力するJavaScript形式の簡単なサンプルコードのhello.jsです。

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

    以下は、上記で作成してコードを使用してコンソールで「hello」という名前のアクションを作成する手順です。

    compute-15-2-101.png

    Node.jsモジュールにパッケージ化してアクション作成

    コードを作成していると、複数のファイルを作成したり、基本的に提供されるライブラリの他に別のライブラリを使用する場合があります。 こういった場合は、関連するファイルを一つのモジュールにパッケージ化し、パッケージ化されたファイルを利用してアクションを作成できます。 簡単な例を通じてNode.jsモジュールにパッケージ化してアクションを作成する手順を確認すると、以下のとおりです。

    1. JSON形式のpackage.jsonファイルを作成します。
      {
        "name": "my-action",
        "main": "index.js",
        "dependencies" : {
          "left-pad" : "1.1.3"
        }
      }
      
    2. 「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;
      
    3. npm installコマンドで「left-pad」ライブラリをインストールし、ZIPファイルを作成します。
      $ npm install
      $ zip -r action.zip *
      
      • ZIPファイルの作成時、「package.json」ファイルは必ずZIPファイルのルート(root)に配置
    4. コンソールで、3.のZIPファイルを使用してアクションを作成します。
      compute-15-2-102.png
    5. コンソールでアクションを実行して結果を確認します。
    注意

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

    非同期アクションの作成

    非同期(Asynchronous)で動作するアクションを作成できます。 非同期で動作するJavaScript関数は、main関数の終了後にActivationの結果を返さなければならない場合があります。 このような場合、アクション内でPromiseを返すことで解決できます。 非同期アクションのasyncActionを作成するサンプルコードは以下のとおりです。

    注意

    サンプルコードのように実行すると、リソースを独占して課金額が膨らむ原因になり得ます。ご注意ください。

    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を作成して実行した後、アクションの実行結果情報を確認すると、以下のようにstartendの間のTimestampが約2秒ほどずれていることが確認できます。
      compute-15-2-104.png

    この記事は役に立ちましたか?

    What's Next
    Changing your password will log you out immediately. Use the new password to log back in.
    First name must have atleast 2 characters. Numbers and special characters are not allowed.
    Last name must have atleast 1 characters. Numbers and special characters are not allowed.
    Enter a valid email
    Enter a valid password
    Your profile has been successfully updated.