> ## Documentation Index
> Fetch the complete documentation index at: https://documentation.onesignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Google Cloud SQL

> Google Cloud SQLからOneSignalにカスタムイベントを同期して、ユーザー行動に基づいた自動化されたJourneysとパーソナライズされたメッセージングキャンペーンをトリガーします。

export const PLATFORM_0 = "Google Cloud SQL"

export const DATA_TYPE_0 = "event table fields"

export const COLUMN_HEADER_0 = "Cloud SQL Field"

export const PROPERTIES_DESCRIPTION_0 = "Event metadata as JSON object"

## 概要

OneSignal + Google Cloud SQLインテグレーションにより、Cloud SQLデータベースからOneSignalへのカスタムイベントの自動同期が可能になります。これにより、管理されたPostgreSQLデータベースに保存されているユーザー行動データに基づいて、自動化されたJourneysとパーソナライズされたメッセージングキャンペーンをトリガーできます。

***

## 要件

* アウトバウンドメッセージイベント用の[Event Streams](/docs/ja/event-streams)へのアクセス（プランの制限と超過料金が適用されます）
* インバウンドイベント同期用の[Custom Events](/docs/ja/custom-events)へのアクセス（プランの制限と超過料金が適用されます）
* [更新されたアカウントプラン](https://onesignal.com/pricing)（無料アプリでは利用できません）

### Google Cloud SQL

* **Cloud SQL for PostgreSQL**インスタンス（バージョン11以降を推奨）
* イベントテーブルへの読み取り権限を持つ**データベースアクセス**
* OneSignalからCloud SQLインスタンスへの**ネットワーク接続**
* 安全な接続のための**Cloud SQL Auth proxy**（推奨）

***

## セットアップ

<Steps>
  <Step title="Cloud SQLデータベースアクセスを構成する">
    イベントテーブルへの読み取り専用アクセスを持つOneSignal専用ユーザーを作成します：

    ```sql theme={null}
    -- Create OneSignal user
    CREATE USER onesignal_reader WITH PASSWORD 'strong_unique_password';

    -- Grant schema access
    GRANT USAGE ON SCHEMA event_data TO onesignal_reader;

    -- Grant table access
    GRANT SELECT ON ALL TABLES IN SCHEMA event_data TO onesignal_reader;

    -- Grant access to future tables
    ALTER DEFAULT PRIVILEGES IN SCHEMA event_data
    GRANT SELECT ON TABLES TO onesignal_reader;
    ```
  </Step>

  <Step title="ネットワークアクセスを構成する">
    OneSignalがCloud SQLインスタンスに接続できることを確認します：

    **オプション1：承認済みネットワーク（パブリックIP）**

    * Google Cloud Consoleで、**SQL > インスタンス**に移動します
    * インスタンスを選択 → **接続** → **ネットワーキング**
    * **承認済みネットワーク**にOneSignal IPアドレスを追加します

    **オプション2：プライベートIP（推奨）**

    * プライベートIPでCloud SQLインスタンスを構成します
    * 安全な接続にはCloud SQL Auth Proxyを使用します
    * 適切なVPCピアリングまたはファイアウォールルールを確保します

    **オプション3：Cloud SQL Auth Proxy**

    * Cloud SQL Auth Proxyをダウンロードして構成します
    * サービスアカウント認証を使用します
    * 安全なプロキシトンネルを介して接続します
  </Step>

  <Step title="Cloud SQL Auth Proxyをセットアップする（推奨）">
    セキュリティを強化するには、Cloud SQL Auth Proxyを使用します：

    ```bash theme={null}
    # Download Cloud SQL Auth Proxy
    curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64

    # Make executable
    chmod +x cloud_sql_proxy

    # Run proxy (replace with your instance connection name)
    ./cloud_sql_proxy -instances=PROJECT:REGION:INSTANCE=tcp:5432
    ```

    Cloud SQL Clientロールを持つサービスアカウントを作成します：

    ```bash theme={null}
    gcloud iam service-accounts create onesignal-cloudsql
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:onesignal-cloudsql@PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/cloudsql.client"
    ```
  </Step>

  <Step title="OneSignalでインテグレーションを追加する">
    OneSignalで、**Data > Integrations**に移動し、**Add Integration**をクリックします。

    **Google Cloud SQL**を選択して、以下を提供します：

    * **Instance Connection Name**: `PROJECT_ID:REGION:INSTANCE_ID`
    * **Database Name**: イベントデータベース名
    * **Username**: `onesignal_reader`
    * **Password**: ステップ1で作成したパスワード
    * **SSL Mode**: `require`（セキュリティのために推奨）
    * **Connection Type**: Direct、Auth Proxy、またはPrivate IPから選択
  </Step>

  <Step title="イベントデータクエリを構成する">
    Cloud SQLデータベースからイベントデータを取得するSQLクエリを定義します：

    ```sql theme={null}
    SELECT
        event_name,
        user_id,
        created_at as event_timestamp,
        properties as event_payload
    FROM event_data.user_events
    WHERE created_at >= CURRENT_TIMESTAMP - INTERVAL '1 hour'
    ORDER BY created_at DESC
    ```

    イベントテーブルに以下が含まれていることを確認してください：

    * イベント名/タイプ（String）
    * ユーザー識別子（String）
    * イベントタイムスタンプ（Timestamp）
    * イベントプロパティ（JSON/JSONB）
  </Step>

  <Step title="接続をテストする">
    **Test Connection**をクリックして、OneSignalがCloud SQLインスタンスに接続し、イベントクエリを正常に実行できることを確認します。
  </Step>
</Steps>

***

### イベントデータマッピング

{PLATFORM_0} {DATA_TYPE_0}をOneSignalのカスタムイベント形式にマッピングします：

| OneSignalフィールド | {COLUMN_HEADER_0} | 説明                         | 必須  |
| -------------- | ----------------- | -------------------------- | --- |
| `name`         | `event_name`      | イベント識別子                    | はい  |
| `external_id`  | `user_id`         | ユーザー識別子                    | はい  |
| `timestamp`    | `event_timestamp` | イベントが発生した時刻                | いいえ |
| `properties`   | `event_data`      | {PROPERTIES_DESCRIPTION_0} | いいえ |

***

## 高度な構成

### 接続プーリング

大量のイベント同期のためにデータベース接続を最適化します：

```sql theme={null}
-- Check current connection limits
SELECT * FROM pg_stat_activity WHERE datname = 'your_database';

-- Optimize for OneSignal connections
ALTER SYSTEM SET max_connections = 200;
ALTER SYSTEM SET shared_preload_libraries = 'pg_stat_statements';
```

### クエリの最適化

イベントクエリのパフォーマンスを向上させます：

```sql theme={null}
-- Create index on timestamp for efficient filtering
CREATE INDEX idx_events_created_at ON user_events(created_at);

-- Create composite index for user-based queries
CREATE INDEX idx_events_user_time ON user_events(user_id, created_at);

-- Analyze query performance
EXPLAIN ANALYZE
SELECT event_name, user_id, created_at, properties
FROM user_events
WHERE created_at >= NOW() - INTERVAL '1 hour';
```

### JSONデータの処理

イベントプロパティにJSONBを使用している場合は、JSONクエリを最適化します：

```sql theme={null}
-- Create GIN index for JSON properties
CREATE INDEX idx_events_properties ON user_events USING GIN(properties);

-- Query specific JSON properties
SELECT
    event_name,
    user_id,
    properties->>'purchase_amount' as amount,
    properties->>'product_id' as product
FROM user_events
WHERE properties->>'event_type' = 'purchase';
```

<Warning>
  OneSignalがイベントデータをクエリするときに、Cloud SQLインスタンスのパフォーマンスを監視してください。本番環境のパフォーマンスに影響を与えないように、分析ワークロードには読み取りレプリカの使用を検討してください。
</Warning>

***

## FAQ

### OneSignalはCloud SQLからイベントをどのくらいの頻度で同期しますか？

OneSignalは、構成されたスケジュールに基づいてイベントデータを同期し、最小間隔は15分です。

### イベント同期にCloud SQL読み取りレプリカを使用できますか？

はい、読み取りレプリカの使用は、分析クエリを本番データベースワークロードから分離するために推奨されます。

### Cloud SQLインスタンスが一時的に使用できない場合はどうなりますか？

OneSignalは、エクスポネンシャルバックオフで接続を再試行します。インスタンスに再びアクセスできるようになると、イベント同期が自動的に再開されます。
