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á.
Endpoints públicos do Neptune
Visão geral
Os clusters do Amazon Neptune são normalmente implantados em sua VPC e só podem ser acessados de dentro dessa VPC. Isso requer a configuração de aplicativos e ambientes de desenvolvimento dentro da VPC ou o uso de serviços de proxy para se conectar à VPC, o que aumenta o tempo e os custos de configuração.
Os endpoints públicos simplificam essa experiência ao permitir conexões diretas com o Neptune pela Internet, facilitando o início com bancos de dados gráficos sem conhecimento especializado em rede.
Quando usar endpoints públicos
Considere o uso de endpoints públicos nos seguintes cenários:
-
Você deseja testar rapidamente o Neptune em um ambiente de desenvolvimento ou teste sem configuração de rede complexa
-
Você não tem conhecimento especializado AWS em redes
-
A postura de segurança do seu aplicativo não exige uma VPC privada
-
Você precisa se conectar ao Neptune a partir do seu ambiente de desenvolvimento local
Considerações sobre segurança
Ao usar endpoints públicos, tenha em mente estas considerações de segurança:
-
A autenticação do IAM é necessária para clusters com endpoints públicos habilitados.
-
O acesso ao banco de dados é controlado pelo grupo de segurança que ele usa.
-
Você pode restringir quais endereços IP podem se conectar ao seu cluster.
-
Você pode usar as políticas do IAM para controlar quem pode criar ou modificar clusters com acesso público. Consulte: Restringindo a criação de acesso público
Habilitando endpoints públicos
Por padrão, novos bancos de dados Neptune são criados com endpoints públicos desativados. Você deve habilitar explicitamente o acesso público ao criar ou modificar um cluster.
Os endpoints públicos são compatíveis com a versão 1.4.6.x do Neptune Engine. Você precisa atualizar os clusters existentes para pelo menos essa versão para usar esse recurso.
A configuração de endpoint público está disponível na instância do Neptune e não no cluster do Neptune. Portanto, um cluster Neptune pode existir com algumas instâncias com endpoints públicos e outras sem. No entanto, não recomendamos ter essa configuração. Para obter mais informações sobre isso, consulte: Como funcionam os endpoints públicos
Pré-requisitos
Configuração de autenticação do IAM no cluster Neptune
Antes de habilitar endpoints públicos em uma instância do Neptune, certifique-se de que seu cluster seja compatível com a autenticação do IAM. Caso contrário, ative-o usando o seguinte comando:
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 (Configurações de rede)
-
Certifique-se de que sua VPC tenha sub-redes que habilitem o roteamento público (tenha uma entrada para um gateway de internet na tabela de rotas das sub-redes). Se você não fornecer um
db-subnet-group-nameparâmetro ao criar o cluster, o grupo de sub-rede padrão será escolhido para a criação do cluster. -
Certifique-se de que o grupo de segurança conectado ao cluster permita tráfego de entrada para os intervalos de IP permitidos e as portas permitidas. Por exemplo, se você quiser permitir que o tráfego TCP de todos se conecte IPs à instância do Neptune em execução na porta 8182, a regra de entrada deve ter:
-
Tipo: Todo TCP
-
Protocolo: TCP
-
Alcance de portas: 8182
-
Bloco CIDR: 0.0.0.0/0
-
nota
Embora você possa definir o intervalo de blocos CIDR como 0.0.0.0/0, recomendamos reduzi-lo a um intervalo de IP específico do seu aplicativo cliente para uma melhor postura de segurança.
Criação de uma nova instância com endpoints públicos
Você pode criar uma nova instância do Neptune com endpoints públicos usando o AWS Management Console, a AWS CLI ou o SDK. AWS
Usando a 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
Modificar uma instância existente para acesso público
Para modificar uma instância existente do Neptune para permitir o acesso público:
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
nota
O acesso público é habilitado no nível da instância, não no nível do cluster. Para garantir que seu cluster esteja sempre acessível por meio de endpoints públicos, todas as instâncias no cluster devem ter o acesso público ativado.
Usando os endpoints públicos
Para verificar se seu banco de dados está acessível, verifique o status usando a API CLI: AWS NeptuneData
aws neptunedata get-engine-status \ --endpoint-url https://my-cluster-name.cluster-abcdefgh1234.us-east-1.neptune.amazonaws.com:8182
Se o banco de dados estiver acessível, a resposta será:
{ "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" } }
Exemplos de como consultar o banco de dados
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)) } } }
Como funcionam os endpoints públicos
Quando uma instância do Neptune está acessível ao público:
-
Seu endpoint de DNS é resolvido para o endereço IP privado de dentro da VPC do cluster de banco de dados.
-
Ele é resolvido para o endereço IP público de fora da VPC do cluster.
-
O acesso é controlado pelo grupo de segurança atribuído ao cluster.
-
Somente instâncias acessíveis ao público podem ser acessadas pela Internet.
Comportamento do endpoint do leitor
-
Se todas as instâncias do leitor estiverem acessíveis ao público, o endpoint do leitor sempre será resolvido pela Internet pública.
-
Se apenas algumas instâncias do leitor estiverem acessíveis ao público, o endpoint do leitor resolverá publicamente somente se selecionar uma instância acessível ao público para atender à consulta de leitura.
Comportamento do endpoint do cluster
-
O endpoint do cluster de banco de dados sempre é resolvido para o endpoint da instância do gravador.
-
Se o endpoint público estiver habilitado na instância do gravador, o endpoint do cluster estará acessível publicamente, caso contrário, não estará.
Comportamento após o failover do cluster
-
Um cluster do Neptune pode ter instâncias em diferentes configurações públicas acessíveis.
-
Se um cluster tiver um gravador público e um leitor não público, publique um failover de cluster, o novo gravador (leitor anterior) se tornará não público e o novo leitor (escritor anterior) se tornará público.
Requisitos de configuração de rede
Para que os endpoints públicos funcionem corretamente:
-
As instâncias do Neptune devem estar em sub-redes públicas dentro da sua VPC.
-
As tabelas de rotas associadas a essas sub-redes devem ter uma rota para um gateway da Internet para 0.0.0.0/0.
-
O grupo de segurança deve permitir o acesso dos endereços IP públicos ou dos intervalos CIDR aos quais você deseja conceder acesso.
Restringindo a criação de acesso público
Você pode usar as políticas do IAM para restringir quem pode criar ou modificar clusters do Neptune com acesso público. O exemplo de política a seguir nega a criação de instâncias do Neptune com acesso público:
Mais sobre a chave de condição rds:PublicAccessEnabled do IAM: Referência de autorização de serviço do Amazon RDS
AWS CloudFormation apoio
Você pode usar AWS CloudFormation para iniciar clusters do Neptune com endpoints públicos habilitados PubliclyAccessible especificando o parâmetro em seu modelo. AWS CloudFormation
Compatibilidade com os recursos do Neptune
Um cluster com endpoints públicos habilitados oferece suporte a todos os recursos do Neptune que um cluster somente de VPC suporta, incluindo:
-
Bancada de trabalho Neptune
-
Integração de pesquisa de texto completo
-
Streams de Netuno
-
Endpoints personalizados
-
Neptune sem servidor
-
Explorador de gráficos
Preços
Os endpoints públicos estão disponíveis sem custo adicional além do preço padrão do Neptune. No entanto, conectar-se do seu ambiente local ao Neptune por meio de um IP público pode gerar maiores custos de transferência de dados.