Ejemplo: conectividad privada para un clúster de Atlas

En esta página, se explica cómo habilitar la conectividad desde Integration Connectors a tu clúster de MongoDB Atlas que se ejecuta en una red privada en Google Cloud.

Configura la conectividad privada para un clúster de Atlas

Para configurar la conectividad privada en un clúster de Atlas, sigue estos pasos:

  1. Accede a la consola de administración de Atlas.
  2. Abre el proyecto de Atlas para el que necesitas establecer la conectividad de red.
  3. Abre la página Acceso a la red del proyecto y, luego, selecciona Extremo privado.
  4. Selecciona Clúster dedicado y, luego, haz clic en Agregar extremo privado.

    Se abrirá el cuadro de diálogo para elegir un proveedor de servicios en la nube.

  5. Selecciona Google Cloud y, luego, haz clic en Siguiente.
  6. Selecciona una región de Atlas y, luego, haz clic en Siguiente.

    Esta es la región de Google Cloud donde se crea tu clúster de Atlas, y debería ser la misma región que el proyecto de Google Cloud en el que creas tus conexiones. Para el lista de todas las regiones compatibles de Integration Connector, consulta Ubicaciones.

  7. Ingresa el ID del proyecto de Google Cloud. Este es el ID del proyecto del directorio de servicios del entorno de ejecución de Integration Connectors. Para obtener más información, consulta Obtén el ID del proyecto del directorio de servicios.
  8. En el campo Nombre de VPC, ingresa default.
  9. En el campo Nombre de la subred, ingresa default.
  10. En el campo Prefijo del extremo de Private Service Connect, ingresa un prefijo.

    Este texto tiene un prefijo para todos los nombres de extremos y puede usarse para identificar el extremos privados que creaste.

  11. Instala la CLI (interfaz de línea de comandos) de gcloud. Para obtener más información, consulta Instala gcloud CLI.
  12. Copia y guarda la siguiente secuencia de comandos de shell como setup_psc.sh en tu sistema local.

    Establece los valores adecuados para las siguientes variables en la secuencia de comandos:

    • ID DEL PROYECTO
    • REGIÓN
    • PREFIX
    • SERVICE_ATTACHMENT_ID_PREFIX
    #!/bin/bash
    
    alias gcurl='curl -H "Authorization: Bearer $(gcloud auth print-access-token)"'
    
    # Set PROJECT_ID to the ID of the Google Cloud project where you create your connections.
    export PROJECT_ID=PROJECT_ID
    
    # Set REGION to the Google Cloud region where Atlas cluster is installed.
    export REGION=REGION
    
    export HOSTNAME=https://connectors.googleapis.com/v1
    
    # Set ENDPOINT_PREFIX to the prefix value that you entered for the
    # "Private service connect endpoint prefix" field (in step 10).
    export PREFIX=ENDPOINT_PREFIX
    
    # Set SERVICE_ATTACHMENT_ID_PREFIX to the prefix of the service attachments
    # created by Atlas. The service attachments are present in the script
    # displayed on the Atlas UI and have the following naming format:
    # projects/{google-cloud-project-id-of-atlas-cluster}/regions/{region}/serviceAttachment/{prefix}-{index}
    # For example, if the service attachment is
    # "projects/p-ditnerelrvndieqhe3kh9pop/regions/us-west1/serviceAttachments/sa-us-west1-37204mg5wr0j6-$i",
    # you must set the value of SERVICE_ATTACHMENT_ID_PREFIX to
    # "projects/p-ditnerelrvndieqhe3kh9pop/regions/us-west1/serviceAttachments/sa-us-west1-37204mg5wr0j6"
    export SERVICE_ATTACHMENT_ID_PREFIX=SERVICE_ATTACHMENT_ID_PREFIX
    
    # Set ENDPOINT_GLOBAL_ACCESS to true if you want to enable global access for the endpoint, else false.
    export ENDPOINT_GLOBAL_ACCESS=ENDPOINT_GLOBAL_ACCESS
    
    if [ "$ENDPOINT_GLOBAL_ACCESS" != "true" ] && [ "$ENDPOINT_GLOBAL_ACCESS" != "false" ]; then
        echo "Error: Variable ENDPOINT_GLOBAL_ACCESS must be either 'true' or 'false'."
        exit 1
    fi
    
    function poll_operation() {
      OPERATION_ID="$1"
      INDEX="$2"
      RESULT=''
    
      while [[ "$RESULT" != *"true"* ]];
      do
        RESULT=$(gcurl -s -X GET "${HOSTNAME}/${OPERATION_ID}" | grep '"done"')
        sleep 5
      done
    
      echo "${PREFIX}-${INDEX} created"
    }
    
    echo "Creating Endpoint Attachments..."
    for i in {0..49}
    do
      export ENDPOINT=${HOSTNAME}/projects/${PROJECT_ID}/locations/${REGION}/endpointAttachments?endpointAttachmentId=${PREFIX}-$i
      OPERATION_ID=$(gcurl -s -X POST -H "Content-Type: application/json" -d '{"name": "'"projects/${PROJECT_ID}/locations/${REGION}/endpointAttachments/${PREFIX}-$i"'","serviceAttachment": "'"${SERVICE_ATTACHMENT_ID_PREFIX}-$i"'", "endpointGlobalAccess":'${ENDPOINT_GLOBAL_ACCESS}'}' "${ENDPOINT}" | sed 's/  //' | grep -E '"name"' | sed -E 's/"name": "//' | sed 's/",//')
      poll_operation "$OPERATION_ID" "$i" &
    done
    
    wait
    echo "All endpoint attachments created."
    
    echo "[" > atlasEndpoints-${PREFIX}.json
    
    echo "Fetching IP Addresses..."
    for i in {0..49}
    do
      ENDPOINT=${HOSTNAME}/projects/${PROJECT_ID}/locations/${REGION}/endpointAttachments/${PREFIX}-$i
      response=$(gcurl -s -X GET "${ENDPOINT}" | sed 's/  //g' | grep -E 'name|endpointIp' | sed 's/"endpointIp"/"IPAddress"/g' | sed -E 's/"name": "projects\/.+\/locations\/.+\/endpointAttachments\//"name": "/g' | sed '1 s/"/{"/1')
      if [ "$ENDPOINT_GLOBAL_ACCESS" = "true" ]; then
        echo "${response}" | sed '2 s/"/"}/4' >> atlasEndpoints-${PREFIX}.json
      else
        echo "${response}" | sed '2 s/"/"},/4' >> atlasEndpoints-${PREFIX}.json
      fi
    done
    
    sed -i '$s/,/]/' atlasEndpoints-${PREFIX}.json
    
    echo "Created atlasEndpoints-${PREFIX}.json"
  13. Ejecuta la secuencia de comandos de shell. Para ejecutar la secuencia de comandos de shell, ve al directorio en el que guardaste la secuencia de comandos. y, luego, ejecuta el siguiente comando:
    sh setup_psc.sh

    Esta secuencia de comandos genera un archivo JSON que tiene la lista de direcciones IP y sus respectivos Nombres de extremos de PSC. El archivo JSON se guarda en el directorio en el que se ejecuta la secuencia de comandos de shell.

  14. Haz clic en Next en la consola de administración de Atlas.
  15. Haz clic en Subir archivo JSON y, luego, sube el archivo JSON que se creó en el paso 13.
  16. Haz clic en Crear.

    El proceso de configuración del extremo puede tardar hasta 25 minutos en completarse y, si la configuración es de forma correcta, el extremo tendrá el estado Available.

  17. Verifica tu conectividad privada. Para obtener más información, consulta Verifica la conectividad privada.

Obtén el ID del proyecto del directorio de servicios

Para obtener el ID del proyecto del directorio de servicios, puedes usar la API de List Connections como se muestra en el siguiente ejemplo.

Sintaxis

curl -X GET \
    -H "authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://connectors.googleapis.com/v1/projects/CONNECTORS_PROJECT_ID/locations/-/connections"

Reemplaza lo siguiente:

  • CONNECTORS_PROJECT_ID: Es el ID del proyecto de Google Cloud en el que creaste la conexión.

Ejemplo

En este ejemplo, se obtiene el ID del proyecto del directorio de servicios para el proyecto connectors-test de Google Cloud.

curl -X GET \
    -H "authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://connectors.googleapis.com/v1/projects/connectors-test/locations/-/connections"

Si ejecutas este comando en la terminal, se mostrará un resultado similar al siguiente:

.....
{
  "connections": [
    {
      "name": "projects/connectors-test/locations/asia-northeast1/connections/big-query-iam-invalid-sa",
      "createTime": "2022-10-07T09:02:31.905048520Z",
      "updateTime": "2022-10-07T09:22:39.993778690Z",
      "connectorVersion": "projects/connectors-test/locations/global/providers/gcp/connectors/bigquery/versions/1",
      "status": {
        "state": "ACTIVE"
      },
      "configVariables": [
        {
          "key": "project_id",
          "stringValue": "connectors-test"
        },
        {
          "key": "dataset_id",
          "stringValue": "testDataset"
        }
      ],
      "authConfig": {},
      "serviceAccount": "564332356444-compute@developer.gserviceaccount.com",
      "serviceDirectory": "projects/abcdefghijk-tp/locations/asia-northeast1/namespaces/connectors/services/runtime",
      "nodeConfig": {
        "minNodeCount": 2,
        "maxNodeCount": 50
      }
    },
....

En el resultado de muestra, para el proyecto connectors-test de Google Cloud, el ID del proyecto del directorio de servicios es abcdefghijk-tp.

Verifica la conectividad privada

Para verificar la conectividad privada a tus clústeres de Atlas, haz lo siguiente:

  1. En la consola de administración de Atlas, abre la página Implementaciones de bases de datos.
  2. Desplázate hasta el clúster requerido y, luego, haz clic en Conectar. Esto abrirá el Diálogo Conectar a <CLUSTER_NAME>
  3. Haz clic en Extremo privado para el tipo de conexión.
  4. Seleccione el prefijo del extremo privado que ingresó en la IU de Atlas en el menú desplegable Elegir un extremo privado.
  5. Haz clic en Elige un método de conexión.
  6. Haz clic en Controladores en la sección Conéctate a tu aplicación. Este paso es para obtener srv cadena de conexión.
  7. Copia la cadena de conexión srv de la sección Agrega la cadena de conexión al código de la aplicación.

    Formato de la cadena srv: mongodb+srv://{cluster-name}-pl-{index}.{unique-pin}.mongodb.net.

  8. Crea una conexión de MongoDB con esta string srv como nombre de host. Para obtener más información, consulta Configura un conector de MongoDB.

    La conexión debería crearse correctamente.