

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Solução de problemas de conexão
<a name="troubleshooting.connecting"></a>

Está tendo problemas para se conectar? Aqui estão alguns cenários comuns e como resolvê-los.

**Tópicos**
+ [Não é possível conectar-se a um endpoint do Amazon DocumentDB](#troubleshooting-connecting)
+ [Testar uma conexão com uma instância do Amazon DocumentDB](#troubleshooting.testing-connection)
+ [Conectar a um endpoint inválido](#troubleshooting.invalid-endpoint)
+ [A configuração do driver afeta o número de conexões](#troubleshooting.driver.config)

## Não é possível conectar-se a um endpoint do Amazon DocumentDB
<a name="troubleshooting-connecting"></a>

Quando você tentar se conectar ao Amazon DocumentDB, a mensagem de erro a seguir é uma das mais comuns que você pode receber.

```
connecting to: mongodb://docdb-2018-11-08-21-47-27.cluster-ccuszbx3pn5e.us-east-
1.docdb.amazonaws.com:27017/
2018-11-14T14:33:46.451-0800 W NETWORK [thread1] Failed to connect to
172.31.91.193:27017 after 5000ms milliseconds, giving up.
2018-11-14T14:33:46.452-0800 E QUERY [thread1] Error: couldn't connect to server
docdb-2018-11-08-21-47-27.cluster-ccuszbx3pn5e.us-east-1.docdb.amazonaws.com:27017,
connection attempt failed :
connect@src/mongo/shell/mongo.js:237:13
@(connect):1:6
exception: connect failed
```

O que essa mensagem de erro normalmente significa é que seu cliente (o shell do mongo, nesse exemplo) não pode acessar o endpoint do Amazon DocumentDB. Este pode ser o caso por vários motivos:

**Topics**
+ [Conectar de endpoints públicos](#troubleshooting.cannot-connect.public-endpoints)
+ [Conexões inter-regionais](#troubleshooting.cannot-connect.different-regions)
+ [Conectando-se de diferentes Amazon VPCs](#troubleshooting.cannot-connect.different-vpcs)
+ [O grupo de segurança bloqueia as conexões de entrada.](#troubleshooting.cannot-connect.inbound-not-allowed)
+ [Problema de preferência de leitura do driver Java Mongo](#troubleshooting-cannot-connect-java-mongo-issue)

### Conectar de endpoints públicos
<a name="troubleshooting.cannot-connect.public-endpoints"></a>

**Você está tentando se conectar a um cluster do Amazon DocumentDB diretamente do seu laptop ou máquina de desenvolvimento local.**

Tentar se conectar a um cluster do Amazon DocumentDB diretamente de um endpoint público, como seu laptop ou máquina de desenvolvimento local, falhará. O Amazon DocumentDB é apenas uma nuvem privada virtual (VPC) e não oferece suporte a endpoints públicos no momento. Assim, você não poderá se conectar diretamente ao seu cluster do Amazon DocumentDB do seu laptop nem do ambiente de desenvolvimento local fora da sua VPC.

Para se conectar a um cluster do Amazon DocumentDB de fora de uma Amazon VPC, você pode usar o túnel SSH. Para obter mais informações, consulte [Conectar-se a um cluster do Amazon DocumentDB de fora de uma Amazon VPC](connect-from-outside-a-vpc.md). Além disso, se o ambiente de desenvolvimento estiver em outra Amazon VPC, você também poderá usar o VPC Peering e conectar-se ao seu cluster do Amazon DocumentDB de outra na mesma região ou em uma região diferente.

### Conexões inter-regionais
<a name="troubleshooting.cannot-connect.different-regions"></a>

**Você está tentando se conectar a um cluster do Amazon DocumentDB em outra região.**

Se você tentar se conectar a um cluster do Amazon DocumentDB a partir de uma instância do Amazon EC2 em uma região diferente daquela do cluster — por exemplo, tentando se conectar a um cluster na região Leste dos EUA (Norte da Virgínia) (us-east-1) a partir da região Oeste dos EUA (Oregon) (us-west-2) - a conexão fracassará.

Para verificar a região do seu cluster do Amazon DocumentDB, execute o comando a seguir. A região está no endpoint.

```
aws docdb describe-db-clusters \
   --db-cluster-identifier sample-cluster \
   --query 'DBClusters[*].Endpoint'
```

A saída dessa operação é semelhante à seguinte. 

```
[
    "sample-cluster.node.us-east-1.docdb.amazonaws.com"
]
```

Para verificar a região da sua instância do EC2, execute o comando a seguir.

```
 aws ec2 describe-instances \
     --query 'Reservations[*].Instances[*].Placement.AvailabilityZone'
```

A saída dessa operação é semelhante à seguinte. 

```
[
    [
        "us-east-1a"
    ]
]
```

### Conectando-se de diferentes Amazon VPCs
<a name="troubleshooting.cannot-connect.different-vpcs"></a>

**Você está tentando se conectar a um cluster do Amazon DocumentDB a partir de uma VPC diferente da Amazon VPC na qual seu cluster está implantado.**

Se o cluster do Amazon DocumentDB e a instância do Amazon EC2 estiverem no Região da AWS mesmo, mas não no mesmo Amazon VPC, você não poderá se conectar diretamente ao seu cluster do Amazon DocumentDB, a menos que o emparelhamento de VPC esteja ativado entre os dois Amazon. VPCs

Para verificar a Amazon VPC de sua instância do Amazon DocumentDB, execute o comando a seguir.

```
aws docdb describe-db-instances \
   --db-instance-identifier sample-instance \
   --query 'DBInstances[*].DBSubnetGroup.VpcId'
```

Para verificar a Amazon VPC da sua instância do Amazon EC2, execute o comando a seguir.

```
aws ec2 describe-instances \
   --query 'Reservations[*].Instances[*].VpcId'
```

### O grupo de segurança bloqueia as conexões de entrada.
<a name="troubleshooting.cannot-connect.inbound-not-allowed"></a>

**Você está tentando se conectar a um cluster do Amazon DocumentDB e o grupo de segurança do cluster não permite conexões de entrada na porta do cluster (porta padrão: 27017).** 

Suponha que o cluster do Amazon DocumentDB e a instância do Amazon EC2 estejam na mesma região e Amazon VPC e usem o mesmo grupo de segurança da Amazon VPC. Se você não conseguir se conectar ao cluster do Amazon DocumentDB, a causa provável é que o grupo de segurança (ou seja, firewall) do cluster não permite conexões de entrada na porta escolhida para o cluster do Amazon DocumentDB (a porta padrão é 27017 ).

Para verificar a porta do seu cluster do Amazon DocumentDB, execute o comando a seguir.

```
aws docdb describe-db-clusters \
   --db-cluster-identifier sample-cluster \
   --query 'DBClusters[*].[DBClusterIdentifier,Port]'
```

Para obter o seu grupo de segurança do Amazon DocumentDB para o seu cluster, execute o seguinte comando.

```
aws docdb describe-db-clusters \
   --db-cluster-identifier sample-cluster \
   --query 'DBClusters[*].[VpcSecurityGroups[*],VpcSecurityGroupId]'
```

Para verificar as regras de entrada do seu grupo de segurança, consulte os seguintes tópicos na documentação do Amazon EC2:
+ [Autorizar tráfego de entrada para as instâncias do Linux](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/authorizing-access-to-an-instance.html)
+ [Autorizar tráfego de entrada para as instâncias do Windows](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/authorizing-access-to-an-instance.html)

### Problema de preferência de leitura do driver Java Mongo
<a name="troubleshooting-cannot-connect-java-mongo-issue"></a>

**As preferências de leitura do cliente não são respeitadas e alguns clientes não podem gravar no Amazon DocumentDB após o failover, a menos que sejam reinicializados.**

Esse problema, descoberto pela primeira vez no Java Mongo Driver 3.7.x, ocorre quando um cliente estabelece uma conexão com o Amazon DocumentDB usando `MongoClientSettings` e, especificamente, ao encadear o método. `applyToClusterSettings` As configurações do MongoClient cluster podem ser definidas usando alguns métodos diferentes`hosts()`, como`requiredReplicaSetName()`, `mode()` e.

 Quando o cliente especifica apenas um host no método `hosts()`, o modo é definido como em `ClusterConnectionMode.SINGLE` vez de `ClusterConnectionMode.MULTIPLE` Isso faz com que o cliente desconsidere a preferência de leitura e se conecte apenas ao servidor configurado em `hosts()`. Portanto, mesmo que as configurações do cliente sejam inicializadas como abaixo, todas as leituras ainda irão para a primária em vez da secundária.

```
final ServerAddress serverAddress0 = new ServerAddress("cluster-endpoint", 27317));
    final MongoCredential credential = MongoCredential.createCredential("xxx",
            "admin", "xxxx".toCharArray());
    final MongoClientSettings settings = MongoClientSettings.builder()
            .credential(credential)
            .readPreference(ReadPreference.secondaryPreferred())
            .retryWrites(false)
            .applyToSslSettings(builder -> builder
                    .enabled(false))
            .applyToClusterSettings(builder -> builder.hosts(
                            Arrays.asList(serverAddress0
                            ))
                    .requiredReplicaSetName("rs0"))
            .build();
    MongoClient mongoClient = MongoClients.create(settings);
```

**Caso de failover**

Usando as configurações de conexão do cliente acima, se houver um failover e uma atualização atrasada do registro DNS para o endpoint do gravador do cluster, o cliente ainda tentará emitir gravações no gravador antigo (agora leitor após o failover). Isso resulta em um erro do lado do servidor (não principal) que não é tratado adequadamente pelo driver Java (isso ainda está sob investigação). Assim, o cliente pode ficar em mau estado até que o servidor da aplicação seja reinicializado, por exemplo.

Há duas soluções alternativas para isso:
+ Clientes que se conectam ao Amazon DocumentDB por meio de uma cadeia de conexão não terão esse problema, pois `ClusterConnectionMode` serão configurados como `MULTIPLE` ao definir a preferência de leitura.

  ```
  MongoClientURI mongoClientURI = new MongoClientURI("mongodb://usr:pass:cluster-endpoint:27317/test?ssl=false&replicaSet=rs0&readpreference=secondaryPreferred");
  MongoClient mongoClient = MongoClients.create(mongoClientURI.getURI());
  ```

  Ou usando o construtor `MongoClientSettings` com o método`applyConnectionString`.

  ```
  final MongoClientSettings settings = MongoClientSettings.builder()
          .credential(credential)
          .applyConnectionString(new ConnectionString("usr:pass:cluster-endpoint:27317/test?ssl=false&replicaSet=rs0&readpreference=secondaryPreferred"))
          .retryWrites(false)
          .applyToSslSettings(builder → builder
                  .enabled(false))
          .build();
  MongoClient mongoClient = MongoClients.create(settings);
  ```
+ Definido explicitamente de `ClusterConnectionMode` para `MULTIPLE`. Isso só é necessário ao usar `applyToClusterSettings` e `hosts().size() == 1`.

  ```
  final ServerAddress serverAddress0 = new ServerAddress("cluster-endpoint", 27317));
  final MongoCredential credential = MongoCredential.createCredential("xxx","admin", "xxxx".toCharArray());
  final MongoClientSettings settings = MongoClientSettings.builder()
      .credential(credential)
      .readPreference(ReadPreference.secondaryPreferred())
      .retryWrites(false)
      .applyToSslSettings(builder → builder
      .enabled(false))
      .applyToClusterSettings(builder → builder
                  .hosts(Arrays.asList(serverAddress0))
                  .requiredReplicaSetName("rs0"))
                  .mode(ClusterConnectionMode.MULTIPLE))
      .build();
  MongoClient mongoClient = MongoClients.create(settings);
  ```

## Testar uma conexão com uma instância do Amazon DocumentDB
<a name="troubleshooting.testing-connection"></a>

É possível testar sua conexão com um cluster usando ferramentas comuns do Linux ou Windows.

 Em um terminal Linux ou Unix, teste a conexão inserindo o seguinte (substitua `cluster-endpoint` pelo endpoint e `port` pela porta da sua instância):

```
nc -zv cluster-endpoint port 
```

Veja a seguir um exemplo de operação e o valor de retorno: 

```
nc -zv docdbTest.d4c7nm7stsfc0.us-west-2.docdb.amazonaws.com 27017
   
Connection to docdbTest.d4c7nm7stsfc0.us-west-2.docdb.amazonaws.com 27017 port [tcp/*] succeeded!
```

## Conectar a um endpoint inválido
<a name="troubleshooting.invalid-endpoint"></a>

Ao conectar-se a um cluster do Amazon DocumentDB e usar um endpoint de cluster inválido, um erro semelhante ao seguinte será exibido.

```
mongo --ssl \
   --host sample-cluster.node.us-east-1.docdb.amazonaws.com:27017 \
   --sslCAFile global-bundle.pem \
   --username <user-name> \
   --password <password>
```

O resultado se parece com:

```
MongoDB shell version v3.6
connecting to: mongodb://sample-cluster.node.us-east-1.docdb.amazonaws.com:27017/
2018-11-14T17:21:18.516-0800 I NETWORK [thread1] getaddrinfo("sample-cluster.node.us-east-1.docdb.amazonaws.com") failed: 
nodename nor servname provided, or not known 2018-11-14T17:21:18.537-0800 E QUERY [thread1] Error: couldn't initialize
connection to host sample-cluster.node.us-east-1.docdb.amazonaws.com, address is invalid :
connect@src/mongo/shell/mongo.js:237:13@(connect):1:6
exception: connect failed
```

Para obter o endpoint válido para um cluster, execute o seguinte comando: 

```
aws docdb describe-db-clusters \
   --db-cluster-identifier sample-cluster \
   --query 'DBClusters[*].[Endpoint,Port]'
```

Para obter o endpoint válido para uma instância, execute o seguinte comando:

```
aws docdb describe-db-instances \
   --db-instance-identifier sample-instance \
   --query 'DBInstances[*].[Endpoint.Address,Endpoint.Port]'
```

Para obter mais informações, consulte [Noções básicas sobre endpoints do Amazon DocumentDB](endpoints.md). 

## A configuração do driver afeta o número de conexões
<a name="troubleshooting.driver.config"></a>

Ao usar o driver do cliente para se conectar a um cluster do Amazon DocumentDB, é importante considerar o parâmetro de configuração `maxPoolSize`. A configuração `maxPoolSize` determina o número máximo de conexões que o driver do cliente manterá em seu pool de conexões.