Ejemplo: Conectividad privada para un clúster de Atlas

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

Configura la conectividad privada para un clúster de Atlas

Para configurar la conectividad privada en un clúster de Atlas, haz lo siguiente:

  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 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 el clúster de Atlas. Debería ser la misma que la del proyecto de Google Cloud en el que creas las conexiones. Para ver la lista de todas las regiones admitidas 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 Cómo obtener el ID del proyecto del directorio de servicios.
  8. En el campo Nombre de la 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 se adjunta como prefijo a todos los nombres de los extremos y se puede usar para identificar los 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 apropiados para las siguientes variables en la secuencia de comandos:

    • PROJECT_ID
    • REGIÓN
    • IMPORTAR
    • 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
    
    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"'"}' "${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
      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' | sed '2 s/"/"},/4' >> atlasEndpoints-${PREFIX}.json
    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 la guardaste y 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 nombres de extremos de PSC correspondientes. 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 creaste 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 se realiza correctamente, el extremo estará en 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: 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"

Cuando ejecutas este comando en la terminal, se muestra 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 haz clic en Conectar. Se abrirá el diálogo Conectar a <CLUSTER_NAME>.
  3. Haz clic en Extremo privado para el tipo de conexión.
  4. En el menú desplegable Choose a private endpoint, seleccione el prefijo del extremo privado que ingresó en la IU de Atlas.
  5. Haz clic en Elegir un método de conexión.
  6. Haz clic en Controladores en la sección Conéctate a tu aplicación. Este paso es obtener la string de conexión srv.
  7. Copia la cadena de conexión srv de la sección Agrega tu 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 cadena srv como nombre de host. Para obtener más información, consulta Configura un conector de MongoDB.

    La conexión debería crearse correctamente.