Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Points de terminaison publics Neptune
Présentation de
Les clusters Amazon Neptune sont généralement déployés au sein de votre VPC et ne sont accessibles que depuis ce VPC. Cela nécessite de configurer les applications et les environnements de développement au sein du VPC ou d'utiliser des services proxy pour se connecter au VPC, ce qui augmente le temps et les coûts de configuration.
Les terminaux publics simplifient cette expérience en permettant des connexions directes à Neptune via Internet, ce qui facilite la prise en main des bases de données graphiques sans connaissances spécialisées en matière de réseau.
Quand utiliser les points de terminaison publics
Envisagez d'utiliser des points de terminaison publics dans les scénarios suivants :
-
Vous souhaitez tester rapidement Neptune dans un environnement de développement ou de test sans configuration réseau complexe
-
Vous n'avez pas de connaissances spécialisées AWS en matière de réseaux
-
Le niveau de sécurité de votre application ne nécessite pas de VPC privé
-
Vous devez vous connecter à Neptune depuis votre environnement de développement local
Considérations sur la sécurité
Lorsque vous utilisez des terminaux publics, tenez compte des considérations de sécurité suivantes :
-
L'authentification IAM est requise pour les clusters sur lesquels les points de terminaison publics sont activés.
-
L'accès à la base de données est contrôlé par le groupe de sécurité qu'elle utilise.
-
Vous pouvez limiter les adresses IP autorisées à se connecter à votre cluster.
-
Vous pouvez utiliser les politiques IAM pour contrôler qui peut créer ou modifier des clusters accessibles au public. Voir : Restreindre la création d'un accès public
Activation des terminaux publics
Par défaut, les nouvelles bases de données Neptune sont créées avec les points de terminaison publics désactivés. Vous devez explicitement activer l'accès public lors de la création ou de la modification d'un cluster.
Les points de terminaison publics sont pris en charge à partir de la version 1.4.6.x du moteur Neptune. Vous devez mettre à niveau les clusters existants vers au moins cette version pour utiliser cette fonctionnalité.
Le paramètre de point de terminaison public est disponible sur l'instance Neptune et non sur le cluster Neptune. Par conséquent, un cluster Neptune peut exister avec certaines instances avec des points de terminaison publics et d'autres non. Cependant, nous ne recommandons pas d'utiliser un tel réglage. Pour plus d'informations à ce sujet, consultez : Comment fonctionnent les terminaux publics
Conditions préalables
Paramètre d'authentification IAM sur le cluster Neptune
Avant d'activer les points de terminaison publics sur une instance Neptune, assurez-vous que votre cluster prend en charge l'authentification IAM. Si ce n'est pas le cas, activez-le à l'aide de la commande suivante :
aws neptune modify-db-cluster \ --region us-west-2 \ --engine graphdb \ --engine-version 1.4.6.x \ --db-cluster-identifier neptune-public-endpoint \ --enable-iam-database-authentication
Paramètres réseau
-
Assurez-vous que votre VPC possède des sous-réseaux qui permettent le routage public (possède une entrée pour une passerelle Internet dans la table de routage des sous-réseaux). Si vous ne fournissez aucun
db-subnet-group-nameparamètre lors de la création du cluster, le groupe de sous-réseaux par défaut est sélectionné pour la création du cluster. -
Assurez-vous que le groupe de sécurité attaché au cluster autorise le trafic entrant pour les plages IP autorisées et les ports autorisés. Par exemple, si vous souhaitez autoriser le trafic TCP provenant de toutes les adresses IP à se connecter à l'instance Neptune exécutée sur le port 8182, la règle entrante doit avoir :
-
Type : Tout TCP
-
Protocole : TCP
-
Gamme de ports : 8182
-
Bloc CIDR : 0.0.0. 0/0
-
Note
Bien que vous puissiez définir la plage de blocs CIDR sur 0,0.0. 0/0, nous vous recommandons de la réduire à une plage d'adresses IP spécifique de votre application cliente pour améliorer la sécurité.
Création d'une nouvelle instance avec des points de terminaison publics
Vous pouvez créer une nouvelle instance Neptune avec des points de terminaison publics à l'aide de la console de AWS gestion, de la AWS CLI ou AWS du SDK.
À l'aide de la AWS CLI :
aws neptune create-db-instance \ --region us-west-2 \ --engine graphdb \ --engine-version 1.4.6.x \ --db-cluster-identifier neptune-public-endpoint \ --publicly-accessible
Modifier une instance existante pour un accès public
Pour modifier une instance Neptune existante afin de permettre l'accès public :
aws neptune modify-db-instance \ --region us-west-2 \ --engine graphdb \ --engine-version 1.4.6.x \ --db-instance-identifier neptune-public-endpoint \ --publicly-accessible
Note
L'accès public est activé au niveau de l'instance, et non au niveau du cluster. Pour garantir que votre cluster est toujours accessible via des points de terminaison publics, l'accès public doit être activé pour toutes les instances du cluster.
Utilisation des points de terminaison publics
Pour vérifier si votre base de données est accessible, vérifiez son état à l'aide de l'NeptuneDataAPI AWS CLI :
aws neptunedata get-engine-status \ --endpoint-url https://my-cluster-name.cluster-abcdefgh1234.us-east-1.neptune.amazonaws.com:8182
Si la base de données est accessible, la réponse est la suivante :
{ "status": "healthy", "startTime": "Sun Aug 10 06:54:15 UTC 2025", "dbEngineVersion": "1.4.6.0.R1", "role": "writer", "dfeQueryEngine": "viaQueryHint", "gremlin": { "version": "tinkerpop-3.7.1" }, "sparql": { "version": "sparql-1.1" }, "opencypher": { "version": "Neptune-9.0.20190305-1.0" }, "labMode": { "ObjectIndex": "disabled", "ReadWriteConflictDetection": "enabled" }, "features": { "SlowQueryLogs": "disabled", "InlineServerGeneratedEdgeId": "disabled", "ResultCache": { "status": "disabled" }, "IAMAuthentication": "disabled", "Streams": "disabled", "AuditLog": "disabled" }, "settings": { "StrictTimeoutValidation": "true", "clusterQueryTimeoutInMs": "120000", "SlowQueryLogsThreshold": "5000" } }
Exemples d'interrogation de la base de données
AWS INTERFACE DE LIGNE DE COMMANDE (CLI)
aws neptunedata execute-open-cypher-query \ --open-cypher-query "MATCH (n) RETURN n LIMIT 10" \ --endpoint-url https://my-cluster-name.cluster-abcdefgh1234.us-east-1.neptune.amazonaws.com:8182
Python
import boto3 import json from botocore.config import Config # Configuration - Replace with your actual Neptune cluster details cluster_endpoint = "my-cluster-name.cluster-abcdefgh1234.my-region.neptune.amazonaws.com" port = 8182 region = "my-region" # Configure Neptune client # This disables retries and sets the client timeout to infinite # (relying on Neptune's query timeout) endpoint_url = f"https://{cluster_endpoint}:{port}" config = Config( region_name=region, retries={'max_attempts': 1}, read_timeout=None ) client = boto3.client("neptunedata", config=config, endpoint_url=endpoint_url) cypher_query = "MATCH (n) RETURN n LIMIT 5" try: response = client.execute_open_cypher_query(openCypherQuery=cypher_query) print("openCypher Results:") for item in response.get('results', []): print(f" {item}") except Exception as e: print(f"openCypher query failed: {e}")
JavaScript
import { NeptunedataClient, GetPropertygraphSummaryCommand } from "@aws-sdk/client-neptunedata"; import { inspect } from "util"; import { NodeHttpHandler } from "@smithy/node-http-handler"; /** * Main execution function */ async function main() { // Configuration - Replace with your actual Neptune cluster details const clusterEndpoint = 'my-cluster-name.cluster-abcdefgh1234.my-region.neptune.amazonaws.com'; const port = 8182; const region = 'my-region'; // Configure Neptune client // This disables retries and sets the client timeout to infinite // (relying on Neptune's query timeout) const endpoint = `https://${clusterEndpoint}:${port}`; const clientConfig = { endpoint: endpoint, sslEnabled: true, region: region, maxAttempts: 1, // do not retry requestHandler: new NodeHttpHandler({ requestTimeout: 0 // no client timeout }) }; const client = new NeptunedataClient(clientConfig); try { try { const command = new GetPropertygraphSummaryCommand({ mode: "basic" }); const response = await client.send(command); console.log("Graph Summary:", inspect(response.payload, { depth: null })); } catch (error) { console.log("Property graph summary failed:", error.message); } } catch (error) { console.error("Error in main execution:", error); } } // Run the main function main().catch(console.error);
Go
package main import ( "context" "fmt" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/config" "github.com/aws/aws-sdk-go-v2/service/neptunedata" "os" "encoding/json" "net/http" ) func main() { // Configuration - Replace with your actual Neptune cluster details clusterEndpoint := "my-cluster-name.cluster-abcdefgh1234.my-region.neptune.amazonaws.com" port := 8182 region := "my-region" // Configure Neptune client // Configure HTTP client with no timeout // (relying on Neptune's query timeout) endpoint := fmt.Sprintf("https://%s:%d", clusterEndpoint, port) // Load AWS SDK configuration sdkConfig, _ := config.LoadDefaultConfig( context.TODO(), config.WithRegion(region), config.WithHTTPClient(&http.Client{Timeout: 0}), ) // Create Neptune client with custom endpoint client := neptunedata.NewFromConfig(sdkConfig, func(o *neptunedata.Options) { o.BaseEndpoint = aws.String(endpoint) o.Retryer = aws.NopRetryer{} // Do not retry calls if they fail }) gremlinQuery := "g.addV('person').property('name','charlie').property(id,'charlie-1')" serializer := "application/vnd.gremlin-v1.0+json;types=false" gremlinInput := &neptunedata.ExecuteGremlinQueryInput{ GremlinQuery: &gremlinQuery, Serializer: &serializer, } gremlinResult, err := client.ExecuteGremlinQuery(context.TODO(), gremlinInput) if err != nil { fmt.Printf("Gremlin query failed: %v\n", err) } else { var resultMap map[string]interface{} err = gremlinResult.Result.UnmarshalSmithyDocument(&resultMap) if err != nil { fmt.Printf("Error unmarshaling Gremlin result: %v\n", err) } else { resultJSON, _ := json.MarshalIndent(resultMap, "", " ") fmt.Printf("Gremlin Result: %s\n", string(resultJSON)) } } }
Comment fonctionnent les terminaux publics
Lorsqu'une instance de Neptune est accessible au public :
-
Son point de terminaison DNS est résolu en adresse IP privée depuis le VPC du cluster de bases de données.
-
Il se résout en adresse IP publique depuis l'extérieur du VPC du cluster.
-
L'accès est contrôlé par le groupe de sécurité attribué au cluster.
-
Seules les instances accessibles au public sont accessibles via Internet.
Comportement des terminaux du lecteur
-
Si toutes les instances de lecteur sont accessibles au public, le point de terminaison du lecteur sera toujours résolu via l'Internet public.
-
Si seules certaines instances de lecteur sont accessibles au public, le point de terminaison du lecteur ne sera résolu publiquement que s'il sélectionne une instance accessible au public pour répondre à la requête de lecture.
Comportement des terminaux du cluster
-
Le point de terminaison du cluster de bases de données correspond toujours au point de terminaison de l'instance de l'auteur.
-
Si le point de terminaison public est activé sur l'instance d'écriture, le point de terminaison du cluster sera accessible au public, sinon il ne le sera pas.
Comportement après le basculement du cluster
-
Un cluster Neptune peut avoir des instances sur différents paramètres accessibles au public.
-
Si un cluster possède un rédacteur public et un lecteur non public, après un basculement de cluster, le nouvel enregistreur (lecteur précédent) devient non public et le nouveau lecteur (rédacteur précédent) devient public.
Exigences en matière de configuration du réseau
Pour que les terminaux publics fonctionnent correctement :
-
Les instances Neptune doivent se trouver dans des sous-réseaux publics au sein de votre VPC.
-
Les tables de routage associées à ces sous-réseaux doivent disposer d'une route vers une passerelle Internet pour la version 0.0.0. 0/0.
-
Le groupe de sécurité doit autoriser l'accès à partir des adresses IP publiques ou des plages d'adresses CIDR auxquelles vous souhaitez accorder l'accès.
Restreindre la création d'accès public
Vous pouvez utiliser les politiques IAM pour restreindre les personnes autorisées à créer ou à modifier des clusters Neptune accessibles au public. L'exemple de politique suivant interdit la création d'instances Neptune avec un accès public :
Pour en savoir plus sur la clé de condition rds:PublicAccessEnabled IAM : Référence d'autorisation du service Amazon RDS
CloudFormation Prise en charge de par la
Vous pouvez l'utiliser CloudFormation pour lancer des clusters Neptune avec des points de terminaison publics activés en spécifiant le PubliclyAccessible paramètre dans votre CloudFormation modèle.
Compatibilité avec les fonctionnalités de Neptune
Un cluster sur lequel les points de terminaison publics sont activés prend en charge toutes les fonctionnalités de Neptune prises en charge par un VPC-only cluster, notamment :
-
Établi Neptune
-
Intégration de la recherche en texte intégral
-
Ruisseaux Neptune
-
Points de terminaison personnalisés
-
Neptune sans serveur
-
Explorateur de graphes
Tarification
Les terminaux publics sont disponibles sans frais supplémentaires au-delà de la tarification standard de Neptune. Cependant, la connexion de votre environnement local à Neptune via une adresse IP publique peut entraîner une augmentation des coûts de transfert de données.