Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Öffentliche Endpunkte von Neptune
Übersicht
Amazon Neptune Neptune-Cluster werden normalerweise in Ihrer VPC bereitgestellt und können nur von dieser VPC aus aufgerufen werden. Dies erfordert die Konfiguration von Anwendungen und Entwicklungsumgebungen innerhalb der VPC oder die Verwendung von Proxydiensten für die Verbindung mit der VPC, was die Einrichtungszeit und die Kosten erhöht.
Öffentliche Endpunkte vereinfachen diese Erfahrung, indem sie direkte Verbindungen zu Neptune über das Internet ermöglichen, was den Einstieg in Graphdatenbanken ohne spezielle Netzwerkkenntnisse erleichtert.
Wann sollten öffentliche Endpunkte verwendet werden
Erwägen Sie die Verwendung öffentlicher Endpunkte in den folgenden Szenarien:
-
Sie möchten Neptune schnell in einer Entwicklungs- oder Testumgebung ohne komplexe Netzwerkkonfiguration testen?
-
Sie haben keine speziellen Netzwerkkenntnisse AWS
-
Der Sicherheitsstatus Ihrer Anwendung erfordert keine private VPC
-
Sie müssen von Ihrer lokalen Entwicklungsumgebung aus eine Verbindung zu Neptune herstellen
Sicherheitsüberlegungen
Beachten Sie bei der Verwendung öffentlicher Endpunkte die folgenden Sicherheitsaspekte:
-
Für Cluster mit aktivierten öffentlichen Endpunkten ist eine IAM-Authentifizierung erforderlich.
-
Der Zugriff auf die Datenbank wird von der verwendeten Sicherheitsgruppe gesteuert.
-
Sie können einschränken, welche IP-Adressen eine Verbindung zu Ihrem Cluster herstellen können.
-
Mithilfe von IAM-Richtlinien können Sie steuern, wer Cluster mit öffentlichem Zugriff erstellen oder ändern kann. Siehe: Die Erstellung von öffentlichem Zugriff einschränken
Öffentliche Endpunkte aktivieren
Standardmäßig werden neue Neptune-Datenbanken mit deaktivierten öffentlichen Endpunkten erstellt. Sie müssen den öffentlichen Zugriff explizit aktivieren, wenn Sie einen Cluster erstellen oder ändern.
Öffentliche Endpunkte werden ab der Neptune Engine-Release-Version 1.4.6.x unterstützt. Sie müssen bestehende Cluster auf mindestens diese Version aktualisieren, um diese Funktion nutzen zu können.
Die öffentliche Endpunkteinstellung ist auf der Neptune-Instanz und nicht auf dem Neptun-Cluster verfügbar. Daher kann ein Neptun-Cluster bei einigen Instanzen mit öffentlichen Endpunkten existieren und bei anderen ohne. Wir empfehlen jedoch nicht, eine solche Einstellung zu verwenden. Weitere Informationen dazu finden Sie unter: So funktionieren öffentliche Endgeräte
Voraussetzungen
IAM-Authentifizierungseinstellung auf dem Neptune-Cluster
Bevor Sie öffentliche Endpunkte auf einer Neptune-Instance aktivieren, stellen Sie sicher, dass Ihr Cluster die IAM-Authentifizierung unterstützt. Wenn nicht, aktivieren Sie es mit dem folgenden Befehl:
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
Network settings (Netzwerkeinstellungen)
-
Stellen Sie sicher, dass Ihre VPC über Subnetze verfügt, die öffentliches Routing ermöglichen (hat einen Eintrag für ein Internet-Gateway in der Routing-Tabelle der Subnetze). Wenn Sie beim Erstellen des Clusters keinen
db-subnet-group-nameParameter angeben, wird die Standard-Subnetzgruppe für die Clustererstellung ausgewählt. -
Stellen Sie sicher, dass die dem Cluster zugeordnete Sicherheitsgruppe eingehenden Datenverkehr für die zulässigen IP-Bereiche und die zulässigen Ports zulässt. Wenn Sie beispielsweise zulassen möchten, dass TCP-Verkehr von allen eine Verbindung IPs zur Neptune-Instanz herstellt, die auf Port 8182 ausgeführt wird, sollte die Regel für eingehenden Datenverkehr Folgendes enthalten:
-
Typ: Alles TCP
-
Protokoll: TCP
-
Portbereich: 8182
-
CIDR-Block: 0.0.0.0/0
-
Anmerkung
Sie können den CIDR-Blockbereich zwar auf 0.0.0.0/0 festlegen, wir empfehlen jedoch, ihn aus Sicherheitsgründen auf einen bestimmten IP-Bereich Ihrer Client-Anwendung zu reduzieren.
Eine neue Instanz mit öffentlichen Endpunkten erstellen
Sie können mithilfe der AWS Management Console, der AWS CLI oder des SDK eine neue Neptune-Instanz mit öffentlichen Endpunkten erstellen. AWS
Verwenden der 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
Änderung einer vorhandenen Instanz für den öffentlichen Zugriff
Um eine bestehende Neptune-Instanz zu ändern, um den öffentlichen Zugriff zu ermöglichen:
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
Anmerkung
Der öffentliche Zugriff wird auf Instanzebene aktiviert, nicht auf Clusterebene. Um sicherzustellen, dass Ihr Cluster immer über öffentliche Endpunkte zugänglich ist, muss für alle Instances im Cluster der öffentliche Zugriff aktiviert sein.
Verwenden der öffentlichen Endpunkte
Um zu überprüfen, ob Ihre Datenbank erreichbar ist, überprüfen Sie den Status mithilfe der AWS NeptuneData CLI-API:
aws neptunedata get-engine-status \ --endpoint-url https://my-cluster-name.cluster-abcdefgh1234.us-east-1.neptune.amazonaws.com:8182
Wenn auf die Datenbank zugegriffen werden kann, lautet die Antwort wie folgt:
{ "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" } }
Beispiele für die Abfrage der Datenbank
AWS 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)) } } }
Wie funktionieren öffentliche Endpunkte
Wenn eine Neptun-Instanz öffentlich zugänglich ist:
-
Sein DNS-Endpunkt wird in der VPC des DB-Clusters in die private IP-Adresse aufgelöst.
-
Es wird in die öffentliche IP-Adresse von außerhalb der VPC des Clusters aufgelöst.
-
Der Zugriff wird von der Sicherheitsgruppe gesteuert, die dem Cluster zugewiesen ist.
-
Über das Internet kann nur auf öffentlich zugängliche Instanzen zugegriffen werden.
Verhalten der Leser-Endgeräte
-
Wenn alle Reader-Instanzen öffentlich zugänglich sind, wird der Reader-Endpunkt immer über das öffentliche Internet aufgelöst.
-
Wenn nur einige Reader-Instanzen öffentlich zugänglich sind, wird der Reader-Endpunkt nur dann öffentlich aufgelöst, wenn er eine öffentlich zugängliche Instanz für die Bearbeitung der Leseabfrage auswählt.
Verhalten der Cluster-Endpunkte
-
Der DB-Cluster-Endpunkt wird immer zum Instance-Endpunkt des Writers aufgelöst.
-
Wenn der öffentliche Endpunkt auf der Writer-Instance aktiviert ist, ist der Cluster-Endpunkt öffentlich zugänglich, andernfalls nicht.
Verhalten nach einem Cluster-Failover
-
Ein Neptun-Cluster kann Instances in verschiedenen öffentlich zugänglichen Einstellungen haben.
-
Wenn ein Cluster über einen öffentlichen Writer und einen nicht-öffentlichen Reader verfügt, wird nach einem Cluster-Failover der neue Writer (vorheriger Reader) nicht öffentlich und der neue Reader (vorheriger Writer) wird öffentlich.
Anforderungen an die Netzwerkkonfiguration
Damit öffentliche Endpunkte ordnungsgemäß funktionieren:
-
Die Neptune-Instances müssen sich in öffentlichen Subnetzen innerhalb Ihrer VPC befinden.
-
Die mit diesen Subnetzen verknüpften Routentabellen müssen eine Route zu einem Internet-Gateway für 0.0.0.0/0 enthalten.
-
Die Sicherheitsgruppe muss den Zugriff von den öffentlichen IP-Adressen oder CIDR-Bereichen aus zulassen, für die Sie Zugriff gewähren möchten.
Die Erstellung von öffentlichem Zugriff einschränken
Sie können IAM-Richtlinien verwenden, um einzuschränken, wer Neptune-Cluster mit öffentlichem Zugriff erstellen oder ändern kann. Die folgende Beispielrichtlinie verweigert die Erstellung von Neptune-Instanzen mit öffentlichem Zugriff:
Weitere Informationen zum rds:PublicAccessEnabled IAM-Bedingungsschlüssel: Amazon RDS Service Authorization Reference
AWS CloudFormation Unterstützung
Sie können AWS CloudFormation Neptune-Cluster mit aktivierten öffentlichen Endpunkten starten, indem Sie den PubliclyAccessible Parameter in Ihrer Vorlage angeben. AWS CloudFormation
Kompatibilität mit Neptune-Funktionen
Ein Cluster mit aktivierten öffentlichen Endpunkten unterstützt alle Neptune-Funktionen, die ein Nur-VPC-Cluster unterstützt, einschließlich:
-
Neptun-Werkbank
-
Integration der Volltextsuche
-
Neptunströme
-
Benutzerdefinierte Endpunkte
-
Neptune Serverlos
-
Grafik-Explorer
Preise
Öffentliche Endgeräte sind ohne zusätzliche Kosten verfügbar, die über die Standardpreise von Neptune hinausgehen. Eine Verbindung von Ihrer lokalen Umgebung zu Neptune über eine öffentliche IP kann jedoch zu erhöhten Datenübertragungskosten führen.