パブリック IP 接続の構成

ここでは、Cloud SQL インスタンスで使用するパブリック IP 接続を構成する方法を説明します。

はじめに

パブリック IPv4 アドレスを使用するように Cloud SQL インスタンスを構成し、特定の IP アドレスまたはアドレス範囲からの接続を受け入れるには、承認済みアドレスをインスタンスに追加します。

承認済みネットワークとしてプライベート ネットワーク(10.x.x.x など)を指定することはできません。

PostgreSQL インスタンスのパブリック IP アドレス:

  • IPv6: インスタンスは IPv6 をサポートしていません。
  • IPv4: インスタンスには静的 IPv4 アドレスが自動的に割り当てられます。インスタンスがオフ(非アクティブ)の間も常に、IP アドレスにわずかな料金がかかります。

IP 接続を使用して管理クライアントをインスタンスに接続する方法については、IP アドレスを使用して PSQL クライアントを接続するをご覧ください。

パブリック IP アドレスを使用して接続を受け入れるようにインスタンスを構成する場合は、SSL を使用してデータを保護するように構成する必要もあります。詳細については、インスタンス用に SSL を構成するをご覧ください。

公共のインターネットに公開されない IP アドレスでインスタンスを構成するには、プライベート IP 接続を構成するの手順に従います。

パブリック IP を有効にして、承認済みアドレスまたはアドレス範囲を追加する

インスタンスのパブリック IP を有効にすると、Cloud SQL は、公共のインターネットの静的な IPv4 アドレスを使用してインスタンスを構成します。パブリック IP を有効にしたら、データベース接続の承認を設定する必要があります。詳細については、承認のオプションをご覧ください。

パブリック IP を有効にして承認済みアドレスを追加するには:

Console

  1. Google Cloud Console で、Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. インスタンス名をクリックして [概要] ページを開きます。
  3. SQL ナビゲーション メニューから [接続] を選択します。
  4. [パブリック IP] チェックボックスをオンにします。
  5. [ネットワークを追加] をクリックします。
  6. [ネットワーク] フィールドに、接続を許可する IP アドレスまたはアドレス範囲を入力します。

    CIDR 表記を使用します。

  7. 必要に応じて、このエントリの名前を入力します。
  8. [Done] をクリックします。
  9. [保存] をクリックしてインスタンスを更新します。

gcloud

  1. IPv4 アドレスをまだインスタンスに追加していない場合は、次のコマンドを使用して追加します。
    gcloud sql instances patch INSTANCE_NAME\
    --assign-ip
    
  2. インスタンスを記述して、既存のすべての承認済みアドレスを表示します。
    gcloud sql instances describe INSTANCE_NAME
    

    ipConfiguration の下で authorizedNetwork エントリを探し、維持する承認済みアドレスをメモします。

  3. 承認済みネットワークのリストを更新して、必要なすべてのアドレスを追加します。
    gcloud sql instances patch INSTANCE_NAME \
    --authorized-networks=IP_ADDR1,IP_ADDR2...
    

    CIDR 表記を使用します。

  4. 変更を確定します。
    gcloud sql instances describe INSTANCE_NAME
    

REST v1

  1. インスタンスを記述して、既存のすべての認可済みアドレスを表示します。

    リクエストのデータを使用する前に、次のように置き換えます。

    • project-id: プロジェクト ID
    • instance-id: インスタンス ID
    • machine-type: インスタンスのマシンタイプ
    • zone: インスタンス ゾーン

    HTTP メソッドと URL:

    GET  https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id?fields=settings

    リクエストを送信するには、次のいずれかのオプションを展開します。

    次のような JSON レスポンスが返されます。

  2. インスタンスに設定するすべてのアドレスが含まれるように、インスタンスを更新します。

    リクエストのデータを使用する前に、次のように置き換えます。

    • project-id: プロジェクト ID
    • instance-id: インスタンス ID
    • network_range_1: 認可済みの IP アドレスまたは範囲
    • network_range_2: 別の認可済み IP アドレスまたは範囲

    HTTP メソッドと URL:

    PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id

    JSON 本文のリクエスト:

    {
      "settings":
      {
        "ipConfiguration":
        {
          "authorizedNetworks":
            [{"value": "network_range_1"}, {"value": network_range_2"}]
        }
      }
    }
    

    リクエストを送信するには、次のいずれかのオプションを展開します。

    次のような JSON レスポンスが返されます。

    CIDR 表記を使用します。

  3. 変更を確定します。

    リクエストのデータを使用する前に、次のように置き換えます。

    • project-id: プロジェクト ID
    • instance-id: インスタンス ID
    • ip-address1: 最初の IP アドレスの CIDR 形式
    • ip-address-name1: 最初の IP アドレスの名前
    • ip-address2: 2 番目の IP アドレスの CIDR 形式
    • ip-address-name2: 2 番目の IP アドレスの名前
    • machine-type: インスタンスのマシンタイプ
    • zone: インスタンス ゾーン

    HTTP メソッドと URL:

    GET  https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id?fields=settings

    リクエストを送信するには、次のいずれかのオプションを展開します。

    次のような JSON レスポンスが返されます。

REST v1beta4

  1. インスタンスを記述して、既存のすべての認可済みアドレスを表示します。

    リクエストのデータを使用する前に、次のように置き換えます。

    • project-id: プロジェクト ID
    • instance-id: インスタンス ID
    • machine-type: インスタンスのマシンタイプ
    • zone: インスタンス ゾーン

    HTTP メソッドと URL:

    GET  https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id?fields=settings

    リクエストを送信するには、次のいずれかのオプションを展開します。

    次のような JSON レスポンスが返されます。

  2. インスタンスに設定するすべてのアドレスが含まれるように、インスタンスを更新します。

    リクエストのデータを使用する前に、次のように置き換えます。

    • project-id: プロジェクト ID
    • instance-id: インスタンス ID
    • network_range_1: 認可済みの IP アドレスまたは範囲
    • network_range_2: 別の認可済み IP アドレスまたは範囲

    HTTP メソッドと URL:

    PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

    JSON 本文のリクエスト:

    {
      "settings":
      {
        "ipConfiguration":
        {
          "authorizedNetworks":
            [{"value": "network_range_1"}, {"value": network_range_2"}]
        }
      }
    }
    

    リクエストを送信するには、次のいずれかのオプションを展開します。

    次のような JSON レスポンスが返されます。

    CIDR 表記を使用します。

  3. 変更を確定します。

    リクエストのデータを使用する前に、次のように置き換えます。

    • project-id: プロジェクト ID
    • instance-id: インスタンス ID
    • ip-address1: 最初の IP アドレスの CIDR 形式
    • ip-address-name1: 最初の IP アドレスの名前
    • ip-address2: 2 番目の IP アドレスの CIDR 形式
    • ip-address-name2: 2 番目の IP アドレスの名前
    • machine-type: インスタンスのマシンタイプ
    • zone: インスタンス ゾーン

    HTTP メソッドと URL:

    GET  https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id?fields=settings

    リクエストを送信するには、次のいずれかのオプションを展開します。

    次のような JSON レスポンスが返されます。

承認済みアドレスまたはアドレス範囲の削除

承認済みアドレスを削除するには、次の手順を実行します。

Console

  1. Google Cloud Console で、Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. インスタンス名をクリックして [概要] ページを開きます。
  3. SQL ナビゲーション メニューから [接続] を選択します。
  4. 削除するアドレスの削除アイコン 削除 をクリックします。
  5. [保存] をクリックしてインスタンスを更新します。

gcloud

  1. インスタンスを記述して、既存のすべての承認済みアドレスを表示します。
    gcloud sql instances describe INSTANCE_NAME
    

    ipConfiguration の下で authorizedNetwork エントリを探し、維持する承認済みアドレスをメモします。

  2. 承認済みネットワーク リストを更新し、削除するアドレスを削除します。
    gcloud sql instances patch INSTANCE_NAME \
    --authorized-networks=IP_ADDR1,IP_ADDR2...
    
  3. 変更を確定します。
    gcloud sql instances describe INSTANCE_NAME
    

REST v1

  1. インスタンスを記述して、既存のすべての認可済みアドレスを表示します。

    リクエストのデータを使用する前に、次のように置き換えます。

    • project-id: プロジェクト ID
    • instance-id: インスタンス ID
    • ip-address1: 最初の IP アドレスの CIDR 形式
    • ip-address-name1: 最初の IP アドレスの名前
    • ip-address2: 2 番目の IP アドレスの CIDR 形式
    • ip-address-name2: 2 番目の IP アドレスの名前
    • machine-type: インスタンスのマシンタイプ
    • zone: インスタンス ゾーン

    HTTP メソッドと URL:

    GET  https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id?fields=settings

    リクエストを送信するには、次のいずれかのオプションを展開します。

    次のような JSON レスポンスが返されます。

  2. 保持するすべてのアドレスを含め、削除するすべてのアドレスを削除して、インスタンスを更新します。

    リクエストのデータを使用する前に、次のように置き換えます。

    • project-id: プロジェクト ID
    • instance-id: インスタンス ID
    • network_range_1: 削除する認可済み IP アドレスまたはネットワーク範囲

    HTTP メソッドと URL:

    PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id

    JSON 本文のリクエスト:

    {
      "settings":
      {
        "ipConfiguration":
        {
          "authorizedNetworks":
            [{"value": "network_range_1"}]
        }
      }
    }
    
    

    リクエストを送信するには、次のいずれかのオプションを展開します。

    次のような JSON レスポンスが返されます。

  3. 変更を確定します。

    リクエストのデータを使用する前に、次のように置き換えます。

    • project-id: プロジェクト ID
    • instance-id: インスタンス ID
    • ip-address: IP アドレスの CIDR 形式
    • ip-address-name: IP アドレスの名前
    • machine-type: インスタンスのマシンタイプ
    • zone: インスタンス ゾーン

    HTTP メソッドと URL:

    GET  https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id?fields=settings

    リクエストを送信するには、次のいずれかのオプションを展開します。

    次のような JSON レスポンスが返されます。

REST v1beta4

  1. インスタンスを記述して、既存のすべての認可済みアドレスを表示します。

    リクエストのデータを使用する前に、次のように置き換えます。

    • project-id: プロジェクト ID
    • instance-id: インスタンス ID
    • ip-address1: 最初の IP アドレスの CIDR 形式
    • ip-address-name1: 最初の IP アドレスの名前
    • ip-address2: 2 番目の IP アドレスの CIDR 形式
    • ip-address-name2: 2 番目の IP アドレスの名前
    • machine-type: インスタンスのマシンタイプ
    • zone: インスタンス ゾーン

    HTTP メソッドと URL:

    GET  https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id?fields=settings

    リクエストを送信するには、次のいずれかのオプションを展開します。

    次のような JSON レスポンスが返されます。

  2. 保持するすべてのアドレスを含め、削除するすべてのアドレスを削除して、インスタンスを更新します。

    リクエストのデータを使用する前に、次のように置き換えます。

    • project-id: プロジェクト ID
    • instance-id: インスタンス ID
    • network_range_1: 削除する認可済み IP アドレスまたはネットワーク範囲

    HTTP メソッドと URL:

    PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

    JSON 本文のリクエスト:

    {
      "settings":
      {
        "ipConfiguration":
        {
          "authorizedNetworks":
            [{"value": "network_range_1"}]
        }
      }
    }
    
    

    リクエストを送信するには、次のいずれかのオプションを展開します。

    次のような JSON レスポンスが返されます。

  3. 変更を確定します。

    リクエストのデータを使用する前に、次のように置き換えます。

    • project-id: プロジェクト ID
    • instance-id: インスタンス ID
    • ip-address: IP アドレスの CIDR 形式
    • ip-address-name: IP アドレスの名前
    • machine-type: インスタンスのマシンタイプ
    • zone: インスタンス ゾーン

    HTTP メソッドと URL:

    GET  https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id?fields=settings

    リクエストを送信するには、次のいずれかのオプションを展開します。

    次のような JSON レスポンスが返されます。

すべてのパブリック IP 接続を拒否するためのインスタンスの構成

すべてのパブリック IP 接続を拒否するようにインスタンスを構成するには、次の手順に従います。

Console

  1. Google Cloud Console で、Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. インスタンス名をクリックして [概要] ページを開きます。
  3. SQL ナビゲーション メニューから [接続] を選択します。
  4. 承認済みのすべてのアドレスの削除アイコン 削除 をクリックします。
  5. [保存] をクリックしてインスタンスを更新します。

gcloud

  1. 承認済みアドレスリストをクリアします。
    gcloud sql instances patch INSTANCE_NAME \
    --clear-authorized-networks
    
  2. 変更を確定します。
    gcloud sql instances describe INSTANCE_NAME
    

REST v1

  1. インスタンスを記述して、既存のすべての認可済みアドレスを表示します。

    リクエストのデータを使用する前に、次のように置き換えます。

    • project-id: プロジェクト ID
    • instance-id: インスタンス ID
    • ip-address1: 最初の IP アドレスの CIDR 形式
    • ip-address-name1: 最初の IP アドレスの名前
    • ip-address2: 2 番目の IP アドレスの CIDR 形式
    • ip-address-name2: 2 番目の IP アドレスの名前
    • machine-type: インスタンスのマシンタイプ
    • zone: インスタンス ゾーン

    HTTP メソッドと URL:

    GET  https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id?fields=settings

    リクエストを送信するには、次のいずれかのオプションを展開します。

    次のような JSON レスポンスが返されます。

  2. インスタンスを空のアドレスリストで更新します。

    リクエストのデータを使用する前に、次のように置き換えます。

    • project-id: プロジェクト ID
    • instance-id: インスタンス ID

    HTTP メソッドと URL:

    PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id

    JSON 本文のリクエスト:

    {
      "settings":
      {
        "ipConfiguration":
        {
          "authorizedNetworks": []
        }
      }
    }
    

    リクエストを送信するには、次のいずれかのオプションを展開します。

    次のような JSON レスポンスが返されます。

  3. 変更を確定します。

    リクエストのデータを使用する前に、次のように置き換えます。

    • project-id: プロジェクト ID
    • instance-id: インスタンス ID
    • machine-type: インスタンスのマシンタイプ
    • zone: インスタンス ゾーン

    HTTP メソッドと URL:

    GET  https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id?fields=settings

    リクエストを送信するには、次のいずれかのオプションを展開します。

    次のような JSON レスポンスが返されます。

REST v1beta4

  1. インスタンスを記述して、既存のすべての認可済みアドレスを表示します。

    リクエストのデータを使用する前に、次のように置き換えます。

    • project-id: プロジェクト ID
    • instance-id: インスタンス ID
    • ip-address1: 最初の IP アドレスの CIDR 形式
    • ip-address-name1: 最初の IP アドレスの名前
    • ip-address2: 2 番目の IP アドレスの CIDR 形式
    • ip-address-name2: 2 番目の IP アドレスの名前
    • machine-type: インスタンスのマシンタイプ
    • zone: インスタンス ゾーン

    HTTP メソッドと URL:

    GET  https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id?fields=settings

    リクエストを送信するには、次のいずれかのオプションを展開します。

    次のような JSON レスポンスが返されます。

  2. インスタンスを空のアドレスリストで更新します。

    リクエストのデータを使用する前に、次のように置き換えます。

    • project-id: プロジェクト ID
    • instance-id: インスタンス ID

    HTTP メソッドと URL:

    PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

    JSON 本文のリクエスト:

    {
      "settings":
      {
        "ipConfiguration":
        {
          "authorizedNetworks": []
        }
      }
    }
    

    リクエストを送信するには、次のいずれかのオプションを展開します。

    次のような JSON レスポンスが返されます。

  3. 変更を確定します。

    リクエストのデータを使用する前に、次のように置き換えます。

    • project-id: プロジェクト ID
    • instance-id: インスタンス ID
    • machine-type: インスタンスのマシンタイプ
    • zone: インスタンス ゾーン

    HTTP メソッドと URL:

    GET  https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id?fields=settings

    リクエストを送信するには、次のいずれかのオプションを展開します。

    次のような JSON レスポンスが返されます。

パブリック IP の無効化

パブリック IP を無効にできますが、プライベート IP も使用するようにインスタンスが構成されている場合に限られます。プライベート IP を有効にするには、プライベート IP を使用するように既存のインスタンスを構成するをご覧ください。

パブリック IP を無効にするには:

Console

  1. Google Cloud Console で、Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. インスタンス名をクリックして [概要] ページを開きます。
  3. SQL ナビゲーション メニューから [接続] を選択します。
  4. [パブリック IP] チェックボックスをオフにします。
  5. [保存] をクリックしてインスタンスを更新します。

gcloud

  1. インスタンスを更新します。
    gcloud sql instances patch INSTANCE_NAME \
    --no-assign-ip
    
  2. 変更を確定します。
    gcloud sql instances describe INSTANCE_NAME
    

REST v1

  1. インスタンスを記述して、既存のすべての認可済みアドレスを表示します。

    リクエストのデータを使用する前に、次のように置き換えます。

    • project-id: プロジェクト ID
    • instance-id: インスタンス ID
    • ip-address1: 最初の IP アドレスの CIDR 形式
    • ip-address-name1: 最初の IP アドレスの名前
    • ip-address2: 2 番目の IP アドレスの CIDR 形式
    • ip-address-name2: 2 番目の IP アドレスの名前
    • machine-type: インスタンスのマシンタイプ
    • zone: インスタンス ゾーン

    HTTP メソッドと URL:

    GET  https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id?fields=settings

    リクエストを送信するには、次のいずれかのオプションを展開します。

    次のような JSON レスポンスが返されます。

  2. インスタンスを更新します。

    リクエストのデータを使用する前に、次のように置き換えます。

    • project-id: プロジェクト ID
    • instance-id: インスタンス ID
    • vpc-name: インスタンスに使用する VPC ネットワークの名前
    • allocated-ip-range: 省略可。指定すると、IP 範囲が割り当てられる範囲名が設定されます。範囲名は RFC-1035 に準拠し、1~63 文字にする必要があります。

    HTTP メソッドと URL:

    PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id

    JSON 本文のリクエスト:

    {
      "ipConfiguration": {
          "ipv4Enabled": false,
          "privateNetwork": "vpc-name",
          "allocatedIpRange": "allocated-ip-range"
        }
    }
    

    リクエストを送信するには、次のいずれかのオプションを展開します。

    次のような JSON レスポンスが返されます。

  3. 変更を確定します。

    リクエストのデータを使用する前に、次のように置き換えます。

    • project-id: プロジェクト ID
    • instance-id: インスタンス ID
    • machine-type: インスタンスのマシンタイプ
    • zone: インスタンス ゾーン

    HTTP メソッドと URL:

    GET  https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id?fields=settings

    リクエストを送信するには、次のいずれかのオプションを展開します。

    次のような JSON レスポンスが返されます。

REST v1beta4

  1. インスタンスを記述して、既存のすべての認可済みアドレスを表示します。

    リクエストのデータを使用する前に、次のように置き換えます。

    • project-id: プロジェクト ID
    • instance-id: インスタンス ID
    • ip-address1: 最初の IP アドレスの CIDR 形式
    • ip-address-name1: 最初の IP アドレスの名前
    • ip-address2: 2 番目の IP アドレスの CIDR 形式
    • ip-address-name2: 2 番目の IP アドレスの名前
    • machine-type: インスタンスのマシンタイプ
    • zone: インスタンス ゾーン

    HTTP メソッドと URL:

    GET  https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id?fields=settings

    リクエストを送信するには、次のいずれかのオプションを展開します。

    次のような JSON レスポンスが返されます。

  2. インスタンスを更新します。

    リクエストのデータを使用する前に、次のように置き換えます。

    • project-id: プロジェクト ID
    • instance-id: インスタンス ID
    • vpc-name: インスタンスに使用する VPC ネットワークの名前
    • allocated-ip-range: 省略可。指定すると、IP 範囲が割り当てられる範囲名が設定されます。範囲名は RFC-1035 に準拠し、1~63 文字にする必要があります。

    HTTP メソッドと URL:

    PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

    JSON 本文のリクエスト:

    {
      "settings":
      {
        "ipConfiguration": {
          "ipv4Enabled": false,
          "privateNetwork": "vpc-name",
          "allocatedIpRange": "allocated-ip-range"
        }
      }
    }
    

    リクエストを送信するには、次のいずれかのオプションを展開します。

    次のような JSON レスポンスが返されます。

  3. 変更を確定します。

    リクエストのデータを使用する前に、次のように置き換えます。

    • project-id: プロジェクト ID
    • instance-id: インスタンス ID
    • machine-type: インスタンスのマシンタイプ
    • zone: インスタンス ゾーン

    HTTP メソッドと URL:

    GET  https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id?fields=settings

    リクエストを送信するには、次のいずれかのオプションを展開します。

    次のような JSON レスポンスが返されます。

トラブルシューティング

問題 トラブルシューティング
Aborted connection. 次のような問題が考えられます。
  • ネットワークが不安定。
  • TCP keep-alive コマンドに応答しない(クライアントまたはサーバーのいずれかが応答しないか、過負荷の可能性があります)。
  • データベース エンジン接続の存続期間を超えたため、サーバーが接続を終了している。

アプリケーションは、接続プールや再試行などのベスト プラクティスに従ってネットワーク障害に対応する必要があります。通常、可能であれば、これらのエラーが接続プーラーによって検出されます。エラーが検出されない場合、アプリケーションは、再試行するか安全に失敗する必要があります。

接続の再試行には、次の方法をおすすめします。

  1. 指数バックオフ。再試行の間隔を指数関数的に増やします。
  2. ランダム化されたバックオフも追加します。

これらの方法を組み合わせると、スロットリングが減ります。

FATAL: database 'user' does not exist. gcloud sql connect --user はデフォルトの postgres ユーザーでのみ機能します。

デフォルト ユーザーで接続してから、ユーザーを変更します。

接続されているユーザーを確認する必要があります。 データベースにログインし、次のコマンドを実行します。


SELECT datname,
usename,
application_name as appname,
client_addr,
state,
now() - backend_start as conn_age,
now() - state_change as last_activity_age
FROM pg_stat_activity
WHERE backend_type = 'client backend'
ORDER BY 6 DESC
LIMIT 20
   

次のステップ