ステップ1: リモートサービス(AWS のLambda関数)をManagementコンソールで作成する

このトピックでは、外部関数のリモートサービスとして使用する AWS Lambda関数を作成するための詳細な手順について説明します。

このトピックには、最初の外部関数を作成するためにそのまま使用できる、またはカスタムLambda関数の開始点として使用できるサンプルLambda関数のコードが含まれています。

このトピックの内容:

紹介

AWS でリモートサービスを作成するには、複数の方法があります。このトピックでは、リモートサービスとして使用するLambda関数を作成する1つの方法を示します。

このチュートリアルでは、それぞれPythonで記述された2つのサンプルLambda関数を説明します。

詳細は、 Snowflakeサンプル関数 (このトピック内)で提供されています。

Lambda関数の入出力について

Snowflakeがリモートサービスとの間でデータを送受信するには、リモートサービスが JSON 形式でデータを送受信する必要があります。

リモートサービスの入出力に関するプラットフォームに依存しない情報は、 リモートサービスの入出力データ形式 にあります。

このセクションでは、 AWS Lambda関数に固有の詳細を提供します。

JSON 経由の言語に依存しない入出力

このセクションの情報は、Snowflake外部関数のリモートサービスとして使用される、すべてのLambda関数に適用されます。外部関数の入出力に関するプラットフォーム固有の情報については、以下のサブセクションをご参照ください。

AWS では、 HTTP と互換性のあるサービスの規則は、 JSON オブジェクト内に本文を返すことです。これには、 HTTP ステータスコードも含まれます。AWS Lambda関数からの一般的な戻り値の JSON は次のようになります。

{
"statusCode": <http_status_code>,
"body":
        {
            "data":
                  [
                      [ 0, <value> ],
                      [ 1, <value> ]
                      ...
                  ]
        }
}
Copy

JSON 入力の構造は前述のものと似ていますが、必要になる可能性が低い追加のキーと値のペアが含まれており、 statusCode は除外されています。

Python固有のLambda関数の入力

次の資料は、このチュートリアルにあるサンプルLambda関数を含む、Snowflakeと互換性のあるPython言語のLambda関数に適用されます。この情報は、 入出力の言語に依存しないルール追加 されます。

Snowflake互換のPython言語Lambda関数は、2つのパラメーター eventcontext を受け取ります。単純な外部関数には通常、 event パラメーターのみが必要です。

event パラメーターには多くのサブフィールドが含まれ、そのうちの1つは body です。本文は、ディクショナリを含む JSON 互換の文字列です。

ディクショナリには data という名前のキーが含まれています。 data の対応する値は配列です。その配列には、Snowflakeによって渡された行が含まれます。

各行は、 data 配列内にネストされた配列によって表されます。

(AWS Lambdaは、Snowflakeから送信された HTTP POST リクエストを便利に処理し、本文を抽出してイベントパラメーター内の本文を渡すため、Snowflakeによって提供されるサンプル関数は、 HTTP POST リクエスト全体を解析する必要がありません。)

サンプル同期Lambda関数 には、 event パラメーターの読み取り方法を示すコードが含まれています。

Lambda関数のコードを選択する

Snowflakeのサンプル関数

Snowflakeは2つのサンプル関数を提供します。

  • より短い例は、 同期 です。外部関数またはLambda関数を初めて使用する場合、Snowflakeは、これを使用して最初のサンプル外部関数を作成することをお勧めします。

    経験豊富なユーザーは、カスタムリモートサービスの開始点として使用するために、それをコピーして変更することもできます。

    このコードは、 サンプルの同期Lambda関数 にあります。

  • もう1つの例は 非同期 です。

    このサンプルは、主に、カスタマイズされた非同期リモートサービスを構築するためのサンプルを目的としています。

    このコードは、 サンプルの非同期Lambda関数 にあります。

カスタムLambda関数

独自のLambda関数を最初から作成することも、開始点として Snowflakeのサンプル関数 (このトピック内)で説明されている関数の1つを使用することもできます。

使用したい既存のリモートサービスがある場合は、チュートリアルのこのステップにある大半の手順をスキップできます。代わりに、次の操作を実行します。

  1. AWS アカウント ID を追跡ワークシートの Your AWS Account ID フィールドに記録します。

  2. リモートサービスのLambda関数名を追跡ワークシートの Lambda Function Name フィールドに記録します。

  3. ステップ2: AWS Managementコンソールでプロキシサービス(Amazon API Gateway)を作成する に移動します。

Lambda関数を作成する

AWS Lambda関数を作成するには、次のステップに従います。

注釈

これらのステップは、Snowflakeによって提供されるサンプルリモートサービスを作成する方法を示していますが、独自のカスタマイズされたリモートサービスを作成するためのモデルとして使用できます。カスタムLambda関数を作成する場合は、必要に応じて以下のステップを変更します(例: リモートサービスのコードに適切なプログラミング言語を選択)。

  1. AWS Managementコンソールにログインします(まだログインしていない場合)。

  2. AWS アカウント ID をワークシートの Your AWS Account ID という名前のフィールドにまだ記録していない場合は、ここで記録します。

    AWS アカウント ID を検索する必要がある場合は、 AWS の手順 に従います。

  3. Lambda を選択します。

  4. Create function を選択します。

  5. 関数名を入力します。

    この名前をワークシートの Lambda Function Name フィールドに記録します。

  6. 使用するプログラミング言語を選択します。Snowflakeが提供するサンプルPython関数のいずれかを使用している場合は、 Python 3.8 を選択します。

  7. この機能の実行ロールを選択または作成します。

    適切なオプション(通常は Create a new role with basic Lambda permissions)を選択します。

    (このロールは、クラウドアカウントのロールおよびSnowflakeのロールとは別。)

  8. Create Function ボタンをクリックします。

  9. lambda_function タブで、関数のコードを入力します。

    独自の関数をまだ作成していない場合は、Snowflakeが提供する次の例を使用できます。

    ちなみに

    編集ウィンドウに貼り付けることができない場合は、関数のファイル名をダブルクリックして編集を有効にしてみます。

  10. Deploy ボタンをクリックして、関数を展開します。

Lambda関数をテストする

Test ボタンの横にある下矢印をクリックして、 Configure test event を選択します。 Event name フィールドに test と入力します。

Snowflakeが提供するサンプル同期Python関数の場合、次のテストデータを使用します(デフォルトのデータを以下のデータで置換)。

{
  "body":
    "{ \"data\": [ [ 0, 43, \"page\" ], [ 1, 42, \"life, the universe, and everything\" ] ] }"
}
Copy

Create をクリックしてから、 Test をクリックします。

実行結果は次のようになります。

{
  "statusCode": 200,
  "body": "{\"data\": [[0, [\"Echoing inputs:\", 43, \"page\"]], [1, [\"Echoing inputs:\", 42, \"life, the universe, and everything\"]]]}"
}
Copy

外部関数のリモートサービスとして使用できる AWS Lambda関数ができました。