Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Connessione programmatica ad Amazon DocumentDB
Questa sezione contiene esempi di codice che dimostrano come connettersi ad Amazon DocumentDB (con compatibilità MongoDB) utilizzando diversi linguaggi. Gli esempi sono suddivisi in due sezioni diverse, a seconda che sul cluster con cui ti connetti sia abilitato o meno il protocollo Transport Layer Security (TLS). Per impostazione predefinita, TLS è abilitato sui cluster Amazon DocumentDB. è comunque possibile disattivarlo, se necessario. Per ulteriori informazioni, consulta Crittografia dei dati in transito.
Se stai tentando di connetterti ad Amazon DocumentDB dall'esterno del VPC in cui risiede il cluster, consulta. Connessione a un cluster Amazon DocumentDB dall'esterno di Amazon VPC
Prima di connetterti al cluster, devi sapere se sul cluster è abilitato il protocollo TLS. La sezione successiva illustra come determinare il valore del parametro tls del cluster tramite la Console di gestione AWS o l' AWS CLI. Seguendo tale procedura potrai trovare e applicare il codice di esempio appropriato.
Determinazione del valore del parametro tls
Determinare se il TLS nel cluster è abilitato è un processo in due fasi che puoi eseguire utilizzando o. Console di gestione AWS AWS CLI
-
Determinare il gruppo di parametri che regola il cluster.
- Using the Console di gestione AWS
-
-
Accedi a e apri Console di gestione AWS la console Amazon DocumentDB all'indirizzo. https://console.aws.amazon.com/docdb
-
Nel pannello di navigazione a sinistra, seleziona Cluster.
-
Nell'elenco dei cluster selezionare il nome del cluster.
-
La pagina risultante mostra i dettagli del cluster selezionato. Selezionare la scheda Configurazione. Nella sezione Configurazioni e stato, individua il nome del gruppo di parametri sotto il gruppo di parametri Cluster.
- Using the AWS CLI
-
Il AWS CLI codice seguente determina il parametro che governa il cluster. Assicurarsi di sostituire sample-cluster con il nome del cluster.
aws docdb describe-db-clusters \
--db-cluster-identifier sample-cluster \
--query 'DBClusters[*].[DBClusterIdentifier,DBClusterParameterGroup]'
L'aspetto dell'output di questa operazione è simile al seguente.
[
[
"sample-cluster",
"sample-parameter-group"
]
]
-
Determinare il valore del parametro tls nel gruppo di parametri del cluster.
- Using the Console di gestione AWS
-
-
Nel riquadro di navigazione scegliere Parameter groups (Gruppi di parametri).
-
Nella finestra Gruppi di parametri del cluster, seleziona il nome del gruppo di parametri del cluster dal passaggio 1d.
-
La pagina risultante mostra i parametri del gruppo di parametri del cluster. Puoi vedere il valore del parametro tls qui. Per informazioni sulla modifica di questo parametro, consulta Modifica dei gruppi di parametri del cluster Amazon DocumentDB.
- Using the AWS CLI
-
È possibile utilizzare il describe-db-cluster-parameters AWS CLI comando per visualizzare i dettagli dei parametri nel gruppo di parametri del cluster.
Negli esempi seguenti, sostituisci ciascuno user input placeholder con le informazioni del tuo cluster.
aws docdb describe-db-cluster-parameters \
--db-cluster-parameter-group-name sample-parameter-group
L'aspetto dell'output di questa operazione è simile al seguente.
{
"Parameters": [
{
"ParameterName": "profiler_threshold_ms",
"ParameterValue": "100",
"Description": "Operations longer than profiler_threshold_ms will be logged",
"Source": "system",
"ApplyType": "dynamic",
"DataType": "integer",
"AllowedValues": "50-2147483646",
"IsModifiable": true,
"ApplyMethod": "pending-reboot"
},
{
"ParameterName": "tls",
"ParameterValue": "disabled",
"Description": "Config to enable/disable TLS",
"Source": "user",
"ApplyType": "static",
"DataType": "string",
"AllowedValues": "disabled,enabled,fips-140-3",
"IsModifiable": true,
"ApplyMethod": "pending-reboot"
}
]
}
Amazon DocumentDB supporta endpoint FIPS 140-3 a partire dai cluster Amazon DocumentDB 5.0 (versione del motore 3.0.3727) nelle seguenti regioni: ca-central-1, us-west-2, us-east-1, us-east-2, us-gov-east-1, us-gov-west-1.
Dopo aver determinato il valore del parametro tls, continuare con la connessione al cluster utilizzando uno degli esempi di codice nelle seguenti sezioni.
Connessione con TLS abilitato
Per visualizzare un esempio di codice per la connessione programmatica a un cluster TLS-enabled Amazon DocumentDB, scegli la scheda appropriata per la lingua che desideri utilizzare.
Per crittografare i dati in transito, scarica la chiave pubblica per Amazon DocumentDB denominata global-bundle.pem utilizzando la seguente operazione.
wget https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem
Se l'applicazione è su Microsoft Windows e richiede un file PKCS7, puoi scaricare il bundle di certificati PKCS7. Questo pacchetto contiene sia i certificati intermedi che quelli principali all'indirizzo. https://truststore.pki.rds.amazonaws.com/global/global-bundle.p7b
- Python
-
Il codice seguente dimostra come connettersi ad Amazon DocumentDB utilizzando Python quando TLS è abilitato.
Nel seguente esempio, sostituisci ciascuno user input placeholder con le informazioni del tuo cluster.
import pymongo
import sys
##Create a MongoDB client, open a connection to Amazon DocumentDB as a replica set and specify the read preference as secondary preferred
client = pymongo.MongoClient('mongodb://sample-user:password@sample-cluster.node.us-east-1.docdb.amazonaws.com:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
##Specify the database to be used
db = client.sample_database
##Specify the collection to be used
col = db.sample_collection
##Insert a single document
col.insert_one({'hello':'Amazon DocumentDB'})
##Find the document that was previously written
x = col.find_one({'hello':'Amazon DocumentDB'})
##Print the result to the screen
print(x)
##Close the connection
client.close()
- Node.js
-
Il codice seguente dimostra come connettersi ad Amazon DocumentDB utilizzando Node.js quando TLS è abilitato.
Esiste una limitazione nota con Node.js i driver precedenti alla versione 6.13.1, che attualmente non sono supportati dall'autenticazione dell'identità IAM per Amazon DocumentDB. Node.js i driver e gli strumenti che utilizzano Node.js driver (ad esempio, mongosh) devono essere aggiornati per utilizzare la versione 6.13.1 o successiva. Node.js
Nell'esempio seguente, sostituisci ciascuno user input placeholder con le informazioni del tuo cluster.
var MongoClient = require('mongodb').MongoClient
//Create a MongoDB client, open a connection to DocDB; as a replica set,
// and specify the read preference as secondary preferred
var client = MongoClient.connect(
'mongodb://sample-user:password@sample-cluster.node.us-east-1.docdb.amazonaws.com:27017/sample-database?tls=true&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false',
{
tlsCAFile: `global-bundle.pem` //Specify the DocDB; cert
},
function(err, client) {
if(err)
throw err;
//Specify the database to be used
db = client.db('sample-database');
//Specify the collection to be used
col = db.collection('sample-collection');
//Insert a single document
col.insertOne({'hello':'Amazon DocumentDB'}, function(err, result){
//Find the document that was previously written
col.findOne({'hello':'Amazon DocumentDB'}, function(err, result){
//Print the result to the screen
console.log(result);
//Close the connection
client.close()
});
});
});
- PHP
-
Il codice seguente dimostra come connettersi ad Amazon DocumentDB utilizzando PHP quando TLS è abilitato.
Nel seguente esempio, sostituisci ciascuno user input placeholder con le informazioni del tuo cluster.
<?php
//Include Composer's autoloader
require 'vendor/autoload.php';
$TLS_DIR = "/home/ubuntu/global-bundle.pem";
//Create a MongoDB client and open connection to Amazon DocumentDB
$client = new MongoDB\Client("mongodb://sample-user:password@sample-cluster.node.us-east-1.docdb.amazonaws.com:27017/?retryWrites=false", ["tls" => "true", "tlsCAFile" => $TLS_DIR ]);
//Specify the database and collection to be used
$col = $client->sampledatabase->samplecollection;
//Insert a single document
$result = $col->insertOne( [ 'hello' => 'Amazon DocumentDB'] );
//Find the document that was previously written
$result = $col->findOne(array('hello' => 'Amazon DocumentDB'));
//Print the result to the screen
print_r($result);
?>
- Go
-
Il codice seguente dimostra come connettersi ad Amazon DocumentDB utilizzando Go quando TLS è abilitato.
A partire dalla versione 1.2.1, il driver MongoDB Go utilizzerà solo il primo certificato del server CA trovato in sslcertificateauthorityfile. Il codice di esempio riportato di seguito risolve questa limitazione aggiungendo manualmente tutti i certificati server trovati in sslcertificateauthorityfile su una configurazione TLS personalizzata utilizzata durante la creazione del client.
Nei seguenti esempi, sostituisci ciascuno user input placeholder con le informazioni del tuo cluster.
package main
import (
"context"
"fmt"
"log"
"time"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
"io/ioutil"
"crypto/tls"
"crypto/x509"
"errors"
)
const (
// Path to the AWS CA file
caFilePath = "global-bundle.pem"
// Timeout operations after N seconds
connectTimeout = 5
queryTimeout = 30
username = "sample-user"
password = "password"
clusterEndpoint = "sample-cluster.node.us-east-1.docdb.amazonaws.com:27017"
// Which instances to read from
readPreference = "secondaryPreferred"
connectionStringTemplate = "mongodb://%s:%s@%s/sample-database?tls=true&replicaSet=rs0&readpreference=%s"
)
func main() {
connectionURI := fmt.Sprintf(connectionStringTemplate, username, password, clusterEndpoint, readPreference)
tlsConfig, err := getCustomTLSConfig(caFilePath)
if err != nil {
log.Fatalf("Failed getting TLS configuration: %v", err)
}
client, err := mongo.NewClient(options.Client().ApplyURI(connectionURI).SetTLSConfig(tlsConfig))
if err != nil {
log.Fatalf("Failed to create client: %v", err)
}
ctx, cancel := context.WithTimeout(context.Background(), connectTimeout*time.Second)
defer cancel()
err = client.Connect(ctx)
if err != nil {
log.Fatalf("Failed to connect to cluster: %v", err)
}
// Force a connection to verify our connection string
err = client.Ping(ctx, nil)
if err != nil {
log.Fatalf("Failed to ping cluster: %v", err)
}
fmt.Println("Connected to DocumentDB!")
collection := client.Database("sample-database").Collection("sample-collection")
ctx, cancel = context.WithTimeout(context.Background(), queryTimeout*time.Second)
defer cancel()
res, err := collection.InsertOne(ctx, bson.M{"name": "pi", "value": 3.14159})
if err != nil {
log.Fatalf("Failed to insert document: %v", err)
}
id := res.InsertedID
log.Printf("Inserted document ID: %s", id)
ctx, cancel = context.WithTimeout(context.Background(), queryTimeout*time.Second)
defer cancel()
cur, err := collection.Find(ctx, bson.D{})
if err != nil {
log.Fatalf("Failed to run find query: %v", err)
}
defer cur.Close(ctx)
for cur.Next(ctx) {
var result bson.M
err := cur.Decode(&result)
log.Printf("Returned: %v", result)
if err != nil {
log.Fatal(err)
}
}
if err := cur.Err(); err != nil {
log.Fatal(err)
}
}
func getCustomTLSConfig(caFile string) (*tls.Config, error) {
tlsConfig := new(tls.Config)
certs, err := ioutil.ReadFile(caFile)
if err != nil {
return tlsConfig, err
}
tlsConfig.RootCAs = x509.NewCertPool()
ok := tlsConfig.RootCAs.AppendCertsFromPEM(certs)
if !ok {
return tlsConfig, errors.New("Failed parsing pem file")
}
return tlsConfig, nil
- Java
-
Quando ci si connette a un cluster TLS-enabled Amazon DocumentDB da un'applicazione Java, il programma deve utilizzare il file AWS di autorità di certificazione (CA) fornito per convalidare la connessione. Per utilizzare il certificato Amazon RDS CA, procedi come segue:
-
Scarica il file Amazon RDS CA da. https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem
-
Creare uno store attendibile con il certificato CA contenuto nel file eseguendo i comandi indicati di seguito. Assicurati di cambiarlo con truststore-password qualcos'altro. Se si accede a uno store attendibile che contiene sia il vecchio certificato CA (rds-ca-2015-root.pem) sia il nuovo certificato CA (rds-ca-2019-root.pem), è possibile importare il pacchetto di certificati nell'archivio attendibilità.
Il seguente script è uno script di esempio shell che importa il bundle di certificati in un archivio di trust su un sistema operativo Linux. Negli esempi seguenti, sostituisci ciascuno user input placeholder con le tue informazioni. In particolare, ovunque la directory di esempio "mydir" si trovi nello script, sostituiscila con una directory creata per questa attività.
mydir=/tmp/certs
truststore=${mydir}/rds-truststore.jks
storepassword=truststore-password
curl -sS "https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem" > ${mydir}/global-bundle.pem
awk 'split_after == 1 {n++;split_after=0} /-----END CERTIFICATE-----/ {split_after=1}{print > "rds-ca-" n ".pem"}' < ${mydir}/global-bundle.pem
for CERT in rds-ca-*; do
alias=$(openssl x509 -noout -text -in $CERT | perl -ne 'next unless /Subject:/; s/.*(CN=|CN = )//; print')
echo "Importing $alias"
keytool -import -file ${CERT} -alias "${alias}" -storepass ${storepassword} -keystore ${truststore} -noprompt
rm $CERT
done
rm ${mydir}/global-bundle.pem
echo "Trust store content is: "
keytool -list -v -keystore "$truststore" -storepass ${storepassword} | grep Alias | cut -d " " -f3- | while read alias
do
expiry=`keytool -list -v -keystore "$truststore" -storepass ${storepassword} -alias "${alias}" | grep Valid | perl -ne 'if(/until: (.*?)\n/) { print "$1\n"; }'`
echo " Certificate ${alias} expires in '$expiry'"
done
Il seguente script è uno script di shell di esempio che importa il bundle di certificati in un archivio di trust su un sistema operativo Linux.
mydir=/tmp/certs
truststore=${mydir}/rds-truststore.jks
storepassword=truststore-password
curl -sS "https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem" > ${mydir}/global-bundle.pem
split -p "-----BEGIN CERTIFICATE-----" ${mydir}/global-bundle.pem rds-ca-
for CERT in rds-ca-*; do
alias=$(openssl x509 -noout -text -in $CERT | perl -ne 'next unless /Subject:/; s/.*(CN=|CN = )//; print')
echo "Importing $alias"
keytool -import -file ${CERT} -alias "${alias}" -storepass ${storepassword} -keystore ${truststore} -noprompt
rm $CERT
done
rm ${mydir}/global-bundle.pem
echo "Trust store content is: "
keytool -list -v -keystore "$truststore" -storepass ${storepassword} | grep Alias | cut -d " " -f3- | while read alias
do
expiry=`keytool -list -v -keystore "$truststore" -storepass ${storepassword} -alias "${alias}" | grep Valid | perl -ne 'if(/until: (.*?)\n/) { print "$1\n"; }'`
echo " Certificate ${alias} expires in '$expiry'"
done
-
Utilizzalo keystore nel tuo programma impostando le seguenti proprietà di sistema nell'applicazione prima di effettuare una connessione al cluster Amazon DocumentDB.
javax.net.ssl.trustStore: truststore
javax.net.ssl.trustStorePassword: truststore-password;
-
Il codice seguente dimostra come connettersi ad Amazon DocumentDB utilizzando Java quando TLS è abilitato.
Nel seguente esempio, sostituisci ciascuno user input placeholder con le informazioni del tuo cluster.
package com.example.documentdb;
import com.mongodb.client.*;
import org.bson.Document;
public final class Test {
private Test() {
}
public static void main(String[] args) {
String template = "mongodb://%s:%s@%s/sample-database?ssl=true&replicaSet=rs0&readpreference=%s";
String username = "sample-user";
String password = "password";
String clusterEndpoint = "sample-cluster.node.us-east-1.docdb.amazonaws.com:27017";
String readPreference = "secondaryPreferred";
String connectionString = String.format(template, username, password, clusterEndpoint, readPreference);
String truststore = "truststore";
String truststorePassword = "truststore-password";
System.setProperty("javax.net.ssl.trustStore", truststore);
System.setProperty("javax.net.ssl.trustStorePassword", truststorePassword);
MongoClient mongoClient = MongoClients.create(connectionString);
MongoDatabase testDB = mongoClient.getDatabase("sample-database");
MongoCollection<Document> numbersCollection = testDB.getCollection("sample-collection");
Document doc = new Document("name", "pi").append("value", 3.14159);
numbersCollection.insertOne(doc);
MongoCursor<Document> cursor = numbersCollection.find().iterator();
try {
while (cursor.hasNext()) {
System.out.println(cursor.next().toJson());
}
} finally {
cursor.close();
}
}
}
- C# / .NET
-
Il codice seguente dimostra come connettersi ad Amazon DocumentDB utilizzando C#/.NET quando TLS è abilitato.
Nel seguente esempio, sostituisci ciascuno user input placeholder con le informazioni del tuo cluster.
using System;
using System.Text;
using System.Linq;
using System.Collections.Generic;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.Net.Security;
using MongoDB.Driver;
using MongoDB.Bson;
namespace DocDB
{
class Program
{
static void Main(string[] args)
{
string template = "mongodb://{0}:{1}@{2}/sampledatabase?tls=true&replicaSet=rs0&readpreference={3}";
string username = "sample-user";
string password = "password";
string readPreference = "secondaryPreferred";
string clusterEndpoint="sample-cluster.node.us-east-1.docdb.amazonaws.com:27017";
string connectionString = String.Format(template, username, password, clusterEndpoint, readPreference);
string pathToCAFile = "<PATH/global-bundle.p7b_file>";
// ADD CA certificate to local trust store
// DO this once - Maybe when your service starts
X509Store localTrustStore = new X509Store(StoreName.Root);
X509Certificate2Collection certificateCollection = new X509Certificate2Collection();
certificateCollection.Import(pathToCAFile);
try
{
localTrustStore.Open(OpenFlags.ReadWrite);
localTrustStore.AddRange(certificateCollection);
}
catch (Exception ex)
{
Console.WriteLine("Root certificate import failed: " + ex.Message);
throw;
}
finally
{
localTrustStore.Close();
}
var settings = MongoClientSettings.FromUrl(new MongoUrl(connectionString));
var client = new MongoClient(settings);
var database = client.GetDatabase("sampledatabase");
var collection = database.GetCollection<BsonDocument>("samplecollection");
var docToInsert = new BsonDocument { { "pi", 3.14159 } };
collection.InsertOne(docToInsert);
}
}
}
- MongoDB Shell
-
Il codice seguente dimostra come connettersi e interrogare Amazon DocumentDB utilizzando la versione più recente, mongosh, o la versione precedente di mongo shell, quando TLS è abilitato.
Connettiti ad Amazon DocumentDB con mongosh
Esiste una limitazione nota con Node.js i driver precedenti alla versione 6.13.1, che attualmente non sono supportati dall'autenticazione dell'identità IAM per Amazon DocumentDB. Node.js i driver e gli strumenti che utilizzano Node.js driver (ad esempio, mongosh) devono essere aggiornati per utilizzare la versione 6.13.1 o successiva. Node.js
Negli esempi seguenti, sostituisci ciascuno user input placeholder con le informazioni del tuo cluster.
mongosh --tls --host cluster-end-point:27017 --tlsCAFile global-bundle.pem --username sample-user --password password --retryWrites false
Connettiti ad Amazon DocumentDB con la precedente versione di mongo shell
Se usi IAM, devi usare una versione precedente di mongo shell. Inserisci una delle seguenti opzioni di comando:
mongo --ssl --host cluster-end-point:27017 --sslCAFile global-bundle.pem --username sample-user --password password
Se stai usando una versione uguale o superiore alla 4.2, usa il codice seguente per connetterti. Le scritture riutilizzabili non sono supportate in Amazon DocumentDB. Se utilizzi la shell mongo legacy (non mongosh), non includere il comando in nessuna stringa di codice. retryWrites=false Per impostazione predefinita, le scritture riutilizzabili sono disabilitate. L'inclusione retryWrites=false potrebbe causare un errore nei normali comandi di lettura.
mongo --tls --host cluster-end-point:27017 --tlsCAFile global-bundle.pem --username sample-user --password password
Verificate la connessione
Inserire un singolo documento.
db.myTestCollection.insertOne({'hello':'Amazon DocumentDB'})
Trovare il documento precedentemente inserito.
db.myTestCollection.find({'hello':'Amazon DocumentDB'})
- R
-
Il codice seguente dimostra come connettersi ad Amazon DocumentDB con R utilizzando mongolite (https://jeroen.github.io/mongolite/) quando TLS è abilitato.
Nel seguente esempio, sostituisci ciascuno user input placeholder con le informazioni del tuo cluster.
#Include the mongolite library.
library(mongolite)
mongourl <- paste("mongodb://sample-user:password@sample-cluster.node.us-east-1.docdb.amazonaws.com:27017/test2?ssl=true&",
"readPreference=secondaryPreferred&replicaSet=rs0", sep="")
#Create a MongoDB client, open a connection to Amazon DocumentDB as a replica
# set and specify the read preference as secondary preferred
client <- mongo(url = mongourl, options = ssl_options(weak_cert_validation = F, ca ="<PATH/global-bundle.pem>"))
#Insert a single document
str <- c('{"hello" : "Amazon DocumentDB"}')
client$insert(str)
#Find the document that was previously written
client$find()
- Ruby
-
Il codice seguente dimostra come connettersi ad Amazon DocumentDB con Ruby quando TLS è abilitato.
Nel seguente esempio, sostituisci ciascuno user input placeholder con le informazioni del tuo cluster.
require 'mongo'
require 'neatjson'
require 'json'
client_host = 'mongodb://sample-cluster.node.us-east-1.docdb.amazonaws.com:27017'
client_options = {
database: 'test',
replica_set: 'rs0',
read: {:secondary_preferred => 1},
user: 'sample-user',
password: 'password',
ssl: true,
ssl_verify: true,
ssl_ca_cert: 'PATH/global-bundle.pem',
retry_writes: false
}
begin
##Create a MongoDB client, open a connection to Amazon DocumentDB as a
## replica set and specify the read preference as secondary preferred
client = Mongo::Client.new(client_host, client_options)
##Insert a single document
x = client[:test].insert_one({"hello":"Amazon DocumentDB"})
##Find the document that was previously written
result = client[:test].find()
#Print the document
result.each do |document|
puts JSON.neat_generate(document)
end
end
#Close the connection
client.close
Connessione con TLS disabilitato
Per visualizzare un esempio di codice per la connessione programmatica a un cluster TLS-disabled Amazon DocumentDB, scegli la scheda relativa alla lingua che desideri utilizzare.
- Python
-
Il codice seguente dimostra come connettersi ad Amazon DocumentDB utilizzando Python quando TLS è disabilitato.
Nel seguente esempio, sostituisci ciascuno user input placeholder con le informazioni del tuo cluster.
## Create a MongoDB client, open a connection to Amazon DocumentDB as a replica set and specify the read preference as secondary preferred
import pymongo
import sys
client = pymongo.MongoClient('mongodb://sample-user:password@sample-cluster.node.us-east-1.docdb.amazonaws.com:27017/?replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
##Specify the database to be used
db = client.sample_database
##Specify the collection to be used
col = db.sample_collection
##Insert a single document
col.insert_one({'hello':'Amazon DocumentDB'})
##Find the document that was previously written
x = col.find_one({'hello':'Amazon DocumentDB'})
##Print the result to the screen
print(x)
##Close the connection
client.close()
- Node.js
-
Il codice seguente dimostra come connettersi ad Amazon DocumentDB utilizzando Node.js quando TLS è disabilitato.
Esiste una limitazione nota con Node.js i driver precedenti alla versione 6.13.1, che attualmente non sono supportati dall'autenticazione dell'identità IAM per Amazon DocumentDB. Node.js i driver e gli strumenti che utilizzano Node.js driver (ad esempio, mongosh) devono essere aggiornati per utilizzare la versione 6.13.1 o successiva. Node.js
Nell'esempio seguente, sostituisci ciascuno user input placeholder con le informazioni del tuo cluster.
var MongoClient = require('mongodb').MongoClient;
//Create a MongoDB client, open a connection to Amazon DocumentDB as a replica set,
// and specify the read preference as secondary preferred
var client = MongoClient.connect(
'mongodb://sample-user:password@sample-cluster.node.us-east-1.docdb.amazonaws.com:27017/sample-database?replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false',
{
useNewUrlParser: true
},
function(err, client) {
if(err)
throw err;
//Specify the database to be used
db = client.db('sample-database');
//Specify the collection to be used
col = db.collection('sample-collection');
//Insert a single document
col.insertOne({'hello':'Amazon DocumentDB'}, function(err, result){
//Find the document that was previously written
col.findOne({'hello':'Amazon DocumentDB'}, function(err, result){
//Print the result to the screen
console.log(result);
//Close the connection
client.close()
});
});
});
- PHP
-
Il codice seguente dimostra come connettersi ad Amazon DocumentDB utilizzando PHP quando TLS è disabilitato.
Nel seguente esempio, sostituisci ciascuno user input placeholder con le informazioni del tuo cluster.
<?php
//Include Composer's autoloader
require 'vendor/autoload.php';
//Create a MongoDB client and open connection to Amazon DocumentDB
$client = new MongoDB\Client("mongodb://sample-user:password@sample-cluster.node.us-east-1.docdb.amazonaws.com:27017/?retryWrites=false");
//Specify the database and collection to be used
$col = $client->sampledatabase->samplecollection;
//Insert a single document
$result = $col->insertOne( [ 'hello' => 'Amazon DocumentDB'] );
//Find the document that was previously written
$result = $col->findOne(array('hello' => 'Amazon DocumentDB'));
//Print the result to the screen
print_r($result);
?>
- Go
-
Il codice seguente dimostra come connettersi ad Amazon DocumentDB utilizzando Go quando TLS è disabilitato.
Nel seguente esempio, sostituisci ciascuno user input placeholder con le informazioni del tuo cluster.
package main
import (
"context"
"fmt"
"log"
"time"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
const (
// Timeout operations after N seconds
connectTimeout = 5
queryTimeout = 30
username = "sample-user"
password = "password"
clusterEndpoint = "sample-cluster.node.us-east-1.docdb.amazonaws.com:27017"
// Which instances to read from
readPreference = "secondaryPreferred"
connectionStringTemplate = "mongodb://%s:%s@%s/sample-database?replicaSet=rs0&readpreference=%s"
)
func main() {
connectionURI := fmt.Sprintf(connectionStringTemplate, username, password, clusterEndpoint, readPreference)
client, err := mongo.NewClient(options.Client().ApplyURI(connectionURI))
if err != nil {
log.Fatalf("Failed to create client: %v", err)
}
ctx, cancel := context.WithTimeout(context.Background(), connectTimeout*time.Second)
defer cancel()
err = client.Connect(ctx)
if err != nil {
log.Fatalf("Failed to connect to cluster: %v", err)
}
// Force a connection to verify our connection string
err = client.Ping(ctx, nil)
if err != nil {
log.Fatalf("Failed to ping cluster: %v", err)
}
fmt.Println("Connected to DocumentDB!")
collection := client.Database("sample-database").Collection("sample-collection")
ctx, cancel = context.WithTimeout(context.Background(), queryTimeout*time.Second)
defer cancel()
res, err := collection.InsertOne(ctx, bson.M{"name": "pi", "value": 3.14159})
if err != nil {
log.Fatalf("Failed to insert document: %v", err)
}
id := res.InsertedID
log.Printf("Inserted document ID: %s", id)
ctx, cancel = context.WithTimeout(context.Background(), queryTimeout*time.Second)
defer cancel()
cur, err := collection.Find(ctx, bson.D{})
if err != nil {
log.Fatalf("Failed to run find query: %v", err)
}
defer cur.Close(ctx)
for cur.Next(ctx) {
var result bson.M
err := cur.Decode(&result)
log.Printf("Returned: %v", result)
if err != nil {
log.Fatal(err)
}
}
if err := cur.Err(); err != nil {
log.Fatal(err)
}
}
- Java
-
Il codice seguente dimostra come connettersi ad Amazon DocumentDB utilizzando Java quando TLS è disabilitato.
Nel seguente esempio, sostituisci ciascuno user input placeholder con le informazioni del tuo cluster.
package com.example.documentdb;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientURI;
import com.mongodb.ServerAddress;
import com.mongodb.MongoException;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoCollection;
import org.bson.Document;
public final class Main {
private Main() {
}
public static void main(String[] args) {
String template = "mongodb://%s:%s@%s/sample-database?replicaSet=rs0&readpreference=%s";
String username = "sample-user";
String password = "password";
String clusterEndpoint = "sample-cluster.node.us-east-1.docdb.amazonaws.com:27017";
String readPreference = "secondaryPreferred";
String connectionString = String.format(template, username, password, clusterEndpoint, readPreference);
MongoClientURI clientURI = new MongoClientURI(connectionString);
MongoClient mongoClient = new MongoClient(clientURI);
MongoDatabase testDB = mongoClient.getDatabase("sample-database");
MongoCollection<Document> numbersCollection = testDB.getCollection("sample-collection");
Document doc = new Document("name", "pi").append("value", 3.14159);
numbersCollection.insertOne(doc);
MongoCursor<Document> cursor = numbersCollection.find().iterator();
try {
while (cursor.hasNext()) {
System.out.println(cursor.next().toJson());
}
} finally {
cursor.close();
}
}
}
- C# / .NET
-
Il codice seguente dimostra come connettersi ad Amazon DocumentDB utilizzando C#/.NET quando TLS è disabilitato.
Nel seguente esempio, sostituisci ciascuno user input placeholder con le informazioni del tuo cluster.
using System;
using System.Text;
using System.Linq;
using System.Collections.Generic;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.Net.Security;
using MongoDB.Driver;
using MongoDB.Bson;
namespace CSharpSample
{
class Program
{
static void Main(string[] args)
{
string template = "mongodb://{0}:{1}@{2}/sampledatabase?replicaSet=rs0&readpreference={3}";
string username = "sample-user";
string password = "password";
string clusterEndpoint = "sample-cluster.node.us-east-1.docdb.amazonaws.com:27017";
string readPreference = "secondaryPreferred";
string connectionString = String.Format(template, username, password, clusterEndpoint, readPreference);
var settings = MongoClientSettings.FromUrl(new MongoUrl(connectionString));
var client = new MongoClient(settings);
var database = client.GetDatabase("sampledatabase");
var collection = database.GetCollection<BsonDocument>("samplecollection");
var docToInsert = new BsonDocument { { "pi", 3.14159 } };
collection.InsertOne(docToInsert);
}
}
}
- MongoDB Shell
-
Il codice seguente dimostra come connettersi e interrogare Amazon DocumentDB utilizzando la versione più recente, mongosh, o la versione precedente di mongo shell, quando TLS è disabilitato.
Connettiti ad Amazon DocumentDB con mongosh
Esiste una limitazione nota con Node.js i driver precedenti alla versione 6.13.1, che attualmente non sono supportati dall'autenticazione dell'identità IAM per Amazon DocumentDB. Node.js i driver e gli strumenti che utilizzano Node.js driver (ad esempio, mongosh) devono essere aggiornati per utilizzare la versione 6.13.1 o successiva. Node.js
Negli esempi seguenti, sostituisci ciascuno user input placeholder con le informazioni del tuo cluster.
mongosh --host cluster-end-point:27017 --username sample-user --password password --retryWrites false
Connettiti ad Amazon DocumentDB con la precedente versione di mongo shell
Se usi IAM, devi usare una versione precedente di mongo shell. Inserisci una delle seguenti opzioni di comando:
mongo --host cluster-end-point:27017 --username sample-user --password password
Se stai usando una versione uguale o superiore alla 4.2, usa il codice seguente per connetterti. Le scritture riutilizzabili non sono supportate in Amazon DocumentDB. Se utilizzi la shell mongo legacy (non mongosh), non includere il comando in nessuna stringa di codice. retryWrites=false Per impostazione predefinita, le scritture riutilizzabili sono disabilitate. L'inclusione retryWrites=false potrebbe causare un errore nei normali comandi di lettura.
mongo --host cluster-end-point:27017 --username sample-user --password password
Verificate la connessione
Inserire un singolo documento.
db.myTestCollection.insertOne({'hello':'Amazon DocumentDB'})
Trovare il documento precedentemente inserito.
db.myTestCollection.find({'hello':'Amazon DocumentDB'})
- R
-
Il codice seguente dimostra come connettersi ad Amazon DocumentDB con R utilizzando mongolite (https://jeroen.github.io/mongolite/) quando TLS è disabilitato.
Nel seguente esempio, sostituisci ciascuno user input placeholder con le informazioni del tuo cluster.
#Include the mongolite library.
library(mongolite)
#Create a MongoDB client, open a connection to Amazon DocumentDB as a replica
# set and specify the read preference as secondary preferred
client <- mongo(url = "mongodb://sample-user:password@sample-cluster.node.us-east-1.docdb.amazonaws.com:27017/sample-database?readPreference=secondaryPreferred&replicaSet=rs0")
##Insert a single document
str <- c('{"hello" : "Amazon DocumentDB"}')
client$insert(str)
##Find the document that was previously written
client$find()
- Ruby
-
Il codice seguente dimostra come connettersi ad Amazon DocumentDB con Ruby quando TLS è disabilitato.
Nel seguente esempio, sostituisci ciascuno user input placeholder con le informazioni del tuo cluster.
require 'mongo'
require 'neatjson'
require 'json'
client_host = 'mongodb://sample-cluster.node.us-east-1.docdb.amazonaws.com:27017'
client_options = {
database: 'test',
replica_set: 'rs0',
read: {:secondary_preferred => 1},
user: 'sample-user',
password: 'password',
retry_writes: false
}
begin
##Create a MongoDB client, open a connection to Amazon DocumentDB as a
## replica set and specify the read preference as secondary preferred
client = Mongo::Client.new(client_host, client_options)
##Insert a single document
x = client[:test].insert_one({"hello":"Amazon DocumentDB"})
##Find the document that was previously written
result = client[:test].find()
#Print the document
result.each do |document|
puts JSON.neat_generate(document)
end
end
#Close the connection
client.close
Compressione di rete in Amazon DocumentDB
Con la compressione tramite protocollo cablato, puoi ridurre i dati inviati dall'applicazione in rete. Amazon DocumentDB 8.0.1 e versioni successive supportano la compressione. Ottieni un throughput migliorato per i carichi di lavoro che trasferiscono documenti di grandi dimensioni o set di risultati di grandi dimensioni. Dopo aver abilitato la compressione, il driver e il server si scambiano messaggi compressi.
Quando si attiva la compressione di rete, si scambiano le risorse della CPU con una larghezza di banda di rete ridotta. Attiva la compressione quando il carico di lavoro è collegato alla rete e trasferisce payload di grandi dimensioni. Per richieste e risposte di piccole dimensioni, potresti non vedere un vantaggio netto, perché il sovraccarico di compressione può superare i risparmi.
Compressori supportati
Amazon DocumentDB supporta il snappy compressore. Amazon DocumentDB non supporta altri compressori offerti dai driver MongoDB, come e. zlib zstd
Se un driver richiede un elenco di compressori, Amazon DocumentDB negozia solo quelli supportati. Ad esempio, se un driver offre snappy ezstd, Amazon DocumentDB seleziona e ignora. snappy zstd Se un driver offre solo compressori non supportati, Amazon DocumentDB non comprime la connessione. In questo caso, il driver e il server si scambiano messaggi senza compressione.
Abilita la compressione
Per abilitare la compressione, aggiungi l'compressorsopzione alla stringa di connessione e impostala susnappy. Nella seguente stringa di connessione usernamepassword, sostituisci e docdb-cluster-endpoint con i tuoi valori:
mongodb://username:password@docdb-cluster-endpoint:27017/?tls=true&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false&compressors=snappy
Quando usi un driver MongoDB, imposta la stessa opzione tramite le opzioni di connessione del driver. La maggior parte dei driver richiede una dipendenza aggiuntiva sul lato client per eseguire una compressione rapida:
-
Il driver richiede il pacchetto. Node.js snappy
-
Il driver Python (PyMongo) richiede il python-snappy pacchetto. Su Linux, richiede python-snappy anche la libreria snappy di sistema (ad esempio, snappy-devel tramite dnf or). yum
Per il nome esatto dell'opzione e gli eventuali pacchetti richiesti, consultate la documentazione del driver.
Se manca la dipendenza dalla compressione sul lato client, il driver si connette correttamente. Tuttavia, scambia messaggi senza compressione e non restituisce un errore. Per confermare che la compressione è attiva, verificate il compressore negoziato come descritto in. Verifica la compressione
Il seguente esempio di codice Python si connette al cluster con la compressione snappy abilitata e utilizza un except blocco try and per gestire gli errori di connessione:
import pymongo
try:
client = pymongo.MongoClient(
'mongodb://username:password@docdb-cluster-endpoint:27017/'
'?tls=true&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false'
'&compressors=snappy',
tlsCAFile='global-bundle.pem')
db = client['sample-database']
col = db['sample-collection']
col.insert_one({'item': 'DocumentDB'})
print(col.find_one())
except Exception as error:
print(f'Connection failed: {error}')
Verifica la compressione
Per confermare che un driver e Amazon DocumentDB hanno negoziato la compressione, controlla il compression campo restituito dal comando hello MongoDB wire protocol. Quando il driver e Amazon DocumentDB negoziano la compressione, questo campo elenca i compressori concordati.