Exemplo: conetividade privada para um cluster do MongoDB Atlas

Esta página explica como ativar a conetividade dos Integration Connectors ao seu cluster do MongoDB Atlas em execução numa rede privada no Google Cloud.

Configure a conetividade privada para um cluster do Atlas

Para configurar a conetividade privada para um cluster do Atlas, faça o seguinte:

  1. Inicie sessão na consola de gestão do Atlas.
  2. Abra o projeto do Atlas para o qual precisa de estabelecer a conetividade de rede.
  3. Abra a página Acesso à rede do projeto e, de seguida, selecione Ponto final privado.
  4. Selecione Cluster dedicado e, de seguida, clique em Adicionar ponto final privado.

    Esta ação abre a caixa de diálogo para escolher um fornecedor de nuvem.

  5. Selecione Google Cloud e, de seguida, clique em Seguinte.
  6. Selecione uma região do Atlas e, de seguida, clique em Seguinte.

    Esta é a região do Google Cloud onde o cluster do Atlas é criado e deve ser a mesma região do projeto do Google Cloud onde cria as suas ligações. Para ver a lista de todas as regiões do conector de integração suportadas, consulte Localizações.

  7. Introduza o ID do projeto do Google Cloud. Este é o ID do projeto do diretório de serviços do tempo de execução dos Integration Connectors. Para mais informações, consulte o artigo Obtenha o ID do projeto do diretório de serviços.
  8. No campo Nome da VPC, introduza default.
  9. No campo Nome da sub-rede, introduza default.
  10. No campo Prefixo do ponto final do Private Service Connect, introduza um prefixo.

    Este texto é adicionado como prefixo a todos os nomes dos pontos finais e pode ser usado para identificar os pontos finais privados que criou.

  11. Instale a gcloud CLI (interface de linhas de comando). Para mais informações, consulte o artigo Instale a CLI gcloud.
  12. Copie e guarde o seguinte script de shell como setup_psc.sh no seu sistema local.

    Defina valores adequados para as seguintes variáveis no script:

    • PROJECT_ID
    • REGION
    • 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. Execute o script shell. Para executar o script de shell, aceda ao diretório no qual guardou o script e, de seguida, execute o seguinte comando:
    sh setup_psc.sh

    Este script gera um ficheiro JSON com a lista de endereços IP e os respetivos nomes de pontos finais do PSC. O ficheiro JSON é guardado no diretório onde o script de shell é executado.

  14. Clique em Seguinte na consola de gestão do Atlas.
  15. Clique em Carregar ficheiro JSON e, de seguida, carregue o ficheiro JSON criado no passo 13.
  16. Clique em Criar.

    O processo de configuração do ponto final pode demorar até 25 minutos a ser concluído e, se a configuração for bem-sucedida, o ponto final vai estar no estado Available.

  17. Valide a sua conetividade privada. Para mais informações, consulte o artigo Valide a conetividade privada.

Obtenha o ID do projeto do diretório de serviços

Para obter o ID do projeto do diretório de serviços, pode usar a API List Connections, conforme mostrado no exemplo seguinte.

Sintaxe

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"

Substitua o seguinte:

  • CONNECTORS_PROJECT_ID: o ID do seu projeto do Google Cloud onde criou a ligação.

Exemplo

Este exemplo obtém o ID do projeto do diretório de serviços para o projeto do 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"

A execução deste comando no terminal apresenta um resultado semelhante ao seguinte:

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

No resultado de exemplo, para o projeto do Google Cloud, o ID do projeto do diretório de serviços é abcdefghijk-tp.connectors-test

Valide a conetividade privada

Para validar a conetividade privada aos seus clusters do Atlas, faça o seguinte:

  1. Na consola de gestão do Atlas, abra a página Implementações de bases de dados.
  2. Desloque a página até ao cluster necessário e, de seguida, clique em Associar. Esta ação abre a caixa de diálogo Associar a <CLUSTER_NAME>.
  3. Clique em Ponto final privado para o tipo de ligação.
  4. Selecione o prefixo do ponto final privado que introduziu na IU do Atlas no menu pendente Escolha um ponto final privado.
  5. Clique em Escolher um método de associação.
  6. Clique em Drivers na secção Associe à sua aplicação. Este passo destina-se a obter a string de ligação srv.
  7. Copie a srvstring de ligação da secção Adicione a string de ligação ao código da sua aplicação.

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

  8. Crie uma ligação MongoDB usando esta string srvcomo o nome de anfitrião. Para mais informações, consulte o artigo Configure um conetor do MongoDB.

    A associação deve ser criada com êxito.