Esempio: connettività privata per un cluster MongoDB Atlas

Questa pagina spiega come abilitare la connettività da Integration Connectors al tuo cluster MongoDB Atlas in esecuzione su una rete privata in Google Cloud.

Configurare la connettività privata per un cluster Atlas

Per configurare la connettività privata per un cluster Atlas:

  1. Accedi alla console di gestione di Atlas.
  2. Apri il progetto Atlas per cui devi stabilire la connettività di rete.
  3. Apri la pagina Accesso alla rete per il progetto e seleziona Endpoint privato.
  4. Seleziona Cluster dedicato e poi fai clic su Aggiungi endpoint privato.

    Si aprirà la finestra di dialogo per scegliere un provider cloud.

  5. Seleziona Google Cloud e poi fai clic su Avanti.
  6. Seleziona una regione dell'atlante e poi fai clic su Avanti.

    Si tratta della regione Google Cloud in cui viene creato il cluster Atlas e deve essere la stessa regione del progetto Google Cloud in cui crei le connessioni. Per l'elenco di tutte le regioni di Integration Connectors supportate, consulta Località.

  7. Inserisci l'ID progetto Google Cloud. Si tratta dell'ID progetto della directory dei servizi dal runtime di Integration Connectors. Per ulteriori informazioni, consulta Ottenere l'ID progetto della directory dei servizi.
  8. Nel campo Nome VPC, inserisci default.
  9. Nel campo Nome sottorete, inserisci default.
  10. Nel campo Prefisso endpoint Private Service Connect, inserisci un prefisso.

    Questo testo viene anteposto a tutti i nomi degli endpoint e può essere utilizzato per identificare gli endpoint privati che hai creato.

  11. Installa l'interfaccia a riga di comando gcloud. Per ulteriori informazioni, consulta Installare gcloud CLI.
  12. Copia e salva il seguente script shell come setup_psc.sh sul tuo sistema locale.

    Imposta i valori appropriati per le seguenti variabili nello script:

    • PROJECT_ID
    • REGIONE
    • 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. Esegui lo script shell. Per eseguire lo script shell, vai alla directory in cui hai salvato lo script e poi esegui il seguente comando:
    sh setup_psc.sh

    Questo script genera un file JSON contenente l'elenco degli indirizzi IP e i relativi nomi degli endpoint PSC. Il file JSON viene salvato nella directory in cui viene eseguito lo script shell.

  14. Fai clic su Avanti nella console di gestione di Atlas.
  15. Fai clic su Carica file JSON e carica il file JSON creato nel passaggio 13.
  16. Fai clic su Crea.

    Il completamento della procedura di configurazione dell'endpoint potrebbe richiedere fino a 25 minuti e, se la configurazione è riuscita, l'endpoint sarà nello stato Available.

  17. Verifica la connettività privata. Per saperne di più, vedi Verificare la connettività privata.

Recupera l'ID progetto della directory dei servizi

Per ottenere l'ID progetto della directory dei servizi, puoi utilizzare l'API List Connections come mostrato nell'esempio seguente.

Sintassi

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"

Sostituisci quanto segue:

  • CONNECTORS_PROJECT_ID: l'ID del progetto Google Cloud in cui hai creato la connessione.

Esempio

Questo esempio recupera l'ID progetto della directory dei servizi per il progetto Google Cloud connectors-test.

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"

L'esecuzione di questo comando sul terminale mostra un output simile al seguente:

.....
{
  "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
      }
    },
....

Nell'output di esempio, per il progetto Google Cloud connectors-test, l'ID progetto della directory del servizio è abcdefghijk-tp.

Verifica la connettività privata

Per verificare la connettività privata ai tuoi cluster Atlas:

  1. Nella console di gestione di Atlas, apri la pagina Database Deployments (Deployment di database).
  2. Scorri fino al cluster richiesto e fai clic su Connetti. Viene visualizzata la finestra di dialogo Connetti a <CLUSTER_NAME>.
  3. Fai clic su Endpoint privato per il tipo di connessione.
  4. Seleziona il prefisso dell'endpoint privato che hai inserito nell'interfaccia utente di Atlas dal menu a discesa Scegli un endpoint privato.
  5. Fai clic su Scegli un metodo di connessione.
  6. Fai clic su Driver nella sezione Connetti all'applicazione. Questo passaggio serve per ottenere la stringa di connessione srv.
  7. Copia la stringa di connessione srv dalla sezione Aggiungi la stringa di connessione al codice dell'applicazione.

    Formato della stringa srv: mongodb+srv://{cluster-name}-pl-{index}.{unique-pin}.mongodb.net.

  8. Crea una connessione MongoDB utilizzando questa stringa srv come nome host. Per ulteriori informazioni, consulta la pagina Configurare un connettore MongoDB.

    La connessione dovrebbe essere stata creata correttamente.