Exemplo: conectividade particular para um cluster do MongoDB Atlas

Nesta página, explicamos como ativar a conectividade dos Integration Connectors ao cluster do MongoDB Atlas em execução em uma rede privada no Google Cloud.

Configurar a conectividade particular para um cluster do Atlas

Para configurar a conectividade particular de um cluster do Atlas, faça o seguinte:

  1. Faça login no console de gerenciamento do Atlas.
  2. Abra o projeto do Atlas para o qual você precisa estabelecer a conectividade de rede.
  3. Abra a página Acesso à rede do projeto e selecione Endpoint particular.
  4. Selecione Cluster dedicado e clique em Adicionar endpoint particular.

    Isso abre a caixa de diálogo para escolher um provedor de nuvem.

  5. Selecione Google Cloud e clique em Próxima.
  6. Selecione uma região do Atlas e clique em Próxima.

    É a região do Google Cloud em que o cluster do Atlas é criado, e precisa ser a mesma do projeto do Google Cloud em que você cria as conexões. Para conferir a lista de todas as regiões com suporte para o Integration Connector, consulte Locais.

  7. Insira o ID do projeto do Google Cloud. É o ID do projeto do diretório de serviços do ambiente de execução dos Integration Connectors. Para mais informações, consulte Receber o ID do projeto do diretório de serviços.
  8. No campo Nome do VPC, insira default.
  9. No campo Nome da sub-rede, insira default.
  10. No campo Prefixo do endpoint do Private Service Connect, insira um prefixo.

    Esse texto é o prefixo de todos os nomes de endpoint e pode ser usado para identificar os endpoints particulares que você criou.

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

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

    • PROJECT_ID
    • REGIÃO
    • 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 de shell. Para executar o script de shell, acesse o diretório em que você salvou o script e execute o seguinte comando:
    sh setup_psc.sh

    Esse script gera um arquivo JSON com a lista de endereços IP e os nomes de endpoint do PSC correspondentes. O arquivo JSON é salvo no diretório em que o script de shell é executado.

  14. Clique em Próxima no console de gerenciamento do Atlas.
  15. Clique em Fazer upload do arquivo JSON e faça upload do arquivo JSON criado na etapa 13.
  16. Clique em Criar.

    O processo de configuração do endpoint pode levar até 25 minutos para ser concluído. Se a configuração for bem-sucedida, o endpoint vai estar no estado Available.

  17. Verifique sua conectividade privada. Para mais informações, consulte Verificar a conectividade particular.

Conseguir o ID do projeto do diretório de serviço

Para conferir o ID do projeto do diretório de serviços, use a API List Connections, conforme mostrado no exemplo a seguir.

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:

  • CONNECTORS_PROJECT_ID: o ID do projeto do Google Cloud em que você criou a conexão.

Exemplo

Este exemplo recebe o ID do projeto do diretório de serviços do projeto connectors-test do 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"

A execução desse comando no terminal mostra uma saída semelhante a esta:

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

Na saída de exemplo, para o projeto connectors-test do Google Cloud, o ID do projeto do diretório de serviço é abcdefghijk-tp.

Verificar a conectividade particular

Para verificar a conectividade privada com os clusters do Atlas, faça o seguinte:

  1. No console de gerenciamento do Atlas, abra a página Implantações de banco de dados.
  2. Role a tela até o cluster necessário e clique em Conectar. Isso abre a caixa de diálogo Conectar a <CLUSTER_NAME>.
  3. Clique em Endpoint particular para o tipo de conexão.
  4. Selecione o prefixo de endpoint particular que você inseriu na interface do Atlas no menu suspenso Escolher um endpoint particular.
  5. Clique em Escolher um método de conexão.
  6. Clique em Drivers na seção Conectar ao seu aplicativo. Esta etapa é para conseguir a string de conexão srv.
  7. Copie a string de conexão srv da seção Adicionar a string de conexão ao código do aplicativo.

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

  8. Crie uma conexão do MongoDB usando esta string srv como o nome do host. Para mais informações, consulte Configurar um conector do MongoDB.

    A conexão será criada.