API Integrationは、SnowflakeからExternal Function経由で外部のREST APIを 安全に呼び出すための認証・接続設定オブジェクトです。 AWS API Gateway、Azure API Management、Google Cloud API Gatewayとの統合をサポートし、 SQLクエリの中からML推論・ジオコーディング・翻訳などの外部サービスを直接利用できます。
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 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ロール信頼ポリシーにこれらを設定{
"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 Management用のAPI Integration
CREATE OR REPLACE API INTEGRATION azure_translate_api
API_PROVIDER = azure_api_management
AZURE_TENANT_ID = 'a]1b2c3d4-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側でサービスプリンシパルに権限を付与-- 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権限を付与| 項目 | AWS | Azure | GCP |
|---|---|---|---|
| API_PROVIDER値 | aws_api_gateway | azure_api_management | google_api_gateway |
| 認証方式 | IAMロール + ExternalId | Azure AD サービスプリンシパル | GCPサービスアカウント |
| DESCRIBE後の設定先 | IAMロール信頼ポリシー | Azure ADアプリ登録 | IAM Invoker権限 |
| API Gateway製品 | Amazon API Gateway | Azure API Management | Google Cloud API Gateway |
-- 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;-- 一覧表示
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 role | IAMロール信頼ポリシーの設定ミス | DESCRIBE INTEGRATIONのARNとExternalIdを再確認し、AWS側の信頼ポリシーに正しく設定する |
| Request URL not allowed | API_ALLOWED_PREFIXESにURLが含まれていない | External FunctionのAS句のURLがプレフィックスに一致するか確認する |
| Integration is disabled | ENABLED = FALSE | ALTER INTEGRATION ... SET ENABLED = TRUEで有効化する |
| HTTP 403 from API Gateway | API Gateway側の認可エラー | クラウド側のIAM/サービスプリンシパルの権限設定を確認する |
Security & Integrations
問題 1
AWS API Gatewayと連携するAPI Integrationを作成した後、External Functionの呼び出しで 'Error assuming AWS role' エラーが発生した。最も可能性の高い原因はどれか。
正解: 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側とクラウド側の両方を考慮する必要があります。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
Snowflake資格一覧|全11試験(SnowPro)の難易度・費用
Snowflake認定資格(SnowPro)全11試験の一覧・難易度・費用・出題範囲を徹底解説。...
Snowflake試験の難易度ランキング|全11資格を徹底比較
Snowflake(SnowPro)認定全11試験の難易度をランキング形式で比較。学習時間・合格に必要なスキルから分析。...
Snowflake資格の勉強方法|効率的な学習ルートと合格のコツ
Snowflake認定資格(SnowPro)に最短で合格するための勉強方法。公式リソース・学習スケジュールを徹底ガイド。...
SnowPro Core試験完全解説|出題範囲・問題例・合格戦略
SnowPro Core Certification(COF-C03)を徹底解説。出題範囲・100問の試験形式・合格ライ...
SnowPro Platform Associate完全解説|入門試験の攻略
SnowPro Associate: Platform Certification(SOL-C01)を徹底解説。最も簡単...