Exemplo: conectividade particular para um cluster do Atlas

Nesta página, explicamos como ativar a conectividade do 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:

  1. Faça login no console de gerenciamento do Atlas.
  2. Abra o projeto 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.

    A caixa de diálogo para escolher um provedor de nuvem será aberta.

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

    Esta é a região do Google Cloud o cluster do Atlas, que precisa ser a mesma região do no projeto do Google Cloud em que as conexões são criadas. Para o lista de todas as regiões compatíveis com o Integration Connector em Locais.

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

    Esse texto é prefixado em 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 a seguir como setup_psc.sh no 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 que contém a lista de endereços IP e Nomes de endpoint do PSC. 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 o 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 for bem-sucedido, o endpoint ficará no estado Available.

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

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

Para conseguir o ID do projeto do diretório de serviços, você pode usar a API List Connections como 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 vai mostrar uma resposta 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 amostra de saída, para o projeto connectors-test do Google Cloud, o ID do projeto do diretório de serviços é abcdefghijk-tp.

Verificar a conectividade particular

Para verificar a conectividade particular com os clusters do Atlas:

  1. No console de gerenciamento do Atlas, abra a página Implantações do banco de dados.
  2. Role até o cluster necessário e clique em Conectar. Isso abre Caixa de diálogo Conectar a <CLUSTER_NAME>.
  3. Clique em Endpoint particular para o tipo de conexão.
  4. Selecione o prefixo do endpoint particular que você inseriu na interface do Atlas na lista suspensa Escolher um endpoint particular.
  5. Clique em Escolher um método de conexão.
  6. Clique em Drivers na seção Connect to your application. Esta etapa consiste em extrair o srv string de conexão.
  7. Copie a string de conexão srv da seção Adicione 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 com o MongoDB usando esta string srv como o nome do host. Para mais informações, consulte Configure um conector do MongoDB.

    A conexão foi criada.