ステップ2: コンソールでプロキシサービス(Google Cloud API Gateway)を作成する¶
Snowflakeは、データ(HTTP POST リクエスト)をリモートサービスに直接送信しません。代わりに、Snowflakeは、Snowflakeからのデータをリモートサービス(つまり、GCP Cloud Function)に中継するプロキシサービスにデータを送信し、またプロキシサービスからデータを受信します。
このトピックでは、外部関数のプロキシサービスとして使用するGoogle Cloud API Gatewayを作成および設定する手順について説明します。
前のステップ¶
API 定義を作成する¶
ローカルファイルシステムで、作成するAPIを指定するYAML形式の構成ファイルを作成してカスタマイズします。ファイルの拡張子は .yaml または .yml である必要があります。
構成ファイルテンプレート:
次のフィールドを入力または更新します。
<PATH>を一意の名前に置き換えます。これはURLsに組み込まれるため、URLsで有効な文字のみを使用してください。たとえば、demo-func-resourceと入力します。この構成ファイルの他のフィールドとは異なり、コロンの後ではなく、コロンの前に
<PATH>の値を入力する必要があることに注意してください。たとえば、次は適切です。パス名には、 パスパラメーター を含めることはできません。Googleは、 パスをURLに設定するときに、パスパラメーターをサポートします。ただし、Snowflakeは、CREATE EXTERNAL FUNCTIONステートメントで指定された対応するURLのパスパラメーターをサポートしていません。)
すぐ前のステップからのパス(例:
demo-func-resource)を追跡ワークシートのPath Suffixフィールドにコピーします。x-google-backendフィールドの下にあるaddressフィールドを見つけ、<HTTP ENDPOINT TO ROUTE REQUEST TO>を追跡ワークシートのCloud Function Trigger URLフィールドの値に置き換えます。結果は次のようになります。URLを引用符で囲むことはできません。
URL はGoogleがホストするエンドポイントである必要はありません。任意の HTTP エンドポイントへのパスにすることができます。
ステップ1: コンソールでリモートサービスを作成する(Google Cloud Function) で Require HTTPS を選択した場合は、
addressフィールドに入力する URL がhttpsで始まることを確認してください。オプションで、次のいずれの値も更新することができます。
infoセクションのtitle。infoセクションのdescription。pathsセクションのpostサブセクションのoperationId。pathsセクションのpostサブセクションのsummary。
サンプル構成ファイルを確認します。次のようになります。
注釈
この構成では、このチュートリアルの ステップ5: コンソールでプロキシサービスの GCP セキュリティポリシーを作成する で保護するまで、ゲートウェイは一般に公開されたままになります。
オプションで、それまでの間誰もゲートウェイを使用できないようにするには、このオプションのステップで説明するように、仮の無効なサービスアカウント名(
google_service_account)を使用するセキュリティ定義を構成ファイルに追加します。このステップでこのセキュリティ定義を追加すると、 ステップ5: コンソールでプロキシサービスの GCP セキュリティポリシーを作成する でセキュリティの構成が完了するまで、外部関数をテストできなくなります。具体的には、 ステップ4: Snowflakeで GCP 用の外部関数を作成する で外部関数をテストする命令はまだ機能しません。securityDefinitionsセクションを構成ファイルのschemesセクションのすぐ上に、同じインデントレベルで追加します。<セキュリティ定義名>を一意のセキュリティ定義名(例:snowflakeAccess01)に置き換えます。この名前を追跡ワークシートの
Security Definition Nameフィールドに記録します。
上記で作成したセキュリティ定義を参照するように、構成ファイルの
post:セクションを更新します。operationIdフィールドの下に、次を追加します。operationIdフィールドと同じレベルでインデントされていることを確認します。<セキュリティ定義名>を追跡ワークシートのSecurity Definition Nameフィールドの値に置き換えます。上記のように、セキュリティ定義名の前にハイフンと空白を含めるようにします。
コロンの後に空の角括弧(
[])を必ず含めてください。
例:
構成ファイルを保存します。
追跡ワークシートの
Configuration File Nameフィールドにファイルのパスと名前を記録します。
API構成ファイルの詳細については、次のGCPドキュメントをご参照ください。
API Gatewayを作成する¶
API Gatewayを作成するには:
GCPAPIを作成します。
API Configを作成します。
API ConfigでGatewayを作成します。
GCPAPIを作成する¶
このステップでは、 GCP API を作成します。これは、1つ以上のAPI Gatewayと1つ以上の構成ファイルを含むことができるコンテナーです。
まだそうしていない場合は、GCPメニューをクリックして API Gateway を選択し、 Google Cloud API Gateway 画面に移動します。
CREATE GATEWAY をクリックします。
Display Name と API ID を入力します(例:
demo-api-display-name-for-external-function1とdemo-api-id-for-external-function1)。外部関数の作成では後でこれらを入力する必要がないため、追跡ワークシートにこれらの値を記録する必要はありません。ただし、API IDを記録して、使い終わったら削除できるようにすることもできます。
API Configを作成する¶
構成ファイルをコンソールにアップロードすると、 API Config が作成されます。
画面の API Config セクションまでスクロールします。
Upload an API Spec を含むフィールドを検索します。
BROWSE をクリックして、構成ファイルを選択します。構成ファイルの名前は、追跡ワークシートの
Configuration File Nameフィールドに記録されていました。Display Name を含むフィールドに表示名を入力します。
サービスアカウントを選択します。
サンプル関数を作成した場合は、 Select a Service Account を含むフィールドで App Engine default service account を選択します。
(サンプルとしてではなく)実稼働環境で使用する関数を作成している場合は、別のサービスアカウントを選択することもできます。
選択したサービスアカウントには、Cloud Functionを呼び出す権限など、適切な権限が必要です。
API ConfigでGatewayを作成する¶
画面の Gateway details セクションまでスクロールします。
新しい API Gatewayの Display Name を入力します。
Location フィールドをクリックして、適切なリージョン(例:
us-central1)を選択します。CREATE GATEWAY をクリックします。
これにより、 APIs 画面が表示され、 APIs のリストが表示されます。
新しい API がすぐに表示されない場合は、数分待ってから Refresh ボタンをクリックします。
API の Managed Service の値を追跡ワークシートの
Managed Service Identifierフィールドにコピーします。この時点で、 APIs のリストが表示されます。API の名前をクリックします。
OVERVIEW、 DETAILS、 CONFIGS、および GATEWAYS のタブ4つが表示されます。
GATEWAYS タブをクリックします。
Gateway URL をワークシートの
Gateway Base URLフィールドにコピーします。