ステップ2: AWS Managementコンソールでプロキシサービス(Amazon API Gateway)を作成する

Snowflakeは、データ(HTTP POST リクエスト)をリモートサービスに直接送信しません。代わりに、Snowflakeは、データをリモートサービス(例: AWS Lambda関数)に中継して再びリモートサービスに戻すプロキシサービスに、データを送信します。

このトピックでは、外部関数のプロキシサービスとして使用するAmazon API Gatewayサービスを作成および構成する手順について説明します。

Amazon API Gatewayをプロキシサービスとして設定するには、次を含むいくつかのステップが必要です。

  • AWS アカウントに新しい IAM (ID とアクセス管理)のロールを作成します。

  • Amazon API Gatewayエンドポイントを作成し、構成します。

  • Amazon API Gatewayエンドポイントを保護します。

  • Snowflakeで API 統合オブジェクトを作成します。

  • Snowflakeと新しい IAM ロールの間に信頼関係を設定します。

これらを作成するステップは、次の理由で交互に実行されます。

  • API 統合には、ロールの ARN (Amazonリソース名)などの API Gatewayからの情報が必要です。

  • API Gatewayには、 API_AWS_EXTERNAL_ID や API_AWS_IAM_USER_ARN などの API 統合からの情報が必要です。

このトピックの内容:

AWS アカウントで新しい IAM ロールを作成する

Snowflakeが AWS アカウントを認証するには、Snowflakeが所有する IAM (IDおよびアクセス管理)ユーザーに、 AWS アカウントで IAM ロールを引き受ける権限を付与する必要があります。

IAM ロールを作成するステップは次のとおりです。

  1. 新しい IAM ロールを作成します。 AWS コンソールで IAM を検索し、 Roles をクリックしてから、 Create Role をクリックします。

  2. 信頼できるエンティティのタイプを選択するように求められたら、 Another AWS account を選択します。

  3. Specify accounts that can use this role を求められたら、「Your AWS Account ID」という名前のワークシートフィールドから値を貼り付けます。

    (Snowflakeのアカウントではなく、AWSアカウントIDを使用してください。Snowflakeの ARN は、後でこの IAM のロールに関連付けられます。)

  4. Next: Permissions をクリックします。

  5. 必要に応じて、権限を設定します(Attach permissions policies)。

  6. Next: Tags をクリックします。

  7. 必要に応じて、タグを追加します。

  8. Next: Review をクリックします。

  9. ロール名を入力します。

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

  10. Create role ボタンをクリックします。ロールを作成した後、

    • ワークシートの「新しい IAM ロール ARN」フィールドに Role ARN を記録します。

API Gatewayエンドポイントを作成する

API Gatewayを作成および構成する前に、リージョンエンドポイントとプライベートエンドポイントのどちらを使用するかを選択します。詳細については、 エンドポイントの選択: リージョンエンドポイントとプライベートエンドポイント をご参照ください。

プライベートエンドポイントの使用を計画している場合は、追跡ワークシートに記録した VPC (Virtual Private Cloud) ID が必要です。

API Gatewayエンドポイントを作成するステップは次のとおりです。

  1. AWS Managementコンソールで、 API Gateway を選択します。

  2. Create API を選択します。

  3. エンドポイントのタイプ(地域またはプライベート)を選択します。

    • 地域 エンドポイントを選択する場合は、次のようにします。

      • REST API を探し、 Build ボタンをクリックします。

    • プライベート エンドポイントを選択する場合は、次のようにします。

      • REST API private を探し、 Build ボタンをクリックします。

    重要

    REST API または REST API private を選択してください。HTTP API または他のオプションを選択しないでください。

  4. New API オプションを選択します。

  5. 新しい API の名前を入力します。

    この名前をワークシートの「新しい API 名」フィールドに記録します。

  6. Endpoint Type を選択するように求められた場合は、 Regional または Private のいずれかを選択します。

  7. プライベートエンドポイントを作成する場合は、ワークシートの「Snowflake VPC ID」フィールドに記録されているSnowflake VPC ID を入力します。

    (プライベートエンドポイントを作成していない場合は、 VPC ID を入力する必要はありません。)

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

  9. リソースを作成するには、 Actions をクリックしてから、 Create Resource をクリックします。

    ワークシートの「API Gatewayリソース名」フィールドにリソース名を記録します。

    Create Resource ボタンをクリックします。画面には No methods defined for the resource. が表示されます。

  10. 新しいメソッドを作成するには、 Actions をクリックして Create Method を選択します。

    リソース名の下にある小さなドロップダウンメニューボックスで、 POST を選択し、その横にある灰色のチェックマークをクリックします。

  11. Integration typeLambda Function である必要があります。それがまだ選択されていない場合は、それを選択します。

  12. チェックボックス Use Lambda Proxy integration を選択します。

    Lambdaプロキシ統合を選択することは重要です。Lambdaプロキシ統合なしの JSON は、Lambdaプロキシ統合がある JSON とは異なります。Lambdaプロキシ統合の詳細については、以下の AWS ドキュメントをご参照ください。

  13. Lambda Function フィールドに、ワークシートに記録したLambda関数名を貼り付けます。

  14. Save ボタンをクリックします。

  15. Actions ボタンをクリックして、 Deploy API アクションを選択します。

  16. ステージを選択または作成します。Deploy をクリックします。

  17. リソース名の下に、 POST が表示されます。

    これが表示されない場合は、リソース名の左側にある三角形をクリックして、リソースツリーを展開する必要が生じる場合があります。

  18. POST をクリックし、ワークシートの「リソース呼び出し URL」フィールドに POST リクエストの Invoke URL を記録します。

    呼び出し URL に、作成したリソースの名前が含まれていることを確認します。含まれていない場合は、リソースではなくステージの呼び出し URL をクリックした可能性があります。

  19. Save Changes をクリックします。

API Gatewayのテスト

API GatewayがLambda関数を呼び出せることを確認します。

  1. テスト向けの AWS の手順 に従います。

  2. AWS の手順の適切なステップで、次のテキストを Request Body に貼り付けます。

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

テストを実行すると、右側に Request, Status, Latency, and Response Body が表示されます(スクロールして表示する必要がある場合があります)。

返されたステータスが200の場合、APIゲートウェイが正しいLambda関数を呼び出しました。

(この検証手順では認証がスキップされるため、アクセス許可の問題は明らかになりません。)

Amazon API Gatewayエンドポイントの保護

Amazon API Gatewayエンドポイントといった、プロキシサービスエンドポイントの保護の概要については、 プロキシサービスの保護 をご参照ください。

Amazon API Gatewayエンドポイントのセキュリティを保護するには、

  1. この時点で、 API Gateway情報を表示する画面が表示され、リソースと POST メソッドが表示されます。

    まだそこにいない場合は、次のようにします。

    1. AWS マネジメントコンソールで、 API Gatewayページに移動します。

    2. API Gatewayを選択します。

    3. 左側のペインで、 Resources をクリックします。

    4. POST メソッドをクリックします。(これが表示されない場合は、 Resources ペイン(通常は左から2番目のペイン)でリソースの左側にある三角形をクリックして、リソースツリーを展開します。)

  2. Method Request ARNMethod Request ボックスからワークシートの「メソッドリクエスト ARN」フィールドにコピーします。

  3. タイトル Method Request をクリックします。

  4. Authorization の横にある編集記号をクリックし、 AWS_IAM を選択して、メソッドリクエストに AWS_IAM 認証が必要であることを指定します。

    メニューの横にある小さなチェックマークをクリックして、選択を確認します。

  5. API Gatewayのリソースポリシーを設定して、ゲートウェイエンドポイントを呼び出すことができるユーザーを指定し、API のウィンドウの左側にある列の Resource Policy をクリックします。

    • リージョンのエンドポイント:

      以下のJSON 形式リソースポリシーテンプレートをリソースポリシーエディターに貼り付けてから、以下で説明するように、プレースホルダーをワークシートの適切な値に置き換えます。

      {
          "Version": "2012-10-17",
          "Statement":
          [
              {
              "Effect": "Allow",
              "Principal":
                  {
                  "AWS": "arn:aws:sts::<12-digit-number>:assumed-role/<external_function_role>/snowflake"
                  },
              "Action": "execute-api:Invoke",
              "Resource": "<method_request_ARN>"
              }
          ]
      }
      

      リソースポリシーの次の部分を置き換えます。

      • <12桁の数字> をワークシートに記録したAWSアカウントIDに置き換えます。

      • <外部関数ロール> をワークシートの「New IAM Role Name」フィールドからのロール名に置き換えます。

        たとえば、 AWS のロール名が次の場合、

        arn:aws:iam::987654321098:role/MyNewIAMRole
        

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

        "AWS": "arn:aws:sts::987654321098:assumed-role/MyNewIAMRole/snowflake"
        
      • <メソッドリクエスト ARN> をワークシートの「メソッドリクエスト ARN」フィールドの値に置き換えます。これは、リソースの POST メソッドの ARN です。

        注釈

        リソースをメソッドリクエスト ARN に設定すると、 API Gatewayは指定されたリソースへの呼び出しのみを許可するように指定します。メソッドリクエスト ARN のサブセットをプレフィックスとして指定できます。これにより、同じ API Gatewayから複数のリソースを呼び出すことができます。

        たとえば、メソッドリクエスト ARN が次の場合、

        arn:aws:execute-api:us-west-1:123456789012:a1b2c3d4e5/*/POST/MyResource
        

        次のプレフィックスのみを指定できます。

        arn:aws:execute-api:us-west-1:123456789012:a1b2c3d4e5/*
        
    • プライベートエンドポイント:

      以下のリソースポリシーテンプレートをリソースポリシーエディターに貼り付けてから、以下で説明するように、プレースホルダーをワークシートの適切な値に置き換えます。

      {
          "Version": "2012-10-17",
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:sts::<12-digit-number>:assumed-role/<external_function_role>/snowflake"
                  },
                  "Action": "execute-api:Invoke",
                  "Resource": "<method_request_ARN>",
                  "Condition": {
                      "StringEquals": {
                          "aws:sourceVpc": "<VPC_ID>"
                      }
                  }
              }
          ]
      }
      

      リソースポリシーの次の部分を置き換えます。

      • リージョンのエンドポイントについて、上記のように <12-digit-number><external_function_role><method_request_ARN> を置き換えます。

      • <VPC_ID> をご使用のリージョンのSnowflake VPC ID に置き換えます。これは、ワークシートの「Snowflake VPC ID」フィールドに記録する必要があります。

  6. Save をクリックして、リソースポリシーを保存します。

  7. 更新された API を展開します。これを実行するには、ページ上部のパンくずリストで API 名をクリックします。Actions をクリックしてから、 Deploy API をクリックします。展開ステージを選択し、 Deploy をクリックします。

次のステップでは、Snowflake API 統合オブジェクトを作成します。ここで AWS Managementコンソールウィンドウを閉じないでください。後で戻る必要があります。