---
title: 【Snowflake×Notion】外部アクセス統合でSnowflakeからNotionAPIを実行しデータベース情報を取得する
description: Snowflakeの外部アクセス統合(External Access Integration)を作成することで、様々な外部APIを実行することができます。本記事ではSnowflakeからNotionAPIを実行しデータベース情報を取得する方法を紹介します。
---

[Snowflake Knowledge - INSIGHT LAB](https://knowledge.insight-lab.co.jp/snowflake)

# [【Snowflake×Notion】外部アクセス統合でSnowflakeからNotionAPIを実行しデータベース情報を取得する](https://knowledge.insight-lab.co.jp/snowflake/-external_access_integration_notion_api)

 作成者: [uta](https://knowledge.insight-lab.co.jp/snowflake/author/uta)｜2023年10月11日

こんにちは、utaです。  
先月公開されたミステリー映画を観てからというもの、ドラマ鑑賞にすっかりハマってしまいました...。ドラマを観つつ、先月パブリックプレビューとなったSnowflakeの外部アクセス統合(External Access Integration)を試してみたので紹介したいと思います。

## はじめに

Snowflakeの「外部アクセス統合」という機能をご存知でしょうか？

外部アクセス統合とは、Snowflakeの**UDFやプロシージャから外部APIの実行を可能にする**ためのオブジェクトです。接続方法や認証情報といった制限管理も簡単かつ柔軟に行うことができ、データ取得やデータ配信をSnowflake上で完結できます。

本記事では、NotionAPIを例にNotionデータベースのデータをjson形式で取得しますが、他のAPIも実行することも可能です。各オブジェクトの簡単な説明も含めているので、皆さんのよく使うAPIで試してみてください。

 

## 環境

- snowsight（Snowflake UI）

 

## 事前準備

- Notion Integration設定
- Notion Database IDの取得

↑取得するNotionデータベース（サンプル）

 

## 用語

本ナレッジで出てくる用語のざっくりとした説明を載せておきます。

### Secret

外部API認証で使用する認証情報を保存するSnowflakeオブジェクト。  
（スキーマレベルオブジェクト）  
[https://docs.snowflake.com/ja/user-guide/api-authentication](https://docs.snowflake.com/ja/user-guide/api-authentication)

### Network Rule

外部ネットワークへのアクセス方法や接続先を、許可またはブロックするルールを定義したSnowflakeオブジェクト。  
（スキーマレベルオブジェクト）  
[https://docs.snowflake.com/en/sql-reference/sql/create-network-rule](https://docs.snowflake.com/en/sql-reference/sql/create-network-rule)

### External Access Integration

外部アクセス統合にSecretの認証情報とNetwork Ruleのアクセス方法に従い、ユーザー定義関数 (UDF) およびストアド プロシージャから外部ネットワークにアクセスを有効にすることができます。  
（アカウントオブジェクト）  
[https://docs.snowflake.com/en/sql-reference/sql/create-external-access-integration](https://docs.snowflake.com/en/sql-reference/sql/create-external-access-integration)

 

## 使用例

 

### Secretの作成

NotionAPIは、Notionで生成したシークレットトークンとデータベースIDでアクセスするので、typeはgeneric\_stringでsecret\_stringにNotionのインテグレーション作成で生成されたトークンを設定します。

| **設定項目** | **設定内容** |
| --- | --- |
| type | 認証情報のタイプ |
| secret\_string | シークレットキーの文字列 |

[https://docs.snowflake.com/ja/sql-reference/sql/create-secret](https://docs.snowflake.com/ja/sql-reference/sql/create-secret)

 

### Network Ruleの作成

NotionAPIは、Snowflake側からNotionのドメインに向けてリクエストを送信してデータベース情報を取得します。typeはhost\_post、value\_listはドメイン、modeはegressを設定します。

` `

| **設定項目** | **設定内容** |
| --- | --- |
| type | 認証方式 |
| value\_list | 外部APIドメイン |
| mode | アクセス方法 |

[https://docs.snowflake.com/en/sql-reference/sql/create-network-rule](https://docs.snowflake.com/en/sql-reference/sql/create-network-rule)

 

### External Access Integrationの作成

UDFからNotionAPIを呼び出すため、外部アクセス統合を作成します。さきほど作成したシークレットとネットワークルールをそれぞれ、**allowed\_network\_rules** と**allowed\_authentication\_secrets** に設定します。また、この統合を有効な状態にするためenabledは**true**に設定しています。

` `

※アカウントオブジェクトのためaccountadminを使用しています

| **設定項目** | **設定内容** |
| --- | --- |
| allowed\_network\_rules | 外部アクセス統合に適用するネットワークルール |
| allowed\_authentication\_secrets | 外部アクセス統合での接続に使用するシークレット |
| enabled | 外部アクセス統合の有効化 |

[https://docs.snowflake.com/en/sql-reference/sql/create-external-access-integration](https://docs.snowflake.com/en/sql-reference/sql/create-external-access-integration)

 

### UDFの作成

Python UDFを定義し、引数にデータベースIDを設定して、外部アクセス統合を経由してNotionへリクエストを送信し返ってきたjson形式のデータベース情報を返します。

| **設定項目** | **設定内容** |
| --- | --- |
| handler | UDFが呼び出されたときに実行される関数 |
| external\_access\_integrations | UDFから外部ネットワークにアクセスするために使用する外部アクセス統合 |
| packages | UDFで使用するパッケージを設定（一部） |
| secrets | このUDFから外部ネットワークへのアクセスで使用するシークレット |

 

### APIの実行

引数に取得したいデータベースのデータベースIDを指定して関数を実行すると、json形式でデータベース情報が返ってきます。（NotionAPIから返ってくる半構造化データはかなり複雑なので展開するのは結構大変です）

↑関数の実行結果

 

## おわりに

外部アクセス統合を使用することで、これまで外部環境で実行していた外部APIをSnowflakeから実行できました。APIの実行には、ロールで管理できるスキーマレベルオブジェクトのシークレットとネットワークルールを使用しているため、安全かつ管理しやすいものとなっています。

シークレットにはトークン以外でもユーザ名+パスワードでの設定も可能です。ネットワークルールでは「外から内」だけでなく「内から外」といったアクセス設定も可能なので、利用できるAPIサービスはかなり多いと思います。

データ分析基盤を運用するうえで、APIは少なからず関わってくる要素の一つだと思うので、Snowflakeから簡単に利用できる外部アクセス統合をぜひ使ってみてください！！

[完全な記事を表示](https://knowledge.insight-lab.co.jp/snowflake/-external_access_integration_notion_api)

```json
{
  "@context" : "http://schema.org",
  "@type" : "BlogPosting",
  "author" : {
    "@type" : "Person",
    "name" : "uta"
  },
  "dateModified" : "2023-10-11T07:58:56.513Z",
  "datePublished" : "2023-10-11T07:58:56Z",
  "headline" : "【Snowflake×Notion】外部アクセス統合でSnowflakeからNotionAPIを実行しデータベース情報を取得する",
  "image" : {
    "@type" : "ImageObject",
    "height" : 188,
    "url" : "https://download.insight-lab.co.jp/hubfs/integration_snowflake_notion.png",
    "width" : 508
  },
  "mainEntityOfPage" : "https://knowledge.insight-lab.co.jp/snowflake/-external_access_integration_notion_api",
  "publisher" : {
    "@type" : "Organization",
    "logo" : {
      "@type" : "ImageObject",
      "height" : 60,
      "url" : "/hs/hsstatic/content_shared_assets/static-1.4092/img/default-amp-logo.png",
      "width" : 60
    },
    "name" : "snowflakeナレッジ"
  }
}
```