Cloud Functions とは

Prev Next

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

Cloud Functionsを利用する全体シナリオを学習する前に、Cloud Functionsに関するいくつかの重要な概念を説明します。 ここで説明される主要概念は以下のとおりです。

参考

Cloud Functionsの概念の理解を深めるために、用語をご参照ください。

ネームスペース

ネームスペースとは、ユーザーが利用申込を行うとユーザー別に割り当てられる固有の領域を意味し、実際には乱数形式で作成される文字列です。 Cloud Functionsのパッケージ、アクション、トリガーといったすべてのリソースはネームスペース下位に作成されるため、利用を解除するとネームスペースに属するすべてのリソースは一括削除されます。 再度利用申込を行うと、新しいネームスペースが割り当てられます。
このような性質により、ネームスペースはユーザー別使用量の測定と課金計算の基準になります。

アクション

アクションは、ユーザーが定義するステートレス(Stateless)コードのコードスニペット(Snippets)を意味します。 アクションは、JavaScript、Swift、Java、Python、PHPなど様々な言語で作成できます。 NAVERクラウドプラットフォームのCloud Functionsでは、アクションの作成に使用可能な言語はCloud Functionsを使用する前にで確認できます。
アクションはユーザーにより呼び出されるか、イベントに反応して実行され、他のアクションの結果を入力として受けてシーケンスアクションとして実行されることもあります。 アクションのInputとOutputは、いずれもキー-値(key-value)形式のJSON値です。 アクションが明示的に実行されるか、特定のイベントの結果として実行されるたびにアクティベーションが作成されます。 アクティベーションについての説明は、アクティベーションをご参照ください。

アクションコンテナ

それぞれのアクションはお互い独立したコンテナで起動されます。 アクションが実行されるたびにそれぞれのアクションのために作成されたコンテナでユーザーが定義したコードが実行され、結果が伝達される仕組みです。 一度作成されたコンテナはすぐさま終了せず、一定時間維持されて同じアクションが実行されると再使用されます。 その後は自動で削除されるため、他のユーザーに共有されたり、再活用されるといったセキュリティ上の問題は発生しません。
アクションが最初に実行される際に、コンテナの作成におおよそ50~200msほどかかります。この時間を短縮するために、「pre-warming」という技法が適用されています。 「pre-warming」技法を活用すると、特定の言語のアクションコンテナをあらかじめ起動しておくことができます。

シーケンス

シーケンスはシーケンスアクションと同じ意味です。 シーケンスアクションは、様々な言語で作成された複数のアクションを順次実行します。 先行アクションに定義されたコードでJSON形式でリターンされた結果を、後行アクションのアクションパラメータ値として受け取ります。

compute-compute-15-2-9_workflow_ja.png

アクションロジックで先行アクションの結果に応じて分岐し、簡単なワークフローを実装できます。

アクティベーション

アクティベーションは、アクションやトリガーの実行結果を意味します。 アクティベーションには、実行結果メタデータが含まれています。 1つのアクションを実行するたびに1つのアクティベーションが作成され、各アクティベーションは固有のIDを持つため、Activation IDでそれぞれを区別できます。 Activation IDは、32桁でできている任意のalpha-numeric値です。

実行結果

実行結果のサンプルコードと実行結果の各構成項目についての説明は、以下のとおりです。

{
    "namespace": "U749rOIuHnuy",
    "name": "rp",
    "version": "0.0.1",
    "subject": "U749rOIuHnuy",
    "activationId": "626c0dfabf274aa7ac0dfabf270aa759",
    "start": 1517461496130,
    "end": 1517461496451,
    "duration": 321,
    "response": {
        "status": "success",
        "statusCode": 0,
        "success": true,
        "result": {
            "status": "ok"
        }
    },
    "logs": [],
    "annotations": [
        {
            "key": "path",
            "value": "U749rOIuHnuy/package/action"
        },
        {
            "key": "waitTime",
            "value": 33
        },
        {
            "key": "kind",
            "value": "nodejs:12"
        },
        {
            "key": "limits",
            "value": {
                "logs": 10,
                "memory": 256,
                "timeout": 60000
            }
        },
        {
            "key": "initTime",
            "value": 262
        }
    ],
    "publish": false
}
  • namespace:アクション(トリガー)が属するネームスペースで、ユーザーとの契約により割り当てられた固有の空間
  • name:アクション(トリガー)の名前
  • activationId:アクション(トリガー)の実行結果に対する固有ID
  • start:アクション(トリガー)実行を開始した時刻(ms)
  • end:アクション(トリガー)実行を終了した時刻(ms)
  • duration:アクション(トリガー)の実行にかかった時間(ms)
  • response:アクション(トリガー)の実行結果(状態)。 アクション(トリガー)の実行に対する最終リターン値はresultフィールドで伝達
  • logs:ユーザーがアクション(トリガー)内で出力したログ
  • annotations:アクション(トリガー)に関連する情報
  • publish:アクション(トリガー)を共有するかどうか
参考

アクションの実行時にresultオプションを使用すると、上記の構成項目のうちresultに該当する情報のみ返されます。

メタデータ

すべてのアクションには、実行に関連するメタデータが基本的に提供されます。 メタデータのサンプルコードとメタデータの各環境変数についての説明は、以下のとおりです。

function main(params) {
    return {
      payload: {
        namespace:  process.env.__OW_NAMESPACE,
        name:       process.env.__OW_ACTION_NAME,
        activation: process.env.__OW_ACTIVATION_ID,
        deadline:   process.env.__OW_DEADLINE
      }
    };
}
  • __OW_NAMESPACE:現在実行中のアクションの実行結果が保存されるネームスペース情報
  • __OW_ACTION_NAME:現在実行中のアクションのフルネーム
  • __OW_ACTIVATION_ID:現在実行中のアクションのActivation ID
  • __OW_DEADLINE:アクションを実行できる最終時間

トリガー

トリガーは、Cloud Functionsで連携可能なクラウドサービスや外部サービスのイベントを通じてアクションを実行できるイベント伝達オブジェクトを意味します。 即ち、イベントの入力を受けるチャネルとして使用されるわけであり、例えば以下のような状況でトリガーを作成できます。

  • アドレスがアップデートされたとき
  • 文書がウェブサイトにアップロードされたとき
  • メールを送信するとき
  • GitHub内に(保存された)コードに変更事項が発生したとき
  • 配布が終わったとき
  • IoTデバイスでイベントが発生したとき

ユーザーが登録したイベントが発生する場合、そのイベントに応じて1つ以上のアクションを並列で実行でき、トリガーを実行する際に伝達されるイベントのデータは各アクションの実行パラメータとして伝達されます。
NAVERクラウドプラットフォームの内部または外部で発生したイベントはトリガーを介してアクションに関連付けられ、アクションではこれらのイベントにレスポンスできます。 トリガーとアクションを関連付けると、トリガーイベントが実行されるたびにアクションはトリガーのイベントパラメータを使用して一緒に実行されます。
一つのトリガーを複数のアクションに関連付けることもできます。 シーケンスアクションも関連付けることができます。 トリガーはパッケージに属することはできませんが、パッケージに含まれているアクションを呼び出すことはできます。
トリガーはキー-値(key-value)の対でできているディクショナリー(Dictionary)を使用して動作させることができます。 ディクショナリーはイベントを指すこともあります。 アクションと同様、1つのトリガーを実行するたびに1つのアクティベーションが作成され、各アクティベーションは固有のIDを持つため、Activation IDでそれぞれを区別できます。