Snowflake

Snowflake API IntegrationsでExternal Function連携を構築する方法

2026-03-26
更新: 2026-03-27
NicheeLab編集部
目次
  1. API Integration × External Functionのアーキテクチャ
  2. AWS向けAPI Integrationの作成
  3. Azure向けAPI Integrationの作成
  4. GCP向けAPI Integrationの作成
  5. クラウド別設定比較表
  6. External Functionの作成と呼び出し
  7. セキュリティ設計のポイント
  8. API Integrationの管理コマンド
  9. トラブルシューティング
  10. 問題で確認
  11. よくある質問

API Integrationは、SnowflakeからExternal Function経由で外部のREST APIを 安全に呼び出すための認証・接続設定オブジェクトです。 AWS API Gateway、Azure API Management、Google Cloud API Gatewayとの統合をサポートし、 SQLクエリの中からML推論・ジオコーディング・翻訳などの外部サービスを直接利用できます。

API Integration × External Functionのアーキテクチャ

API Integrationは、SnowflakeのCloud Services LayerとクラウドプロバイダーのAPI Gateway間の認証チャネルを確立するオブジェクトです。実際のデータフローは以下の通りです。

SQLクエリ
  → Virtual Warehouse (External Function呼び出し)
    → Cloud Services Layer (API Integration認証)
      → API Gateway (AWS / Azure / GCP)
        → バックエンド (Lambda / Azure Functions / Cloud Functions)
          → レスポンスをSnowflakeに返却

API Integrationが担うのは「Snowflakeのサービスアカウント ↔ API Gatewayのアクセス制御」の信頼関係の確立です。実際のHTTPリクエスト送信はExternal Functionが行います。

AWS向けAPI Integrationの作成

-- AWS API Gateway用のAPI Integration
CREATE OR REPLACE API INTEGRATION aws_ml_api
  API_PROVIDER = aws_api_gateway
  API_AWS_ROLE_ARN = 'arn:aws:iam::123456789012:role/snowflake-api-role'
  API_ALLOWED_PREFIXES = ('https://abc123.execute-api.us-east-1.amazonaws.com/prod/')
  ENABLED = TRUE;

-- 作成後にSnowflakeのIAM情報を取得
DESCRIBE INTEGRATION aws_ml_api;
-- → API_AWS_IAM_USER_ARN と API_AWS_EXTERNAL_ID を確認
-- → AWS側のIAMロール信頼ポリシーにこれらを設定

AWS IAMロール信頼ポリシーの設定

{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Principal": {
      "AWS": "<API_AWS_IAM_USER_ARN>"
    },
    "Action": "sts:AssumeRole",
    "Condition": {
      "StringEquals": {
        "sts:ExternalId": "<API_AWS_EXTERNAL_ID>"
      }
    }
  }]
}

Azure向けAPI Integrationの作成

-- Azure API Management用のAPI Integration
CREATE OR REPLACE API INTEGRATION azure_translate_api
  API_PROVIDER = azure_api_management
  AZURE_TENANT_ID = 'a1b2c3d4-e5f6-7890-abcd-ef1234567890'
  AZURE_AD_APPLICATION_ID = 'f1e2d3c4-b5a6-7890-abcd-ef0987654321'
  API_ALLOWED_PREFIXES = ('https://my-apim.azure-api.net/translate/')
  ENABLED = TRUE;

-- DESCRIBE INTEGRATIONでAZURE_MULTI_TENANT_APP_NAMEを取得
-- Azure AD側でサービスプリンシパルに権限を付与

GCP向けAPI Integrationの作成

-- Google Cloud API Gateway用のAPI Integration
CREATE OR REPLACE API INTEGRATION gcp_geocode_api
  API_PROVIDER = google_api_gateway
  GOOGLE_AUDIENCE = 'https://my-gateway-abc123.uc.gateway.dev'
  API_ALLOWED_PREFIXES = ('https://my-gateway-abc123.uc.gateway.dev/geocode/')
  ENABLED = TRUE;

-- DESCRIBE INTEGRATIONでAPI_GCP_SERVICE_ACCOUNTを取得
-- GCP側でこのサービスアカウントにInvoker権限を付与

クラウド別設定比較表

項目AWSAzureGCP
API_PROVIDER値aws_api_gatewayazure_api_managementgoogle_api_gateway
認証方式IAMロール + ExternalIdAzure AD サービスプリンシパルGCPサービスアカウント
DESCRIBE後の設定先IAMロール信頼ポリシーAzure ADアプリ登録IAM Invoker権限
API Gateway製品Amazon API GatewayAzure API ManagementGoogle Cloud API Gateway

External Functionの作成と呼び出し

-- External Functionを作成してAPI Integrationを紐付け
CREATE OR REPLACE EXTERNAL FUNCTION sentiment_analysis(text VARCHAR)
  RETURNS VARIANT
  API_INTEGRATION = aws_ml_api
  AS 'https://abc123.execute-api.us-east-1.amazonaws.com/prod/sentiment';

-- SQLクエリ内でExternal Functionを呼び出し
SELECT
  review_id,
  review_text,
  sentiment_analysis(review_text) AS sentiment_result
FROM product_reviews
LIMIT 100;

-- バッチ処理: INSERT INTO ... SELECT で結果を永続化
INSERT INTO product_reviews_enriched
SELECT
  review_id,
  review_text,
  sentiment_analysis(review_text):sentiment::VARCHAR AS sentiment,
  sentiment_analysis(review_text):confidence::FLOAT AS confidence
FROM product_reviews;

セキュリティ設計のポイント

  • API_ALLOWED_PREFIXESを最小限に:ワイルドカード的に広いプレフィックスを指定せず、必要なエンドポイントパスのみを許可する
  • API_BLOCKED_PREFIXESで追加制御:許可プレフィックス内の特定パスを除外したい場合に使用する
  • USAGE権限の管理:API Integrationに対するUSAGE権限をGRANTするロールを限定し、不要なロールからは取り消す
  • バックエンド側の認証も併用:API Gateway側でもAPIキーやOAuth2トークン検証を設定し、多層防御を構築する

API Integrationの管理コマンド

-- 一覧表示
SHOW API INTEGRATIONS;

-- 詳細確認
DESCRIBE INTEGRATION aws_ml_api;

-- 無効化(External Functionの呼び出しが全てブロックされる)
ALTER API INTEGRATION aws_ml_api SET ENABLED = FALSE;

-- 再有効化
ALTER API INTEGRATION aws_ml_api SET ENABLED = TRUE;

-- 削除(参照するExternal Functionを先に削除する必要あり)
DROP API INTEGRATION aws_ml_api;

トラブルシューティング

エラー原因対処
Error assuming AWS roleIAMロール信頼ポリシーの設定ミスDESCRIBE INTEGRATIONのARNとExternalIdを再確認し、AWS側の信頼ポリシーに正しく設定する
Request URL not allowedAPI_ALLOWED_PREFIXESにURLが含まれていないExternal FunctionのAS句のURLがプレフィックスに一致するか確認する
Integration is disabledENABLED = FALSEALTER INTEGRATION ... SET ENABLED = TRUEで有効化する
HTTP 403 from API GatewayAPI Gateway側の認可エラークラウド側のIAM/サービスプリンシパルの権限設定を確認する

問題で確認

Security & Integrations

問題 1

AWS API Gatewayと連携するAPI Integrationを作成した後、External Functionの呼び出しで 'Error assuming AWS role' エラーが発生した。最も可能性の高い原因はどれか。

  1. External FunctionのAS句に指定したURLがHTTPSではなくHTTPになっている
  2. API IntegrationのAPI_ALLOWED_PREFIXESに末尾スラッシュが不足している
  3. AWS IAMロールの信頼ポリシーにDESCRIBE INTEGRATIONで取得したARNとExternalIdが正しく設定されていない
  4. External Functionの戻り値の型がVARCHARではなくVARIANTになっている

正解: C

'Error assuming AWS role'はSnowflakeのサービスアカウントがAWS IAMロールを引き受け(AssumeRole)できないことを意味します。DESCRIBE INTEGRATIONで取得したAPI_AWS_IAM_USER_ARNとAPI_AWS_EXTERNAL_IDをAWS側のIAMロール信頼ポリシーに正しく設定する必要があります。URLプロトコルや戻り値型の問題ではこのエラーは発生しません。

よくある質問

API IntegrationのAPI_ALLOWED_PREFIXESとAPI_BLOCKED_PREFIXESの優先順位はどうなりますか?

API_BLOCKED_PREFIXESが優先されます。あるURLがAPI_ALLOWED_PREFIXESに一致していても、同時にAPI_BLOCKED_PREFIXESにも一致する場合はブロックされます。運用上はAPI_ALLOWED_PREFIXESで必要最小限のエンドポイントを許可し、API_BLOCKED_PREFIXESは特定パスの除外が必要な場合のみ使用するのがベストプラクティスです。

1つのAPI Integrationを複数のExternal Functionで共有できますか?

はい、可能です。1つのAPI Integrationに対して複数のExternal Functionを作成でき、各External Functionが異なるエンドポイントパスを呼び出せます。同一のAPI Gateway配下に複数の関数エンドポイントがある場合は、API Integrationを共有してAPI_ALLOWED_PREFIXESでまとめて許可するのが効率的です。

API Integrationの作成にはどのEditionが必要ですか?

API IntegrationはStandard Edition以上のすべてのEditionで利用可能です。ただし、External Functionの呼び出しにはVirtual Warehouseが必要であり、呼び出し回数に比例してクレジットを消費します。また、クラウドプロバイダー側のAPI Gateway料金も別途発生するため、コスト見積もりではSnowflake側とクラウド側の両方を考慮する必要があります。

クラウドの基礎から読む

資格の話をしない、クラウドそのものの入門 8 章があります。登録なしで全部読めます。

第 0 部・無料

クラウド自体がはじめての方へ

サーバー・ネットワーク・データベースの前提知識なしで読める 8 章。登録不要・無料。

この記事で学んだ内容を問題で確認しましょう

16,000問以上の問題で実力チェック

無料で問題を解いてみる
この記事の著者

NicheeLab編集部

データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。


関連記事
Snowflake

Snowflake資格一覧|全11試験(SnowPro)の難易度・費用

Snowflake認定資格(SnowPro)全11試験の一覧・難易度・費用・出題範囲を徹底解説。SnowparkとDat...

Snowflake

Snowflake試験の難易度ランキング|全11資格を徹底比較

Snowflake(SnowPro)認定全11試験の難易度をランキング形式で比較。学習時間・合格に必要なスキルから分析。...

Snowflake

Snowflake資格の勉強方法|効率的な学習ルートと合格のコツ

Snowflake認定資格(SnowPro)に最短で合格するための勉強方法。公式リソース・学習スケジュールを徹底ガイド。...

Snowflake

SnowPro Core試験完全解説|出題範囲・問題例・合格戦略

SnowPro Core Certification(COF-C03)を徹底解説。出題範囲・100問の試験形式・合格ライ...

Snowflake

SnowPro Platform Associate(SOL-C01)完全解説|現在は予約不可・試験内容と次の受験先

SnowPro Associate: Platform(SOL-C01)は2026年10月時点でSnowflakeの公式...

Snowflakeの記事一覧 (102件)
© 2026 NicheeLab All rights reserved.