AWS CloudFormation テンプレートを使用したサンプル外部関数の作成

このドキュメントでは、 CloudFormation テンプレートを使用して AWS にサンプルの外部関数を作成する方法を示します。テンプレートをカスタマイズしたい場合は、 AWS CloudFormation の詳細を読むことができます。

Snowflakeは、開始できるテンプレートを提供します。このテンプレートは、作成プロセスの詳細を非表示にし、一部の名前(例: ステージ名)と機能をハードコードします。独自のカスタム外部関数を作成する準備ができたら、テンプレートのコピーをカスタマイズするか、 AWS でのカスタマイズ可能な外部関数の作成 のより柔軟な手順に従うことができます。

このトピックの内容:

こちらもご参照ください。

概要

CloudFormation テンプレートは、外部関数を作成する際に次の両方のステップを実行します。

  • リモートサービスの作成(例: AWS Lambda)。

  • プロキシサービス(例: Amazon API Gateway)の作成および構成。

テンプレートは次も実行します。

  • 2つの IAM ロールを作成する(1つはLambda用、もう1つは API Gateway用)。

  • API Gatewayのリソースポリシーを構成する。

テンプレートは https://github.com/Snowflake-Labs/sfguide-external-functions-examples/tree/main/DeploymentTemplates/aws/BasicSetup.yaml で入手できます。

前提条件

必須:

  • 次の権限を含む、 AWS のアカウント。

    • IAMを介したAWSロールの作成(IDおよびアクセス管理)。

    • AWS Lambda関数の作成。

    • API Gatewayエンドポイントの作成。

  • ACCOUNTADMIN 権限または CREATE INTEGRATION 権限があるロールを持っているSnowflakeアカウント。

このドキュメントは、経験豊富な AWS 管理者を前提としています。

ワークシート

外部関数を作成するときは、入力した特定の情報(例:API Gateway URL)を記録して、後続のステップでその情報を使用できるようにする必要があります。以下のワークシートは、この情報を追跡するのに役立ちます。

==============================================================================================
=========================================== Worksheet ========================================
==============================================================================================

New IAM Role Name........: _____________________________________________
New IAM Role ARN.........: _____________________________________________
Resource Invocation URL..: _____________________________________________
API_AWS_IAM_USER_ARN.....: _____________________________________________
API_AWS_EXTERNAL_ID......: _____________________________________________

ステップ1: テンプレートを使用して AWS Lambdaと API Gatewayを作成する

  1. AWS Managementコンソールに移動します。

  2. 上部の検索バーで、 CloudFormation を検索します。

  3. サービスで、 CloudFormation をクリックします。

  4. Create stack をクリックします。

    With new resources (standard) または With existing resources (import resources) のいずれかを選択できる場合は、 With new resources (standard) を選択します。

  5. Create stack ページで、 Prepare template の下の Template is ready を選択します。

  6. Upload a template file を選択します。

  7. Choose file を選択します。

  8. テンプレートのコピーが含まれているディレクトリに移動し、そのテンプレートを選択します。

  9. Next をクリックして、ロールなどの名前を入力するページに移動します。

    注釈

    テンプレートは、一部のリソースにデフォルト名を使用します。名前は変更できます。

  10. スタックの名前を入力します。

  11. API Gateway IAM ロールの名前を入力します(パラメーター apiGatewayIAMRoleName)。これは、 API Gatewayで認証するためにSnowflakeが引き受けるロールです。 このロールがまだ存在していないことを確認してください。ロールが存在すると、テンプレートはロールの更新を試みます。

    ワークシートに「新しい IAM ロール名」としてロール名を記録します。

  12. Lambda実行ロールの名前を入力します(パラメーター lambdaExecutionRoleName)。このロールは、 CloudWatch ログを追加するためにLambdaサービスによって使用されます。 このロールがまだ存在していないことを確認してください。ロールが存在すると、テンプレートはロールの更新を試みます。

  13. Next をクリックします。

    このページには、テンプレートを展開するための詳細オプションがいくつかあります。

    1. 必要に応じて、スタックポリシーなどの詳細オプションを設定します。(これらは通常、デモには必要ありません。)

    2. Next をクリックします。

  14. レビューページで、最後までスクロールして、 CloudFormation テンプレートがカスタム名で IAM リソースを作成する可能性があることを確認します。これが必要なのは、テンプレートが展開の一部として2つの IAM ロールを作成するためです。

  15. Create stack をクリックします。

展開には数秒かかります。展開が完了すると、作成されたリソースが Resources タブの下に一覧表示されます。

ステップ2: API 統合と外部関数を作成する

リモートサービスとプロキシサービスの作成は完了したため、 API 統合と外部関数を作成する必要があります。その後、このページに戻ります。API 統合と外部関数を作成するには、 API Gateway URL が必要です。これは、以下のステップに従って取得できます。

展開が完了すると、新しく作成されたスタックの Events タブが表示されます。

  1. Outputs タブをクリックします。

  2. resourceInvocationUrl の値をワークシートの「リソース呼び出し URL」フィールドにコピーします。

  3. ワークシートの「新しい IAM ロール ARN」フィールドに awsRoleArn の値をコピーします。

  4. API 統合を作成するときは、 api_allowed_prefixes の値として「リソース呼び出し URL」を使用します。

  5. 外部関数を作成するときは、 invocation_URL に「リソース呼び出し URL」を使用します。

上記の情報を使用して、以下のリンクのステップを実行します。

  1. API 統合を作成する

  2. Snowflakeと新しい IAM ロールの間に信頼関係を設定する

  3. 外部関数を作成する

その後、このページに戻ります。

ステップ3: 関数を呼び出す

次の手順に従って、機能をテストします。

外部関数を呼び出す

トラブルシューティング

CloudFormation スタックの作成に失敗する

考えられる原因

CloudFormation テンプレートで指定されたリソースを作成するために必要な権限がありません。スタックの Events タブをチェックして、エラーの詳細を確認してください。

その他のトラブルシューティングのヒントについては、 AWS 外部関数の トラブルシューティング ページもご覧ください。