Conéctate a una instancia mediante Private Service Connect

En esta página, se describe cómo usar Private Service Connect para conectarte a una instancia de Cloud SQL.

Puedes usar Private Service Connect para conectarte a una instancia principal de Cloud SQL o a cualquiera de sus réplicas de lectura desde varias redes de nube privada virtual (VPC) que pertenezcan a organizaciones, grupos, equipos o proyectos diferentes.

Antes de comenzar

La compatibilidad con Private Service Connect con una instancia de Cloud SQL está disponible para gcloud CLI versiones 416.0.0 y posteriores.

Funciones de usuario

En la siguiente tabla, se proporciona información sobre los roles necesarios para usar Private Service Connect con una instancia de Cloud SQL:

Rol Descripción
compute.networkAdmin

Otorga control total sobre la red de VPC que inicia una conexión a una instancia de Cloud SQL. Puedes crear y administrar direcciones IP, reglas de firewall, políticas de conexión de servicios y extremos de Private Service Connect.

Si usas Private Service Connect para conectarte a una instancia de Cloud SQL desde varias redes de VPC, cada red tiene su propio administrador.

dns.admin Otorga control total sobre los recursos de Cloud DNS, lo que incluye Zonas y registros DNS.
cloudsql.admin Proporciona control total de una instancia de Cloud SQL y controla la instancia durante su ciclo de vida.
cloudsql.instanceUser Proporciona acceso a la instancia de Cloud SQL. Si te conectas a través del cliente del proxy de autenticación de Cloud SQL, debes tener el rol de Cliente de Cloud SQL. Si te conectas directamente, no necesitas roles ni permisos de Identity and Access Management (IAM).

Crear un extremo de Private Service Connect

Los extremos de Private Service Connect son direcciones IP internas en una red de VPC de consumidor a las que pueden acceder directamente los clientes de esa red. Los clientes pueden usar estos extremos para conectarse a instancias de Cloud SQL.

Puedes hacer que Cloud SQL cree un extremo de Private Service Connect automáticamente en tu VPC o crearlo de forma manual.

Para que Cloud SQL cree el extremo de Private Service Connect automáticamente, haz lo siguiente:

  1. Crea una política de conexión de servicio en tus redes de VPC. Con esta política, puedes aprovisionar extremos de Private Service Connect automáticamente.
  2. Crea una instancia de Cloud SQL con Private Service Connect habilitado para la instancia y configúrala para que cree extremos de Private Service Connect automáticamente.
  3. Recupera el extremo de la instancia. Esto te permite usar el extremo para conectarte a la instancia.

Para crear el extremo de Private Service Connect de forma manual, haz lo siguiente:

  1. Crea una instancia de Cloud SQL con Private Service Connect habilitado para la instancia.
  2. Obtén el URI del adjunto de servicio. Usa este URI para crear el extremo de Private Service Connect.
  3. Reserva una dirección IP interna para el extremo de Private Service Connect y crea un extremo con esa dirección.

Crea el extremo automáticamente

En las siguientes secciones, se explica cómo configurar tu instancia para permitir que Cloud SQL cree el extremo de Private Service Connect automáticamente.

Crea una política de conexión de servicio

Una política de conexión de servicio te permite autorizar una clase de servicio especificada para crear un extremo de Private Service Connect en tu red de VPC de consumidor. Puedes usar la política de conexión de servicio para permitir que Cloud SQL cree extremos de Private Service Connect automáticamente.

Puedes crear una política de conexión de servicio con la consola de Google Cloud, gcloud CLI o la API.

Console

  1. En la consola de Google Cloud, ve a la página Private Service Connect.

    Ir a Private Service Connect

  2. Haz clic en la pestaña Políticas de conexión.

  3. Haz clic en Crear política de conexión.

  4. Ingresa un Nombre para la política de conexión.

  5. Para especificar la clase de servicio, haz lo siguiente:

    1. En Clase de servicio de origen, selecciona Servicios de Google.
    2. En el menú Clase de servicio, selecciona google-cloud-sql porque Cloud SQL es el servicio administrado para la política de conexión.
  6. En la sección Alcance de los extremos de destino, selecciona una Red y una Región a las que se aplicará esta política.

  7. En la sección Política, selecciona una o más subredes en el menú Subredes. Las subredes se usan para asignar direcciones IP a los extremos.

  8. Especifica un Límite de conexión para la política (opcional). El límite determina cuántos extremos se pueden crear con esta política de conexión. Si no especificas un límite de conexiones, no hay límite.

  9. Haz clic en Crear política.

gcloud

Para crear una política de conexión de servicio, usa el comando service-connection-policies create.

gcloud network-connectivity service-connection-policies create POLICY_NAME \
    --network=NETWORK \
    --project=PROJECT_ID \
    --region=REGION \
    --service-class=SERVICE_CLASS \
    --subnets=https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks/SUBNETS \
    --psc-connection-limit=LIMIT \
    --description=DESCRIPTION \
    --producer-instance-location=PRODUCER_INSTANCE_LOCATION \
    --allowed-google-producers-resource-hierarchy-level=RESOURCE_HIERARCHY_LEVEL

Reemplaza lo siguiente:

  • POLICY_NAME: el nombre de la política de conexión del servicio.
  • NETWORK: Es la red a la que se aplica esta política.
  • PROJECT_ID: el ID del proyecto o el número del proyecto de la red de VPC. En el caso de las redes de VPC compartida, debes implementar las políticas de conexión de servicio en el proyecto host, ya que estas políticas no son compatibles con los proyectos de servicio.
  • REGION: Es la región a la que se aplica esta política. Debe existir la misma política para cada región en la que desees automatizar la conectividad del servicio.
  • SERVICE_CLASS: el identificador de recursos proporcionado por el productor de la clase de servicio. En Cloud SQL, la clase de servicio es google-cloud-sql.
  • SUBNETS: una o más subredes de consumidor regulares que se usan para asignar direcciones IP a los extremos de Private Service Connect. Estas direcciones IP se asignan automáticamente y se devuelven al grupo de la subred a medida que se crean y borran las instancias de servicio administrado. Las subredes deben estar en la misma región que la política de conexión de servicio. Si varias políticas de conexión comparten la misma región, puedes volver a usar la misma subred en estas políticas. Puedes ingresar varias subredes en una lista separada por comas.
  • LIMIT: La cantidad máxima de extremos que puedes crear con esta política. Si no especificas un límite, no hay límite.
  • DESCRIPTION: Es una descripción opcional de la política de conexión de servicio.
  • PRODUCER_INSTANCE_LOCATION: Usa esta marca opcional para especificar si deseas autorizar una jerarquía personalizada de las ubicaciones de una instancia de Cloud SQL. Puedes establecer el valor de PRODUCER_INSTANCE_LOCATION en solo uno de los siguientes:

    • custom-resource-hierarchy-levels: La instancia debe estar ubicada en uno de los proyectos, carpetas o organizaciones que proporcionas como valor para el parámetro allowed-google-producers-resource-hierarchy-level.
    • none: La instancia se encuentra en el mismo proyecto que la política de conexión del servicio.
  • RESOURCE_HIERARCHY_LEVEL: Es una lista de proyectos, carpetas o organizaciones en las que se encuentra la instancia. Esta lista tiene el formato projects/PROJECT_ID, folders/FOLDER_ID o organizations/ORGANIZATION_ID.

Por ejemplo, el siguiente comando crea una política de conexión de servicio para la clase de servicio google-cloud-sql
que asigna direcciones IP desde la subred managed-services. Se puede crear un máximo de 10 extremos de Private Service Connect con esta política. Los extremos deben crearse en proyectos que se encuentren en la misma organización que la instancia de servicio administrado. La instancia de Cloud SQL se encuentra en el proyecto myproject.

gcloud network-connectivity service-connection-policies create cloud-sql-policy \
    --network=default \
    --project=my-project \
    --region=us-central1 \
    --service-class=google-cloud-sql \
    --subnets=managed-service-subnet \
    --psc-connection-limit=10 \
    --producer-instance-location=custom-resource-hierarchy-levels \
    --allowed-google-producers-resource-hierarchy-level=projects/myproject

REST

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: el ID de tu proyecto.
  • REGION: La región de la política de conexión del servicio.
  • POLICY_NAME: el nombre de la política de conexión del servicio.
  • DESCRIPTION: Es una descripción opcional de la política de conexión de servicio.
  • NETWORK: La red de la política de conexión del servicio.
  • LIMIT: La cantidad máxima de extremos que puedes crear con esta política. Si no especificas un límite, no hay límite.
  • SUBNETS: una o más subredes de consumidor regulares que se usan para asignar direcciones IP a los extremos de Private Service Connect. Estas direcciones IP se asignan automáticamente y se muestran al grupo de la subred a medida que se crean y borran las instancias de servicio administrado. Las subredes deben estar en la misma región que la política de conexión de servicio. Si varias políticas de conexión comparten la misma región, puedes volver a usar la misma subred en estas políticas. Puedes ingresar varias subredes en una lista separada por comas.
  • SERVICE_CLASS: el identificador de recursos proporcionado por el productor de la clase de servicio.

Método HTTP y URL:

POST https://networkconnectivity.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/serviceConnectionPolicies?serviceConnectionPolicyId=POLICY_NAME

Cuerpo JSON de la solicitud:

{
  "description": "DESCRIPTION",
  "network": "projects/PROJECT_ID/global/networks/NETWORK",
  "pscConfig": {
    "limit": "LIMIT",
    "subnetworks": [
      "projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET"
    ]
  },
  "serviceClass": "SERVICE_CLASS"
}

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

{
  "name": "projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.networkconnectivity.v1.OperationMetadata",
    "createTime": "2023-08-15T16:59:29.236110917Z",
    "target": "projects/PROJECT_ID/locations/REGION/serviceConnectionPolicies/POLICY_NAME",
    "verb": "create",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

Cree una instancia de Cloud SQL

Puedes crear una instancia con Private Service Connect habilitado para ella y configurarla para que cree extremos automáticamente con gcloud CLI o la API.

gcloud

Para crear una instancia con Private Service Connect habilitado, usa el comando gcloud sql instances create:

gcloud sql instances create INSTANCE_NAME \
--project=PROJECT_ID \
--region=REGION_NAME \
--enable-private-service-connect \
--allowed-psc-projects=ALLOWED_PROJECTS \
--availability-type=AVAILABILITY_TYPE \
--no-assign-ip \
--tier=MACHINE_TYPE \
--database-version=DATABASE_VERSION \
--psc-auto-connections=network=VPC_NETWORK,project=SERVICE_PROJECT

Realiza los siguientes reemplazos:

  • INSTANCE_NAME: El nombre de la instancia.
  • PROJECT_ID: el ID o el número del proyecto de Google Cloud que contiene la instancia.
  • REGION_NAME: el nombre de la región para la instancia.
  • ALLOWED_PROJECTS: Es una lista separada por comas de los IDs o números de proyectos permitidos desde los que los extremos de Private Service Connect pueden conectarse a instancias de Cloud SQL.

    Si un proyecto no aparece en esta lista, no puedes crear extremos de Private Service Connect en el proyecto para conectarte a la instancia.

  • AVAILABILITY_TYPE: Habilita la alta disponibilidad para la instancia. Para este parámetro, especifica uno de los siguientes valores:
    • REGIONAL: Habilita la alta disponibilidad y se recomienda para las instancias de producción. La instancia se conmuta por error a otra zona dentro de la región que seleccionaste.
    • ZONAL: No proporciona capacidad de conmutación por error. Este es el valor predeterminado.

    Para obtener más información sobre cómo configurar y quitar la alta disponibilidad de las instancias, consulta las secciones Configura una instancia existente para alta disponibilidad y Desactiva la alta disponibilidad para una instancia.

  • MACHINE_TYPE: el tipo de máquina para la instancia.
  • DATABASE_VERSION: la versión de la base de datos para la instancia (por ejemplo, POSTGRES_13).
  • VPC_NETWORK: Es la ruta de acceso a la red de VPC desde la que se deben crear los extremos de Private Service Connect. Por ejemplo:
    projects/my-host-project/global/networks/default.
  • SERVICE_PROJECT: El proyecto en el que se crea el extremo de Private Service Connect. Si la red de VPC no es una VPC compartida, este solo puede ser el proyecto host de la red. Si se trata de una VPC compartida, puede ser el proyecto host o el proyecto de servicio.

    Los proyectos que especifiques en los parámetros de conexión automática se agregarán a los proyectos permitidos automáticamente. De manera opcional, para los proyectos en los que deseas crear extremos de Private Service Connect de forma manual, puedes agregarlos a tu lista de proyectos permitidos.

REST

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: el ID o el número del proyecto de Google Cloud que contiene la instancia.
  • INSTANCE_NAME: El nombre de la instancia.
  • REGION_NAME: el nombre de la región para la instancia.
  • AVAILABILITY_TYPE: Habilita la alta disponibilidad para la instancia. Para este parámetro, especifica uno de los siguientes valores:
    • REGIONAL: Habilita la alta disponibilidad y se recomienda para las instancias de producción. La instancia se conmuta por error a otra zona dentro de la región que seleccionaste.
    • ZONAL: No proporciona capacidad de conmutación por error. Este es el valor predeterminado.

    Para obtener más información sobre cómo configurar y quitar la alta disponibilidad de las instancias, consulta las secciones Configura una instancia existente para alta disponibilidad y Desactiva la alta disponibilidad para una instancia.

  • ALLOWED_PROJECTS: Es una lista separada por comas de los IDs o números de proyectos permitidos desde los que los extremos de Private Service Connect pueden conectarse a instancias de Cloud SQL.

    Si un proyecto no aparece en esta lista, no puedes crear extremos de Private Service Connect en el proyecto para conectarte a la instancia.

  • MACHINE_TYPE: el tipo de máquina para la instancia.
  • VPC_NETWORK: Es la ruta de acceso a la red de VPC desde la que se deben crear los extremos de Private Service Connect.
  • SERVICE_PROJECT: El proyecto en el que se crea el extremo de Private Service Connect. Si la red de VPC no es una VPC compartida, este solo puede ser el proyecto host de la red. Si se trata de una VPC compartida, puede ser el proyecto host o el proyecto de servicio.

    Los proyectos que especifiques en los parámetros de conexión automática se agregarán a los proyectos permitidos automáticamente. De manera opcional, para los proyectos en los que deseas crear extremos de Private Service Connect de forma manual, puedes agregarlos a tu lista de proyectos permitidos.

Método HTTP y URL:

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances

Cuerpo JSON de la solicitud:

{
  "name": "INSTANCE_NAME",
  "project": PROJECT_ID",
  "region": "REGION_NAME",
  "databaseVersion": "POSTGRES_13",
  "kind": "sql#instance",
  "settings": {
    "availabilityType": "AVAILABILITY_TYPE",
    "ipConfiguration": {
      "ipv4Enabled": false,
      "pscConfig": {
        "allowedConsumerProjects": [
          "ALLOWED_PROJECTS"
        ],
        "pscAutoConnections": [
          {
            "consumerProject":"SERVICE_PROJECT",
            "consumerNetwork":"projects/SERVICE_PROJECT/global/networks/VPC_NETWORK"
          }
        ],
        "pscEnabled": true
      }
    },
    "kind": "sql#settings",
    "pricingPlan": "PER_USE",
    "replicationType": "SYNCHRONOUS",
    "tier": "MACHINE_TYPE"
  }
}

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME",
  "status": "RUNNING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "startTime": "2023-06-14T18:48:35.499Z",
  "operationType": "CREATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_NAME",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

Recupera el extremo

Cuando recuperas la dirección IP interna, que es el extremo de Private Service Connect de una instancia, puedes usar este extremo para conectarte a la instancia.

gcloud

Para ver información sobre una instancia, incluida la dirección IP que es el extremo de Private Service Connect de la instancia, usa el comando gcloud sql instances describe:

gcloud sql instances describe INSTANCE_NAME \
--project=PROJECT_ID \
--format='json(settings.ipConfiguration.pscConfig.pscAutoConnections)'

Realiza los siguientes reemplazos:

En la respuesta, toma nota del valor que aparece junto al campo pscConfig:pscAutoConnections:ipAddress. Este valor es la dirección IP interna que también es el extremo de Private Service Connect de la instancia.

REST

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

HTTP method and URL:

GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

{
  "kind": "sql#instance",
  "state": "RUNNABLE",
  "databaseVersion": "POSTGRES_13",
  "settings": {
    "authorizedGaeApplications": [],
    "tier": "db-custom-2-7680",
    "kind": "sql#settings",
    "availabilityType": "REGIONAL",
    "pricingPlan": "PER_USE",
    "replicationType": "SYNCHRONOUS",
    "activationPolicy": "ALWAYS",
    "ipConfiguration": {
      "authorizedNetworks": [],
      "pscConfig": {
        "allowedConsumerProjects": [
          "ALLOWED_PROJECTS"
        ],
      "pscAutoConnections": {
        consumerNetwork:"projects/SERVICE_PROJECT/global/networks/VPC_NETWORK",
        consumerNetworkStatus:"CONSUMER_NETWORK_STATUS",
        consumerProject:"SERVICE_PROJECT",
        ipAddress:"IP_ADDRESS",
        status:"STATUS"
        },
        "pscEnabled": true
      },
      "ipv4Enabled": false
    },
}

Existen los siguientes campos para las instancias que tienen Private Service Connect habilitado:

  • allowedConsumerProjects: Una lista de los proyectos permitidos para la instancia. Puedes crear extremos de Private Service Connect desde cualquier red de VPC en estos proyectos al adjunto de servicio de la instancia.
  • pscAutoConnections: La red de VPC permitida, el estado de la política de conexión de servicios y el estado de la dirección IP que es el extremo de la instancia.
  • pscEnabled: indica si una instancia tiene Private Service Connect habilitado.

Si quieres ver cómo crear la solicitud subyacente a la API de REST para esta tarea, consulta la página instances:get.

Crea el extremo de forma manual

En las siguientes secciones, se explica cómo crear un extremo de Private Service Connect de forma manual.

Cree una instancia de Cloud SQL

Puedes crear una instancia con Private Service Connect habilitado para ella con gcloud CLI, Terraform o la API.

gcloud

Para crear una instancia con Private Service Connect habilitado, usa el comando gcloud sql instances create:

gcloud sql instances create INSTANCE_NAME \
--project=PROJECT_ID \
--region=REGION_NAME \
--enable-private-service-connect \
--allowed-psc-projects=ALLOWED_PROJECTS \
--availability-type=AVAILABILITY_TYPE \
--no-assign-ip \
--tier=MACHINE_TYPE \
--database-version=DATABASE_VERSION

Realiza los siguientes reemplazos:

  • INSTANCE_NAME: El nombre de la instancia.
  • PROJECT_ID: el ID o el número del proyecto de Google Cloud que contiene la instancia.
  • REGION_NAME: el nombre de la región para la instancia.
  • ALLOWED_PROJECTS: Es una lista separada por comas de los IDs o números de proyectos permitidos desde los que los extremos de Private Service Connect pueden conectarse a instancias de Cloud SQL.

    Si un proyecto no aparece en esta lista, no puedes crear extremos de Private Service Connect en el proyecto para conectarte a la instancia.

  • AVAILABILITY_TYPE: Habilita la alta disponibilidad en la instancia. Para este parámetro, especifica uno de los siguientes valores:
    • REGIONAL: Habilita la alta disponibilidad y se recomienda para las instancias de producción. La instancia se conmuta por error a otra zona dentro de la región que seleccionaste.
    • ZONAL: No proporciona capacidad de conmutación por error. Este es el valor predeterminado.

    Para obtener más información sobre cómo configurar y quitar la alta disponibilidad de las instancias, consulta las secciones Configura una instancia existente para alta disponibilidad y Desactiva la alta disponibilidad para una instancia.

  • MACHINE_TYPE: el tipo de máquina para la instancia.
  • DATABASE_VERSION: la versión de la base de datos para la instancia (por ejemplo, POSTGRES_13).

Terraform

Para crear una instancia con Private Service Connect habilitado, usa el recurso google_sql_database_instance de Terraform.

resource "google_sql_database_instance" "default" {
  name             = "postgres-instance"
  region           = "us-central1"
  database_version = "POSTGRES_14"
  settings {
    tier              = "db-custom-2-7680"
    availability_type = "REGIONAL"
    backup_configuration {
      enabled = true
    }
    ip_configuration {
      psc_config {
        psc_enabled               = true
        allowed_consumer_projects = []
      }
      ipv4_enabled = false
    }
  }
  deletion_protection = false # Set to "true" to prevent destruction of the resource
}

Para aplicar tu configuración de Terraform en un proyecto de Google Cloud, completa los pasos de las siguientes secciones.

Prepara Cloud Shell

  1. Inicia Cloud Shell
  2. Establece el proyecto de Google Cloud predeterminado en el que deseas aplicar tus configuraciones de Terraform.

    Solo necesitas ejecutar este comando una vez por proyecto y puedes ejecutarlo en cualquier directorio.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Las variables de entorno se anulan si configuras valores explícitos en el archivo de configuración de Terraform.

Prepara el directorio

Cada archivo de configuración de Terraform debe tener su propio directorio (también llamado módulo raíz).

  1. En Cloud Shell, crea un directorio y un archivo nuevo dentro de ese directorio. El nombre del archivo debe tener la extensión .tf, por ejemplo, main.tf. En este instructivo, el archivo se denomina main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Si sigues un instructivo, puedes copiar el código de muestra en cada sección o paso.

    Copia el código de muestra en el main.tf recién creado.

    De manera opcional, copia el código de GitHub. Esto se recomienda cuando el fragmento de Terraform es parte de una solución de extremo a extremo.

  3. Revisa y modifica los parámetros de muestra que se aplicarán a tu entorno.
  4. Guarda los cambios.
  5. Inicializa Terraform. Solo debes hacerlo una vez por directorio.
    terraform init

    De manera opcional, incluye la opción -upgrade para usar la última versión del proveedor de Google:

    terraform init -upgrade

Aplica los cambios

  1. Revisa la configuración y verifica que los recursos que creará o actualizará Terraform coincidan con tus expectativas:
    terraform plan

    Corrige la configuración según sea necesario.

  2. Para aplicar la configuración de Terraform, ejecuta el siguiente comando y, luego, escribe yes cuando se te solicite:
    terraform apply

    Espera hasta que Terraform muestre el mensaje “¡Aplicación completa!”.

  3. Abre tu proyecto de Google Cloud para ver los resultados. En la consola de Google Cloud, navega a tus recursos en la IU para asegurarte de que Terraform los haya creado o actualizado.

REST

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: el ID o el número del proyecto de Google Cloud que contiene la instancia.
  • INSTANCE_NAME: El nombre de la instancia.
  • REGION_NAME: el nombre de la región para la instancia.
  • AVAILABILITY_TYPE: Habilita la alta disponibilidad para la instancia. Para este parámetro, especifica uno de los siguientes valores:
    • REGIONAL: Habilita la alta disponibilidad y se recomienda para las instancias de producción. La instancia se conmuta por error a otra zona dentro de la región que seleccionaste.
    • ZONAL: No proporciona capacidad de conmutación por error. Este es el valor predeterminado.

    Para obtener más información sobre cómo configurar y quitar la alta disponibilidad de las instancias, consulta las secciones Configura una instancia existente para alta disponibilidad y Desactiva la alta disponibilidad para una instancia.

  • ALLOWED_PROJECTS: Es una lista separada por comas de los IDs o números de proyectos permitidos desde los que los extremos de Private Service Connect pueden conectarse a instancias de Cloud SQL.

    Si un proyecto no aparece en esta lista, no puedes crear extremos de Private Service Connect en el proyecto para conectarte a la instancia.

  • MACHINE_TYPE: el tipo de máquina para la instancia.

HTTP method and URL:

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances

Cuerpo JSON de la solicitud:

{
  "name": "INSTANCE_NAME",
  "project": PROJECT_ID",
  "region": "REGION_NAME",
  "databaseVersion": "POSTGRES_13",
  "kind": "sql#instance",
  "settings": {
    "availabilityType": "AVAILABILITY_TYPE",
    "ipConfiguration": {
      "ipv4Enabled": false,
      "pscConfig": {
        "allowedConsumerProjects": [
          "ALLOWED_PROJECTS"
        ],
        "pscEnabled": true
      }
    },
    "kind": "sql#settings",
    "pricingPlan": "PER_USE",
    "replicationType": "SYNCHRONOUS",
    "tier": "MACHINE_TYPE"
  }
}

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME",
  "status": "RUNNING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "startTime": "2023-06-14T18:48:35.499Z",
  "operationType": "CREATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_NAME",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

Obtén el adjunto del servicio

Después de crear una instancia de Cloud SQL con Private Service Connect habilitado, obtén el URI del adjunto de servicio y úsalo para crear el extremo de Private Service Connect.

gcloud

Para ver la información resumida de una instancia con Private Service Connect habilitado, como el campo pscServiceAttachmentLink que muestra el URI que apunta al adjunto de servicio de la instancia, usa el comando gcloud sql instances describe:

gcloud sql instances describe INSTANCE_NAME \
--project=PROJECT_ID

Realiza los siguientes reemplazos:

  • INSTANCE_NAME: el nombre de la instancia de Cloud SQL a la que se pueden conectar los extremos de Private Service Connect en las redes de VPC
  • PROJECT_ID: el ID o el número del proyecto de Google Cloud que contiene la instancia

En el siguiente ejemplo, se muestra una respuesta de ejemplo para este comando:

gcloud sql instances describe myinstance \
--project=12345

...
pscServiceAttachmentLink: projects/45678/regions/myregion/serviceAttachments/myserviceattachment

Terraform

Para obtener el URI del adjunto de servicio, usa el recurso google_compute_address de Terraform

resource "google_compute_address" "default" {
  name         = "psc-compute-address"
  region       = "us-central1"
  address_type = "INTERNAL"
  subnetwork   = "default"     # Replace value with the name of the subnet here.
  address      = "10.128.0.42" # Replace value with the IP address to reserve.
}

data "google_sql_database_instance" "default" {
  name = resource.google_sql_database_instance.default.name
}

resource "google_compute_forwarding_rule" "default" {
  name                  = "psc-forwarding-rule-${google_sql_database_instance.default.name}"
  region                = "us-central1"
  network               = "default"
  ip_address            = google_compute_address.default.self_link
  load_balancing_scheme = ""
  target                = data.google_sql_database_instance.default.psc_service_attachment_link
}

Para aplicar tu configuración de Terraform en un proyecto de Google Cloud, completa los pasos de las siguientes secciones.

Prepara Cloud Shell

  1. Inicia Cloud Shell
  2. Establece el proyecto de Google Cloud predeterminado en el que deseas aplicar tus configuraciones de Terraform.

    Solo necesitas ejecutar este comando una vez por proyecto y puedes ejecutarlo en cualquier directorio.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Las variables de entorno se anulan si configuras valores explícitos en el archivo de configuración de Terraform.

Prepara el directorio

Cada archivo de configuración de Terraform debe tener su propio directorio (también llamado módulo raíz).

  1. En Cloud Shell, crea un directorio y un archivo nuevo dentro de ese directorio. El nombre del archivo debe tener la extensión .tf, por ejemplo, main.tf. En este instructivo, el archivo se denomina main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Si sigues un instructivo, puedes copiar el código de muestra en cada sección o paso.

    Copia el código de muestra en el main.tf recién creado.

    De manera opcional, copia el código de GitHub. Esto se recomienda cuando el fragmento de Terraform es parte de una solución de extremo a extremo.

  3. Revisa y modifica los parámetros de muestra que se aplicarán a tu entorno.
  4. Guarda los cambios.
  5. Inicializa Terraform. Solo debes hacerlo una vez por directorio.
    terraform init

    De manera opcional, incluye la opción -upgrade para usar la última versión del proveedor de Google:

    terraform init -upgrade

Aplica los cambios

  1. Revisa la configuración y verifica que los recursos que creará o actualizará Terraform coincidan con tus expectativas:
    terraform plan

    Corrige la configuración según sea necesario.

  2. Para aplicar la configuración de Terraform, ejecuta el siguiente comando y, luego, escribe yes cuando se te solicite:
    terraform apply

    Espera hasta que Terraform muestre el mensaje “¡Aplicación completa!”.

  3. Abre tu proyecto de Google Cloud para ver los resultados. En la consola de Google Cloud, navega a tus recursos en la IU para asegurarte de que Terraform los haya creado o actualizado.

REST

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: el ID o el número del proyecto de Google Cloud que contiene la instancia
  • INSTANCE_NAME: Es el nombre de la instancia.

HTTP method and URL:

GET https://sqladmin.googleapis.com/sql/v1/projects/PROJECT_ID/instances/INSTANCE_NAME

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

{
  ...
  pscServiceAttachmentLink: "projects/PROJECT_ID/regions/REGION_NAME/serviceAttachments/SERVICE_ATTACHMENT_NAME"
}

El campo pscServiceAttachmentLink muestra el URI que apunta al adjunto de servicio de la instancia.

Crear un extremo de Private Service Connect

Puedes reservar una dirección IP interna para el extremo de Private Service Connect y crear un extremo con esa dirección. Para crear el extremo, necesitas el URI del adjunto de servicio y los proyectos permitidos para la instancia.

gcloud

  1. Si deseas reservar una dirección IP interna para el extremo de Private Service Connect, usa el comando
    gcloud compute addresses create:

    gcloud compute addresses create ADDRESS_NAME \
    --project=PROJECT_ID \
    --region=REGION_NAME \
    --subnet=SUBNET_NAME \
    --addresses=INTERNAL_IP_ADDRESS

    Realiza los siguientes reemplazos:

    • ADDRESS_NAME: el nombre de la dirección IP interna.
    • PROJECT_ID: el ID o el número del proyecto de Google Cloud para el extremo.
    • REGION_NAME: es el nombre de la región para el extremo.
    • SUBNET_NAME: el nombre de la subred de la dirección IP.
    • INTERNAL_IP_ADDRESS: la dirección IP que se reservará. Esta dirección IP debe estar dentro del rango de IP principal de la subred. La dirección IP puede ser una dirección RFC 1918 o una subred con rangos que no sean RFC.
  2. Para verificar que la dirección IP esté reservada, usa el comando gcloud compute addresses list:

    gcloud compute addresses list ADDRESS_NAME \
    --project=PROJECT_ID

    En la respuesta, verifica que aparezca un estado RESERVED para la dirección IP.

  3. Para crear el extremo de Private Service Connect y apuntarlo al adjunto de servicio de Cloud SQL, usa el comando gcloud compute forwarding-rules create:

    gcloud compute forwarding-rules create ENDPOINT_NAME \
    --address=ADDRESS_NAME \
    --project=PROJECT_ID \
    --region=REGION_NAME \
    --network=NETWORK_NAME \
    --target-service-attachment=SERVICE_ATTACHMENT_URI \
    --allow-psc-global-access

    Realiza los siguientes reemplazos:

    • ENDPOINT_NAME: el nombre del extremo
    • NETWORK_NAME: el nombre de la red de VPC para el extremo
    • SERVICE_ATTACHMENT_URI: el URI del adjunto del servicio
  4. Para verificar que el adjunto de servicio acepte el extremo, usa el comando
    gcloud compute forwarding-rules describe:

    gcloud compute forwarding-rules describe ENDPOINT_NAME \
    --project=PROJECT_ID \
    --region=REGION_NAME

    En la respuesta, verifica que aparezca un estado ACCEPTED para el campo pscConnectionStatus. El extremo puede conectarse al adjunto de servicio.

Terraform

Para crear un extremo de Private Service Connect, usa el google_sql_database_instancerecurso de Terraform.

resource "google_compute_address" "default" {
  name         = "psc-compute-address"
  region       = "us-central1"
  address_type = "INTERNAL"
  subnetwork   = "default"     # Replace value with the name of the subnet here.
  address      = "10.128.0.42" # Replace value with the IP address to reserve.
}

data "google_sql_database_instance" "default" {
  name = resource.google_sql_database_instance.default.name
}

resource "google_compute_forwarding_rule" "default" {
  name                  = "psc-forwarding-rule-${google_sql_database_instance.default.name}"
  region                = "us-central1"
  network               = "default"
  ip_address            = google_compute_address.default.self_link
  load_balancing_scheme = ""
  target                = data.google_sql_database_instance.default.psc_service_attachment_link
}

Para aplicar tu configuración de Terraform en un proyecto de Google Cloud, completa los pasos de las siguientes secciones.

Prepara Cloud Shell

  1. Inicia Cloud Shell
  2. Establece el proyecto de Google Cloud predeterminado en el que deseas aplicar tus configuraciones de Terraform.

    Solo necesitas ejecutar este comando una vez por proyecto y puedes ejecutarlo en cualquier directorio.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Las variables de entorno se anulan si configuras valores explícitos en el archivo de configuración de Terraform.

Prepara el directorio

Cada archivo de configuración de Terraform debe tener su propio directorio (también llamado módulo raíz).

  1. En Cloud Shell, crea un directorio y un archivo nuevo dentro de ese directorio. El nombre del archivo debe tener la extensión .tf, por ejemplo, main.tf. En este instructivo, el archivo se denomina main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Si sigues un instructivo, puedes copiar el código de muestra en cada sección o paso.

    Copia el código de muestra en el main.tf recién creado.

    De manera opcional, copia el código de GitHub. Esto se recomienda cuando el fragmento de Terraform es parte de una solución de extremo a extremo.

  3. Revisa y modifica los parámetros de muestra que se aplicarán a tu entorno.
  4. Guarda los cambios.
  5. Inicializa Terraform. Solo debes hacerlo una vez por directorio.
    terraform init

    De manera opcional, incluye la opción -upgrade para usar la última versión del proveedor de Google:

    terraform init -upgrade

Aplica los cambios

  1. Revisa la configuración y verifica que los recursos que creará o actualizará Terraform coincidan con tus expectativas:
    terraform plan

    Corrige la configuración según sea necesario.

  2. Para aplicar la configuración de Terraform, ejecuta el siguiente comando y, luego, escribe yes cuando se te solicite:
    terraform apply

    Espera hasta que Terraform muestre el mensaje “¡Aplicación completa!”.

  3. Abre tu proyecto de Google Cloud para ver los resultados. En la consola de Google Cloud, navega a tus recursos en la IU para asegurarte de que Terraform los haya creado o actualizado.

REST

  1. Reserva una dirección IP interna para el extremo de Private Service Connect.

  2. Verifica que la dirección IP esté reservada.

    Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

    • PROJECT_ID: el ID o el número del proyecto de Google Cloud que contiene el extremo de Private Service Connect
    • REGION_NAME: es el nombre de la región.
    • ADDRESS_NAME: El nombre de la dirección IP.

    Método HTTP y URL:

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/addresses/ADDRESS_NAME

    Para enviar tu solicitud, expande una de estas opciones:

    Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

    {
      "kind": "compute#address",
      "id": "ADDRESS_ID",
      "creationTimestamp": "2024-05-09T11:20:50.114-07:00",
      "name": "ADDRESS_NAME",
      "description": "This is the name of the internal IP address.",
      "address": "IP_ADDRESS",
      "status": "RESERVED",
      "region": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME",
      "selfLink": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/addresses/ADDRESS_NAME",
      "networkTier": "PREMIUM",
      "labelFingerprint": "LABEL_FINGERPRINT_ID",
      "addressType": "EXTERNAL"
    }
    

    En la respuesta, verifica que aparezca un estado RESERVED para la dirección IP.

  3. Crea el extremo de Private Service Connect y apúntalo al adjunto de servicio de Cloud SQL.

  4. Verifica que el adjunto de servicio acepte el extremo.

    Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

    • PROJECT_ID: el ID o el número del proyecto de Google Cloud que contiene el extremo de Private Service Connect
    • REGION_NAME: es el nombre de la región.
    • ENDPOINT_NAME: el nombre del extremo

    Método HTTP y URL:

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/forwardingRules/ENDPOINT_NAME

    Para enviar tu solicitud, expande una de estas opciones:

    Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

    {
      "kind": "compute#forwardingRule",
      "id": "ENDPOINT_ID",
      "creationTimestamp": "2024-05-09T12:03:21.383-07:00",
      "name": "ENDPOINT_NAME",
      "region": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME",
      "IPAddress": "IP_ADDRESS",
      "target": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/serviceAttachments/SERVICE_ATTACHMENT_NAME",
      "selfLink": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/forwardingRules/ENDPOINT_NAME",
      "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/default",
      "serviceDirectoryRegistrations": [
        {
          "namespace": "goog-psc-default"
        }
      ],
      "networkTier": "PREMIUM",
      "labelFingerprint": "LABEL_FINGERPRINT_ID",
      "fingerprint": "FINGERPRINT_ID",
      "pscConnectionId": "CONNECTION_ID",
      "pscConnectionStatus": "ACCEPTED",
      "allowPscGlobalAccess": true
    }
    

    En la respuesta, verifica que aparezca un estado ACCEPTED para el campo pscConnectionStatus. El extremo puede conectarse al adjunto de servicio.

Conectarse a una instancia de Cloud SQL

Puedes conectarte a una instancia de Cloud SQL con Private Service Connect habilitado mediante una dirección IP interna, un registro DNS, el proxy de autenticación de Cloud SQL, los conectores de lenguaje de Cloud SQL o cualquier otra aplicación de Google Cloud.

Configura una zona administrada de DNS y un registro DNS

Cloud SQL no crea registros DNS de forma automática. En su lugar, la respuesta de la API de búsqueda de instancias proporciona un nombre de DNS sugerido. Te recomendamos que crees el registro DNS en una zona del DNS privado en la red de VPC correspondiente. Esto proporciona una forma coherente de usar el proxy de autenticación de Cloud SQL para conectarte desde diferentes redes.

gcloud

  1. Para ver información resumida sobre una instancia de Cloud SQL, incluido el nombre de DNS de la instancia, usa el comando gcloud sql instances describe:

    gcloud sql instances describe INSTANCE_NAME \
    --project=PROJECT_ID

    Realiza los siguientes reemplazos:

    • INSTANCE_NAME: el nombre de la instancia de Cloud SQL
    • PROJECT_ID: el ID o el número del proyecto de Google Cloud que contiene la instancia

    En la respuesta, verifica que aparezca el nombre de DNS. Este nombre tiene el siguiente patrón: INSTANCE_UID.PROJECT_DNS_LABEL.REGION_NAME.sql.goog.. Por ejemplo: 1a23b4cd5e67.1a2b345c6d27.us-central1.sql.goog..

  2. Para crear una zona del DNS privada, usa el comando gcloud dns managed-zones create. Esta zona está asociada con la red de VPC que se usa para conectarse a la instancia de Cloud SQL a través del extremo de Private Service Connect.

    gcloud dns managed-zones create ZONE_NAME \
    --project=PROJECT_ID \
    --description=DESCRIPTION \
    --dns-name=DNS_NAME \
    --networks=NETWORK_NAME \
    --visibility=private

    Realiza los siguientes reemplazos:

    • ZONE_NAME: el nombre de la zona del DNS
    • PROJECT_ID: el ID o el número del proyecto de Google Cloud que contiene la zona
    • DESCRIPTION: una descripción de la zona (por ejemplo, una zona del DNS para la instancia de Cloud SQL)
    • DNS_NAME: el nombre del sufijo DNS para la zona, como REGION_NAME.sql.goog. (en el que REGION_NAME es el nombre de la región de la zona)
    • NETWORK_NAME es el nombre de la red de VPC.
  3. Después de crear el extremo de Private Service Connect, para crear un registro DNS en la zona, usa el comando gcloud dns record-sets create:

    gcloud dns record-sets create DNS_RECORD \
    --project=PROJECT_ID \
    --type=RRSET_TYPE \
    --rrdatas=RR_DATA \
    --zone=ZONE_NAME

    Realiza los siguientes reemplazos:

    • DNS_RECORD: el nombre del registro DNS. Este registro se establece en el nombre de DNS que recuperaste de la instancia de Cloud SQL anteriormente en este procedimiento (por ejemplo, 1a23b4cd5e67.1a2b345c6d27.us-central1.sql.goog.).
    • RRSET_TYPE: el tipo de registro de recursos del conjunto de registros DNS (por ejemplo, A).
    • RR_DATA: la dirección IP asignada para el extremo de Private Service Connect (por ejemplo, 198.51.100.5). También puedes ingresar varios valores, como rrdata1 rrdata2 rrdata3 (por ejemplo, 10.1.2.3 10.2.3.4 10.3.4.5).

REST

  1. Obtén el nombre de DNS de una instancia de Cloud SQL.
  2. Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

    • PROJECT_ID: el ID o el número del proyecto de Google Cloud que contiene la instancia
    • INSTANCE_NAME: Es el nombre de la instancia.

    HTTP method and URL:

    GET https://sqladmin.googleapis.com/sql/v1/projects/PROJECT_ID/instances/INSTANCE_NAME

    Para enviar tu solicitud, expande una de estas opciones:

    Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

    {
      ...
      "dnsName": "INSTANCE_ID.PROJECT_DNS_LABEL.REGION_NAME.sql.goog."
    }
    

    El campo dnsName muestra el nombre de DNS de la instancia de Cloud SQL. Los nombres de DNS siempre terminan con un punto (.).

  3. Crea una zona del DNS privado. Esta zona está asociada con la red de VPC que se usa para conectarse a la instancia de Cloud SQL a través del extremo de Private Service Connect.
  4. Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

    • PROJECT_ID: el ID o el número del proyecto de Google Cloud que contiene la zona del DNS
    • ZONE_NAME: el nombre de la zona
    • DESCRIPTION: una descripción de la zona (por ejemplo, una zona del DNS para la instancia de Cloud SQL)
    • DNS_NAME: el nombre del sufijo DNS para la zona, como REGION_NAME.sql.goog. (en el que REGION_NAME es el nombre de la región de la zona)
    • NETWORK_NAME es el nombre de la red de VPC.

    Método HTTP y URL:

    POST https://dns.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones

    Cuerpo JSON de la solicitud:

    {
      "name": "ZONE_NAME",
      "description": "DESCRIPTION",
      "dnsName": "DNS_NAME",
      "visibility": "private",
      "privateVisibilityConfig": {
        "kind": "dns#managedZonePrivateVisibilityConfig",
        "networks": [
          {
            "kind": "dns#managedZonePrivateVisibilityConfigNetwork",
            "networkUrl": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK_NAME"
          }
        ]
      }
    }
    

    Para enviar tu solicitud, expande una de estas opciones:

    Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

    {
      "name": "ZONE_NAME",
      "dnsName": "DNS_NAME",
      "description": "DESCRIPTION",
      "id": "ID",
      "nameServers": [
        "ns-gcp-private.googledomains.com."
      ],
      "creationTime": "2024-05-10T17:05:34.607Z",
      "visibility": "private",
      "privateVisibilityConfig": {
        "networks": [
          {
            "networkUrl": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK_NAME",
            "kind": "dns#managedZonePrivateVisibilityConfigNetwork"
          }
        ],
        "gkeClusters": [],
        "kind": "dns#managedZonePrivateVisibilityConfig"
      },
      "cloudLoggingConfig": {
        "kind": "dns#managedZoneCloudLoggingConfig"
      },
      "kind": "dns#managedZone"
    }
    
  5. Después de crear el extremo de Private Service Connect, crea un registro DNS en la zona.
  6. Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

    • PROJECT_ID: el ID o el número del proyecto de Google Cloud que contiene la zona del DNS.
    • ZONE_NAME: el nombre de la zona
    • DNS_RECORD: el nombre del registro DNS. Este registro se establece en el nombre de DNS que recuperaste de la instancia de Cloud SQL anteriormente en este procedimiento (por ejemplo, 1a23b4cd5e67.1a2b345c6d27.us-central1.sql.goog.).
    • RRSET_TYPE: el tipo de conjunto de registros (por ejemplo, A).
    • TTL: el tiempo de actividad (TTL) para el conjunto de registros en cantidad de segundos (por ejemplo, 300).
    • RR_DATA: la dirección IP asignada para el extremo de Private Service Connect (por ejemplo, 198.51.100.5). También puedes ingresar varios valores, como rrdata1 rrdata2 rrdata3 (por ejemplo, 10.1.2.3 10.2.3.4 10.3.4.5).

    Método HTTP y URL:

    POST https://dns.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones/ZONE_NAME

    Cuerpo JSON de la solicitud:

    {
      "deletions": []
      "additions": [
        {
          "name": "DNS_RECORD",
          "type": "RRSET_TYPE",
          "ttl": TTL,
          "rrdatas": [
            "RR_DATA"
          ]
        }
      ]
    }
    

    Para enviar tu solicitud, expande una de estas opciones:

    Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

    {
      "additions": [
        {
          "name": "DNS_RECORD",
          "type": "RRSET_TYPE",
          "ttl": TTL,
          "rrdatas": [
            "RR_DATA"
          ],
          "signatureRrdatas": [],
          "kind": "dns#resourceRecordSet"
        }
      ],
      "deletions": [],
      "startTime": "2024-05-10T17:29:44.375Z",
      "id": "CHANGE_ID",
      "status": "pending",
      "kind": "dns#change"
    }
    

Conéctate directamente con un registro DNS

Antes de conectarte a una instancia de Cloud SQL mediante un registro DNS, haz lo siguiente:

  1. Crea un extremo de Private Service Connect.
  2. Confirma que el adjunto de servicio de la instancia acepte el extremo. Para verificar que el estado del extremo sea ACCEPTED, verifica el estado.
  3. Configura una zona administrada de DNS y un registro DNS.

Una vez que cumplas con estas condiciones, usa el registro DNS para conectarte a la instancia desde cualquier red de VPC en la que creaste el extremo.

psql "sslmode=disable dbname=DATABASE_NAME user=USERNAME host=DNS_RECORD"

Realiza los siguientes reemplazos:

  • DATABASE_NAME: El nombre de la base de datos de Cloud SQL para PostgreSQL que se encuentra dentro de la instancia
  • USERNAME: el nombre del usuario que se conecta a la instancia
  • DNS_RECORD: el registro DNS del extremo

Conéctate directamente a través de una dirección IP interna

Antes de conectarte a una instancia de Cloud SQL con Private Service Connect habilitado, haz lo siguiente:

  1. Crea un extremo de Private Service Connect.
  2. Confirma que el adjunto de servicio de la instancia acepte el extremo. Para verificar que el estado del extremo sea ACCEPTED, verifica el estado.

Una vez que cumplas con estas condiciones, usa la dirección IP del extremo para acceder a la instancia desde cualquier red de VPC donde creaste el extremo.

  1. Recupera la dirección IP interna del extremo de Private Service Connect con el nombre de la dirección IP del extremo.

    gcloud

    Para recuperar la dirección IP, usa el comando gcloud compute addresses describe:

    gcloud compute addresses describe ADDRESS_NAME \
    --project=PROJECT_ID \
    --region=REGION_NAME

    Realiza los siguientes reemplazos:

    • ADDRESS_NAME: es el nombre de la dirección IP del extremo.
    • PROJECT_ID: el ID o el número del proyecto de Google Cloud que contiene el extremo
    • REGION_NAME: el nombre de la región para el extremo

    En la respuesta, verifica que aparezca una dirección IP para el campo address. Esta es la dirección IP interna.

    REST

    Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

    • PROJECT_ID: el ID o el número del proyecto de Google Cloud que contiene el extremo
    • REGION_NAME: el nombre de la región para el extremo
    • ADDRESS_NAME: es el nombre de la dirección IP del extremo.

    Método HTTP y URL:

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/addresses/ADDRESS_NAME

    Para enviar tu solicitud, expande una de estas opciones:

    Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

    {
      "kind": "compute#address",
      "id": "ADDRESS_ID",
      "creationTimestamp": "2024-05-09T11:20:50.114-07:00",
      "name": "ADDRESS_NAME",
      "description": "This is the name of the internal IP address.",
      "address": "IP_ADDRESS",
      "status": "RESERVED",
      "region": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME",
      "selfLink": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/addresses/ADDRESS_NAME",
      "networkTier": "PREMIUM",
      "labelFingerprint": "LABEL_FINGERPRINT_ID",
      "addressType": "EXTERNAL"
    }
    

    La dirección IP interna es el valor asociado con el campo address.

  2. Como alternativa, recupera la dirección IP interna del extremo de Private Service Connect con el adjunto de servicio de la instancia de Cloud SQL.

    gcloud

    Para recuperar la dirección IP, usa el comando gcloud compute forwarding-rules list:

    gcloud compute forwarding-rules list \
    --filter="TARGET:REGION_NAME/serviceAttachments/SERVICE_ATTACHMENT_NAME" \
    --project=PROJECT_ID

    Realiza los siguientes reemplazos:

    • REGION_NAME: el nombre de la región para el extremo
    • PROJECT_ID: el ID o el número del proyecto de Google Cloud que contiene el extremo
    • SERVICE_ATTACHMENT_NAME: El nombre del archivo adjunto de servicio para la instancia de Cloud SQL

    En la respuesta, verifica que aparezca una dirección IP. Esta es la dirección IP interna.

    A continuación, se muestra una respuesta de ejemplo:

    NAME REGION IP_ADDRESS TARGET
    myInstance us-central1 10.10.10.10 us-central1/serviceAttachments/a-123456789e0a-psc-service-attachment-abc123d4e5f67gh8

    REST

    Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

    • PROJECT_ID: el ID o el número del proyecto de Google Cloud que contiene el extremo
    • REGION_NAME: el nombre de la región para el extremo
    • SERVICE_ATTACHMENT_PROJECT_ID: Es el ID o el número del proyecto de Google Cloud que contiene el archivo adjunto del servicio.
    • SERVICE_ATTACHMENT_NAME: El nombre del archivo adjunto de servicio para la instancia de Cloud SQL

    Método HTTP y URL:

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/forwardingRules?target="https://www.googleapis.com/compute/v1/projects/SERVICE_ATTACHMENT_PROJECT_ID/regions/REGION_NAME/serviceAttachments/SERVICE_ATTACHMENT_NAME"

    Para enviar tu solicitud, expande una de estas opciones:

    Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

    {
      "kind": "compute#forwardingRuleList",
      "id": "projects/PROJECT_ID/regions/REGION_NAME/forwardingRules",
      "items": [
        {
          "kind": "compute#forwardingRule",
          "id": "FORWARDING_RULE_ID",
          "creationTimestamp": "2023-10-31T13:04:37.168-07:00",
          "name": "FORWARDING_RULE_NAME",
          "region": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME",
          "IPAddress": "IP_ADDRESS",
          "target": "https://www.googleapis.com/compute/v1/projects/SERVICE_ATTACHMENT_PROJECT_ID/regions/REGION_NAME/serviceAttachments/SERVICE_ATTACHMENT_NAME",
          "selfLink": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/forwardingRules/FORWARDING_RULE_NAME",
          "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/VPC_NETWORK_NAME",
          "serviceDirectoryRegistrations": [
            {
              "namespace": "goog-psc-default"
            }
          ],
          "networkTier": "PREMIUM",
          "labelFingerprint": "LABEL_FINGERPRINT_ID",
          "fingerprint": "FINGERPRINT_ID",
          "pscConnectionId": "PSC_CONNECTION_ID",
          "pscConnectionStatus": "CLOSED",
          "allowPscGlobalAccess": true
        }
      ],
      "selfLink": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/forwardingRules"
    }
    

    La dirección IP interna es el valor asociado con el campo IPAddress.

  3. Para conectarte a la instancia de Cloud SQL, usa la dirección IP interna.

    psql "sslmode=disable dbname=DATABASE_NAME user=USERNAME hostaddr=IP_ADDRESS"

    Realiza los siguientes reemplazos:

    • DATABASE_NAME: El nombre de la base de datos de Cloud SQL para PostgreSQL que se encuentra dentro de la instancia
    • USERNAME: el nombre del usuario que se conecta a la instancia
    • IP_ADDRESS: la dirección IP del extremo

Conectarse con el proxy de autenticación de Cloud SQL

El proxy de autenticación de Cloud SQL es un conector que proporciona acceso seguro a una instancia con Private Service Connect habilitado sin necesidad de redes autorizadas o de configurar SSL.

Para permitir conexiones cliente de proxy de autenticación de Cloud SQL, configura un registro DNS que coincida con el nombre de DNS recomendado que se proporciona para la instancia. El registro DNS es una asignación entre un recurso DNS y un nombre de dominio.

Si te conectas a través de Private Service Connect, se requiere la versión v2.5.0 o una posterior del proxy de autenticación de Cloud SQL.

Descarga y, luego, instala el proxy de Cloud SQL Auth

Para conectarte a instancias con Private Service Connect habilitado, debes descargar e instalar el objeto binario para el proxy de autenticación de Cloud SQL. El objeto binario que descargues depende del sistema operativo y de si este usa un kernel de 32 bits o de 64 bits. La mayoría del hardware más nuevo usa un kernel de 64 bits.

Si no estás seguro de si tu máquina ejecuta un kernel de 32 bits o de 64 bits, usa el comando uname -a para Linux o macOS. Para Windows, consulta la documentación de Windows.

Inicia el proxy de autenticación de Cloud SQL

El proxy de autenticación de Cloud SQL admite conexiones a instancias con Private Service Connect habilitado. Para obtener más información, consulta Inicia el proxy de autenticación de Cloud SQL.

  1. Consulta la información resumida sobre una instancia de Cloud SQL, incluido el nombre de la conexión de la instancia.

    gcloud

    Para ver la información resumida sobre una instancia de Cloud SQL, usa el comando
    gcloud sql instances describe.

    gcloud sql instances describe INSTANCE_NAME \
    --project=PROJECT_ID \
    --format='value(connectionName)'

    Realiza los siguientes reemplazos:

    • INSTANCE_NAME: el nombre de la instancia de Cloud SQL
    • PROJECT_ID: el ID o el número del proyecto de Google Cloud que contiene la instancia

    El nombre de conexión tiene el formato PROJECT_ID:REGION_NAME:INSTANCE_NAME.

    REST

    Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

    • PROJECT_ID: el ID o el número del proyecto de Google Cloud que contiene la instancia
    • INSTANCE_NAME: Es el nombre de la instancia.

    HTTP method and URL:

    GET https://sqladmin.googleapis.com/sql/v1/projects/PROJECT_ID/instances/INSTANCE_NAME

    Para enviar tu solicitud, expande una de estas opciones:

    Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

    {
      ...
      "connectionName": "PROJECT_ID:REGION_NAME:INSTANCE_NAME"
    }
    

    El nombre de conexión tiene el formato PROJECT_ID:REGION_NAME:INSTANCE_NAME.

  2. Copia el nombre de la conexión de la instancia.
  3. Inicia el proxy de autenticación de Cloud SQL:

    ./cloud-sql-proxy INSTANCE_CONNECTION_NAME --psc 

    Reemplaza INSTANCE_CONNECTION_NAME por el nombre de la conexión de instancia que copiaste en el paso anterior.

Conéctate mediante los conectores de lenguaje de Cloud SQL

Los conectores de lenguaje de Cloud SQL son bibliotecas que proporcionan acceso seguro a una instancia de Cloud SQL con Private Service Connect habilitado sin necesidad de tener redes autorizadas ni de configurar SSL.

Para permitir conexiones con conectores de lenguaje de Cloud SQL, configura un registro DNS que coincida con el nombre de DNS recomendado que se proporciona para la instancia. El registro DNS es una asignación entre un recurso DNS y un nombre de dominio.

Los conectores de lenguaje de Cloud SQL admiten conexiones de Private Service Connect a través del tipo de IP PSC dentro de sus respectivas bibliotecas.

Conéctate desde App Engine Standard, Cloud Run o Cloud Run Functions

Para conectarte a instancias de Cloud SQL con Private Service Connect habilitado, puedes usar App Engine Standard, Cloud Run o Cloud Run Functions.

En estos entornos sin servidores compatibles, se admiten los conectores de lenguaje de Cloud SQL y las conexiones TCP directas mediante una dirección IP y un número de puerto. Para las conexiones TCP directas, esta es la dirección IP que reservas cuando creas el extremo de Private Service Connect. Puedes especificar la dirección IP como la dirección para el host de la base de datos.

Si creas un registro DNS para el extremo, puedes especificar este registro para el host.

Conectarse desde BigQuery

Para acceder a los datos en Cloud SQL y realizar consultas en estos datos a través de una conexión IP interna, usa el parámetro
--enable-google-private-path. Este parámetro solo es válido si se cumplen estas condiciones:

  • Usa el parámetro --no-assign-ip.
  • Usa el parámetro --network para especificar el nombre de la red de VPC que deseas usar a fin de crear una conexión interna.

Prueba la conectividad

Para probar la conectividad entrante a una instancia de Cloud SQL con Private Service Connect habilitado, configura la dirección IP del extremo de Private Service Connect como la dirección IP de destino.

gcloud

A fin de crear una prueba de conectividad para una instancia de Cloud SQL con Private Service Connect habilitado, usa el comando gcloud network-management connectivity-tests create:

gcloud network-management connectivity-tests create CONNECTIVITY_TEST_NAME \
--source-instance=SOURCE_INSTANCE \
--destination-cloud-sql-instance=DESTINATION_CLOUD_SQL_INSTANCE \
--destination-network=DESTINATION_NETWORK \
--destination-port=DESTINATION_PORT \
--protocol=tcp

Realiza los siguientes reemplazos:

  • CONNECTIVITY_TEST_NAME: el nombre de la prueba de conectividad.
  • SOURCE_INSTANCE: el URI de la instancia de Compute Engine en la que se encuentra la dirección IP de origen (por ejemplo, projects/myproject/zones/myzone/instances/myinstance).
  • DESTINATION_CLOUD_SQL_INSTANCE: la URL de la instancia de Cloud SQL (por ejemplo, projects/myproject/instances/myinstance).
  • DESTINATION_NETWORK: el URI de la red de VPC en la que se encuentra la dirección IP de destino (por ejemplo, projects/myproject/global/networks/mynetwork).
  • DESTINATION_PORT: Es el número de puerto reservado para la instancia. En las instancias de Cloud SQL para PostgreSQL, el número de puerto es 5432.

REST

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: el ID o el número del proyecto de Google Cloud que contiene la instancia.
  • CONNECTIVITY_TEST_NAME: el nombre de la prueba de conectividad.
  • SOURCE_IP_ADDRESS: la dirección IP de la instancia de Compute Engine de origen.
  • SOURCE_INSTANCE: el URI de la instancia de Compute Engine en la que se encuentra la dirección IP de origen (por ejemplo, projects/myproject/zones/myzone/instances/myinstance).
  • SOURCE_NETWORK: el URI de la red de VPC en la que se encuentra la dirección IP de origen (por ejemplo, projects/myproject/global/networks/mynetwork).
  • DESTINATION_IP_ADDRESS: la dirección IP de la instancia de Cloud SQL de destino.
  • DESTINATION_PORT: Es el número de puerto reservado para la instancia. En las instancias de Cloud SQL para PostgreSQL, el número de puerto es 5432.
  • DESTINATION_NETWORK: el URI de la red de VPC en la que se encuentra la dirección IP de destino (por ejemplo, projects/myproject/global/networks/mynetwork).

Método HTTP y URL:

POST https://networkmanagement.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/connectivityTests?testId=CONNECTIVITY_TEST_NAME

Cuerpo JSON de la solicitud:

{
  "source": {
    "ipAddress": "SOURCE_IP_ADDRESS",
    "instance": "SOURCE_INSTANCE",
    "network": "SOURCE_NETWORK"
  },
  "destination": {
    "ipAddress": "DESTINATION_IP_ADDRESS",
    "port": DESTINATION_PORT,
    "network": "DESTINATION_NETWORK",
    "projectId": "PROJECT_ID"
  },
  "protocol": "TCP"
}

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

{
  "name": "projects/PROJECT_ID/locations/global/operations/operation-OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.networkmanagement.v1.OperationMetadata",
    "createTime": "2024-05-23T16:43:49.313981473Z",
    "target": "projects/PROJECT_ID/locations/global/connectivityTests/CONNECTIVITY_TEST_NAME",
    "verb": "create",
    "cancelRequested": false,
    "apiVersion": "v1"
  },
  "done": false
}

Limitaciones

  • Puedes configurar hasta 20 extremos de Private Service Connect que se conecten al adjunto de servicio de una instancia de Cloud SQL con Private Service Connect habilitado.
  • No puedes usar los backends de Private Service Connect para las instancias que tienen Private Service Connect habilitado.
  • Las siguientes marcas se invalidan o se ven afectadas:
    • --no-assign-ip: usa esta marca porque las instancias con Private Service Connect habilitado no son compatibles con otros tipos de conectividad, como conexiones IP externas
    • --authorized-networks: no puedes usar esta marca para agregar redes autorizadas
    • --network: no puedes usar esta marca porque está asociada con el acceso privado a servicios
    • --allocated-ip-range-name: no puedes usar esta marca porque no se admiten los nombres de rango de IP permitidos
  • No puedes crear una réplica externa de una instancia con Private Service Connect habilitado.
  • No puedes configurar una instancia que tenga Private Service Connect habilitado para usar el acceso privado a servicios o conexiones IP externas.
    • No puedes habilitar conexiones IP externas en una instancia con Private Service Connect habilitado.
    • No puedes habilitar el acceso privado a servicios ni agregar redes autorizadas a la instancia.
    • No puedes cambiar el tipo de conectividad de la instancia.
  • No puedes usar el comando gcloud sql connect, Cloud Shell, Cloud Build ni Datastream para conectarte a instancias de Cloud SQL con Private Service Connect habilitado.
  • Si realizas migraciones homogéneas a Cloud SQL, no puedes usar Database Migration Service para conectarte a instancias de Cloud SQL con Private Service Connect habilitado.
  • Cuando pruebas la conectividad a una instancia de Cloud SQL con Private Service Connect habilitado, no puedes configurar los siguientes elementos:
    • La dirección IP interna de la instancia o el nombre de DNS como el destino directamente
    • La instancia como origen
    • La dirección IP del extremo de Private Service Connect como el origen
  • No se admite la lista de entidades permitidas basadas en IP mediante redes autorizadas.
  • Las extensiones pglogical, pl/proxy, dblink y postgres_fdw no son compatibles.
  • El control, el registro y las métricas basados en IP de cliente no son compatibles con las estadísticas de consultas y sistemas. Sin embargo, se admiten VPN e Interconnect.
  • Si tu proyecto de red contiene instancias que usan la arquitectura de red de Cloud SQL anterior, no puedes crear una instancia de Private Service Connect. Cloud SQL proporciona herramientas para ayudarte a actualizar las instancias de la arquitectura de red anterior a la arquitectura de red nueva. Para obtener más información o verificar la arquitectura de red de las instancias de Cloud SQL en tu proyecto y realizar las actualizaciones necesarias, consulta Actualiza una instancia a la arquitectura de red nueva.

Solucionar problemas

Esta sección contiene información sobre los problemas asociados con las instancias de Cloud SQL con Private Service Connect habilitado, junto con los pasos para solucionar los problemas.

Problema Soluciona problemas
El adjunto de servicio de la instancia no acepta el extremo de Private Service Connect.
  1. Verifica el estado del extremo.

    gcloud

    Para verificar el estado, usa el comando
    gcloud compute forwarding-rules describe.

    gcloud compute forwarding-rules describe ENDPOINT_NAME \
    --project=PROJECT_ID \
    --region=REGION_NAME \
    | grep pscConnectionStatus

    Realiza los siguientes reemplazos:

    • ENDPOINT_NAME: el nombre del extremo
    • PROJECT_ID: el ID o el número del proyecto de Google Cloud que contiene el extremo
    • REGION_NAME: el nombre de la región para el extremo

    REST

    Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

    • PROJECT_ID: el ID o el número del proyecto de Google Cloud que contiene el extremo de Private Service Connect
    • REGION_NAME: es el nombre de la región.
    • ENDPOINT_NAME: el nombre del extremo

    Método HTTP y URL:

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/forwardingRules/ENDPOINT_NAME

    Para enviar tu solicitud, expande una de estas opciones:

    Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

    {
      "kind": "compute#forwardingRule",
      "id": "ENDPOINT_ID",
      "creationTimestamp": "2024-05-09T12:03:21.383-07:00",
      "name": "ENDPOINT_NAME",
      "region": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME",
      "IPAddress": "IP_ADDRESS",
      "target": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/serviceAttachments/SERVICE_ATTACHMENT_NAME",
      "selfLink": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/forwardingRules/ENDPOINT_NAME",
      "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/default",
      "serviceDirectoryRegistrations": [
        {
          "namespace": "goog-psc-default"
        }
      ],
      "networkTier": "PREMIUM",
      "labelFingerprint": "LABEL_FINGERPRINT_ID",
      "fingerprint": "FINGERPRINT_ID",
      "pscConnectionId": "CONNECTION_ID",
      "pscConnectionStatus": "ACCEPTED",
      "allowPscGlobalAccess": true
    }
    
  2. Verifica que el estado del extremo sea ACCEPTED. Si el estado es PENDING, la instancia no permite el proyecto de Google Cloud que contiene el extremo. Asegúrate de que el proyecto de red en el que se crea el extremo esté permitido. Para obtener más información, consulta Edita una instancia con Private Service Connect habilitado.

¿Qué sigue?

  • Obtén más información sobre IP privada.
  • Más información sobre Private Service Connect
  • Obtén más información sobre cómo crear una réplica de lectura de una instancia con Private Service Connect habilitado.
  • Obtén más información sobre cómo clonar una instancia con Private Service Connect habilitado.
  • Obtén más información para ver información de resumen sobre las instancias con Private Service Connect habilitado.
  • Obtén más información para configurar y quitar la alta disponibilidad de una instancia con Private Service Connect habilitado.
  • Obtén más información sobre cómo editar y borrar una instancia con Private Service Connect habilitado.