

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à.

# Acquisizione di modifiche al grafo in tempo reale mediante Neptune Streams
<a name="streams"></a>

Neptune Streams registra automaticamente ogni modifica al grafo, nell'ordine in cui viene eseguita, in modo completamente gestito. Dopo aver abilitato la funzionalità Streams, Neptune si occupa di disponibilità, backup, sicurezza e scadenza.

Di seguito sono elencati alcuni dei numerosi casi d'uso in cui è possibile acquisire automaticamente le modifiche apportate a un grafo:
+ Potrebbe essere necessario che l'applicazione invii automaticamente una notifica alle persone quando vengono apportate determinate modifiche.
+ Potresti voler mantenere una versione attuale dei tuoi dati grafici anche in un altro data store, come Amazon OpenSearch Service, Amazon o Amazon ElastiCache Simple Storage Service (Amazon S3).

Neptune utilizza per il flusso di log delle modifiche lo stesso spazio di archiviazione nativo dei dati del grafo. Scrive le voci change log in modo sincrono insieme alla transazione che apporta tali modifiche. Puoi recuperare questi record di modifica dal flusso di log tramite un'API REST HTTP. (Per informazioni, consulta [Chiamata dell'API Streams](streams-using-api-call.md).)

Il seguente diagramma mostra come recuperare i dati di log delle modifiche da Neptune Streams.

![\[Diagramma che mostra come è possibile recuperare i dati di log delle modifiche dalle istanze di scrittura e dalle repliche di lettura.\]](http://docs.aws.amazon.com/it_it/neptune/latest/userguide/images/neptune-streams.png)


**Garanzie di Neptune Streams**
+ Le modifiche apportate da una transazione sono immediatamente disponibili per la lettura da scrittori e lettori non appena la transazione viene completata (a parte il normale ritardo di replica nei lettori).
+ I record di modifica vengono visualizzati rigorosamente in sequenza, nell'ordine in cui si sono verificati (incluse le modifiche apportate all'interno di una transazione).
+ I flussi di modifiche non contengono duplicati. Ogni modifica viene registrata una sola volta.
+ I flussi di modifiche sono completi. Nessuna modifica viene persa o omessa.
+ I flussi di modifiche contengono tutte le informazioni necessarie per determinare lo stato completo del database stesso in qualsiasi momento, a condizione che lo stato di avvio sia noto.
+ I flussi possono essere attivati o disattivati in qualsiasi momento.

**Proprietà operative di Neptune Streams**
+ Il flusso di log delle modifiche è completamente gestito.
+ I dati di log delle modifiche vengono scritti in modo sincrono come parte della stessa transazione che apporta una modifica.
+ Quando Neptune Streams è abilitato, vengono addebitati I/O costi di archiviazione associati ai dati del registro delle modifiche.
+ Per impostazione predefinita, i record di modifica vengono eliminati automaticamente una settimana dopo la creazione. A partire dal [rilascio 1.2.0.0 del motore](engine-releases-1.2.0.0.md), questo periodo di conservazione può essere modificato utilizzando il parametro del cluster database [neptune\$1streams\$1expiry\$1days](parameters.md#parameters-db-cluster-parameters-neptune_streams_expiry_days) con un numero qualsiasi di giorni compreso tra 1 e 90.
+ Le prestazioni di lettura sui flussi vengono calibrate con le istanze.
+ Puoi ottenere disponibilità elevata e throughput di lettura utilizzando repliche di lettura. Non esiste un limite al numero di lettori di flussi che puoi creare e utilizzare simultaneamente.
+ I dati di log delle modifiche vengono replicati su più zone di disponibilità, rendendoli estremamente durevoli.
+ I dati di log sono protetti quanto i dati del grafo stessi. Possono essere crittografati mentre sono inattivi o in transito. L'accesso può essere controllato tramite IAM, Amazon VPC e AWS Key Management Service ()AWS KMS. Come i dati del grafico, è possibile eseguirne il backup e successivamente ripristinarli utilizzando i point-in-time ripristini (PITR).
+ La scrittura sincrona dei dati di flusso come parte di ogni transazione causa un piccolo peggioramento delle prestazioni complessive di scrittura.
+ I dati di flusso non vengono partizionati, perché Neptune è appositamente progettato per essere a partizione singola.
+ L'API `GetRecords` del flusso di log utilizza le stesse risorse di tutte le altre operazioni del grafo Neptune. Ciò significa che i client devono eseguire il bilanciamento del carico tra le richieste di flusso e altre richieste database.
+ Quando i flussi sono disabilitati, tutti i dati di log diventano immediatamente inaccessibili. Ciò significa che devi leggere tutti i dati di log che potrebbero interessarti prima di disabilitare la registrazione.
+ Al momento non esiste un'integrazione nativa con. AWS Lambda Il flusso di log non genera un evento che può attivare una funzione Lambda.

**Topics**
+ [Utilizzo di Neptune Streams](streams-using.md)
+ [Formati di serializzazione in Neptune Streams](streams-change-formats.md)
+ [Esempi di Neptune Streams](streams-examples.md)
+ [Utilizzo AWS CloudFormation per configurare la replica con l'applicazione Streams Consumer Neptune-to-Neptune](streams-consumer-setup.md)
+ [Utilizzo della replica tra regioni di Neptune Streams per il ripristino di emergenza](streams-disaster-recovery.md)

# Utilizzo di Neptune Streams
<a name="streams-using"></a>

La funzionalità Neptune Streams consente di generare una sequenza completa di voci di log delle modifiche che registrano automaticamente e in tempo reale ogni modifica apportata ai dati del grafo. Per una panoramica di questa caratteristica, consulta [Acquisizione di modifiche al grafo in tempo reale mediante Neptune Streams](streams.md).

**Topics**
+ [Abilitazione di Neptune Streams](streams-using-enabling.md)
+ [Disabilitazione di Neptune Streams](streams-using-disabling.md)
+ [Chiamata di REST API di Neptune Streams](streams-using-api-call.md)
+ [Formato della risposta API di Neptune Streams](streams-using-api-reponse.md)
+ [Eccezioni API di Neptune Streams](streams-using-api-exceptions.md)

# Abilitazione di Neptune Streams
<a name="streams-using-enabling"></a>

È possibile abilitare o disabilitare Neptune Streams in qualsiasi momento impostando il [parametro del cluster database `neptune_streams`](parameters.md#parameters-db-cluster-parameters-neptune_streams). L'impostazione del parametro su `1` abilita i flussi, mentre l'impostazione su `0` disabilita i flussi.

**Nota**  
Dopo aver modificato il parametro del cluster database `neptune_streams`, è necessario riavviare tutte le istanze database nel cluster per rendere effettiva la modifica.

È possibile impostare il parametro del cluster database [neptune\$1streams\$1expiry\$1days](parameters.md#parameters-db-cluster-parameters-neptune_streams_expiry_days) per controllare per quanti giorni, da 1 a 90, i record di flusso rimangono sul server prima di essere eliminati. Il valore predefinito è 7.

Neptune Streams è stato inizialmente introdotto come funzionalità sperimentale che era possibile abilitare o disabilitare in modalità di laboratorio utilizzando il parametro del cluster database `neptune_lab_mode` (vedi [Modalità di laboratorio Neptune](features-lab-mode.md)). L'utilizzo della modalità laboratorio per abilitare Streams è ora obsoleto e verrà disattivato in futuro.

# Disabilitazione di Neptune Streams
<a name="streams-using-disabling"></a>

Puoi disattivare Neptune Streams in qualsiasi momento in cui è in esecuzione.

Per disattivare Streams, aggiorna il gruppo di parametri Cluster DB in modo che il valore del parametro `neptune_streams` sia impostato su 0.

**Importante**  
Non appena Streams viene disattivato, non puoi più accedere ai dati di log delle modifiche. Assicurati di leggere ciò che ti interessa *prima* di disattivare Streams.

# Chiamata di REST API di Neptune Streams
<a name="streams-using-api-call"></a>

Puoi accedere a Neptune Streams utilizzando una REST API che invia una richiesta HTTP GET a uno dei seguenti endpoint locali:
+ Per un database grafico SPARQL:   `https://Neptune-DNS:8182/sparql/stream`.
+ Per un database a grafo Gremlin o openCypher: `https://Neptune-DNS:8182/propertygraph/stream` o `https://Neptune-DNS:8182/pg/stream`.

**Nota**  
Lo stream endpoint (`https://Neptune-DNS:8182/gremlin/stream`) di Gremlin è obsoleto, insieme al formato di output associato (). `GREMLIN_JSON` È ancora supportato per la compatibilità con le versioni precedenti, ma potrebbe essere rimosso nei rilasci futuri.

È consentita una sola operazione `GET` HTTP.

Neptune supporta la compressione `gzip` della risposta, purché la richiesta HTTP includa un'intestazione `Accept-Encoding` che specifichi `gzip` come formato di compressione accettato (ovvero `"Accept-Encoding: gzip"`).

**Parameters**
+ `limit`: long, facoltativo. Intervallo: 1-100.000. Impostazione predefinita: 10

  Specifica il numero massimo di record da restituire. Esiste anche un limite di dimensioni di 10 MB per la risposta che non può essere modificato e che ha la precedenza sul numero di record specificato nel parametro `limit`. La risposta include un record che supera la soglia se il limite di 10 MB è stato raggiunto.
+ `iteratorType`: stringa, facoltativo.

  Questo parametro può accettare uno dei seguenti valori:
  + `AT_SEQUENCE_NUMBER`: (valore predefinito) indica che la lettura deve iniziare dal numero di sequenza di eventi specificato congiuntamente dai parametri `commitNum` e `opNum`.
  + `AFTER_SEQUENCE_NUMBER`: indica che la lettura deve iniziare immediatamente dopo il numero di sequenza di eventi specificato congiuntamente dai parametri `commitNum` e `opNum`.
  + `TRIM_HORIZON`: indica che la lettura deve iniziare dall'ultimo record non tagliato nel sistema, ovvero il record più vecchio non scaduto (non ancora eliminato) nel flusso di log delle modifiche. Questa modalità è utile durante l'avvio dell'applicazione, quando non si dispone di un numero di sequenza dell'evento di avvio specifico.
  + `LATEST`: indica che la lettura deve iniziare dal record più recente non tagliato nel sistema, ovvero il record più recente non scaduto (non ancora eliminato) nel flusso di log delle modifiche. Questa modalità è utile quando è necessario leggere i record dalla parte superiore del flusso per non elaborare i record più vecchi, ad esempio durante un ripristino di emergenza o un aggiornamento senza tempi di inattività. Notare che in questa modalità viene restituito al massimo un solo record.
+ `commitNum`: long, obbligatorio quando iteratorType è `AT_SEQUENCE_NUMBER` o `AFTER_SEQUENCE_NUMBER`.

  Il numero di commit del record iniziale da leggere dal flusso change-log.

  Questo parametro viene ignorato quando `iteratorType` è `TRIM_HORIZON` o `LATEST`.
+ `opNum`: long, facoltativo (il valore predefinito è `1`).

  Il numero di sequenza dell'operazione all'interno del commit specificato da cui iniziare la lettura nei dati del flusso change-log.

Le operazioni che modificano i dati del grafo SPARQL generano solitamente solo un singolo record di modifica per operazione. Tuttavia, le operazioni che modificano i dati del grafo Gremlin possono generare più record di modifica per operazione, come negli esempi seguenti:
+ `INSERT`: un vertice Gremlin può avere più etichette e un elemento Gremlin può avere più proprietà. Un record di modifica separato viene generato per ogni etichetta e proprietà quando si inserisce un elemento.
+ `UPDATE`: quando la proprietà di un elemento Gremlin viene modificata, vengono generati due record di modifica: il primo per la rimozione del valore precedente e il secondo per l'inserimento del nuovo valore.
+ `DELETE`: viene generato un record di modifica separato per ogni proprietà dell'elemento che viene eliminata. Ad esempio, quando un edge Gremlin con proprietà viene eliminato, viene generato un record di modifica per ciascuna delle proprietà e successivamente ne viene generato uno per l'eliminazione dell'etichetta edge.

  Quando un vertice Gremlin viene eliminato, vengono eliminate per prime tutte le proprietà edge in entrata e in uscita, quindi le etichette edge, le proprietà dei vertici e infine le etichette dei vertici. Ognuna di queste eliminazioni genera un record di modifica.

# Formato della risposta API di Neptune Streams
<a name="streams-using-api-reponse"></a>

Una risposta a una richiesta REST API di Neptune Streams include i campi seguenti:
+ `lastEventId`: identificatore di sequenza dell'ultima modifica nella risposta del flusso. Un ID evento è composto da due campi: un `commitNum` che identifica una transazione che ha modificato il grafo e un `opNum` che identifica un'operazione specifica all'interno di tale transazione. Questo viene mostrato nell’esempio seguente.

  ```
    "eventId": {
      "commitNum": 12,
      "opNum": 1
    }
  ```
+ `lastTrxTimestamp`: l'ora in cui è stato richiesto il commit per la transazione, in millisecondi dall'epoca Unix.
+ `format`: formato di serializzazione per i record di modifica restituiti. I valori possibili sono `PG_JSON` per i record di modifica Gremlin o openCypher e `NQUADS` per i record di modifica SPARQL.
+ `records`: un array di record serializzati del flusso di log delle modifiche inclusi nella risposta. Ogni record dell'array `records` contiene i seguenti campi:
  + `commitTimestamp`: l'ora in cui è stato richiesto il commit per la transazione, in millisecondi dall'epoca Unix.
  + `eventId`: identificatore di sequenza del record di modifica del flusso.
  + `data`— Il record serializzato di Gremlin, SPARQL o change. OpenCypher I formati di serializzazione di ciascun record sono descritti più dettagliatamente nella sezione successiva, [Formati di serializzazione in Neptune Streams](streams-change-formats.md).
  + `op`: operazione che ha creato la modifica.
  + `isLastOp`: presente solo se questa operazione è l'ultima della transazione. Se presente, è impostato su `true`. È utile per garantire che venga consumata un'intera transazione.
+ `totalRecords`: numero totale di record nella risposta.

Ad esempio, la seguente risposta restituisce i dati di modifica di Gremlin, per una transazione che contiene più di un'operazione:

```
{
  "lastEventId": {
    "commitNum": 12,
    "opNum": 1
  },
  "lastTrxTimestamp": 1560011610678,
  "format": "PG_JSON",
  "records": [
    {
      "commitTimestamp": 1560011610678,
      "eventId": {
        "commitNum": 1,
        "opNum": 1
      },
      "data": {
        "id": "d2b59bf8-0d0f-218b-f68b-2aa7b0b1904a",
        "type": "vl",
        "key": "label",
        "value": {
          "value": "vertex",
          "dataType": "String"
        }
      },
      "op": "ADD"
    }
  ],
  "totalRecords": 1
}
```

La seguente risposta restituisce i dati di modifica SPARQL per l'ultima operazione di una transazione (operazione identificata da `EventId(97, 1)` nella transazione numero 97).

```
{
  "lastEventId": {
    "commitNum": 97,
    "opNum": 1
  },
  "lastTrxTimestamp": 1561489355102,
  "format": "NQUADS",
  "records": [
    {
      "commitTimestamp": 1561489355102,
      "eventId": {
        "commitNum": 97,
        "opNum": 1
      },
      "data": {
        "stmt": "<https://test.com/s> <https://test.com/p> <https://test.com/o> .\n"
      },
      "op": "ADD",
      "isLastOp": true
    }
  ],
  "totalRecords": 1
}
```

# Eccezioni API di Neptune Streams
<a name="streams-using-api-exceptions"></a>

La tabella seguente descrive le eccezioni di Neptune Streams.


| Codice di errore | Codice HTTP | OK riprovare? | Messaggio | 
| --- | --- | --- | --- | 
| `InvalidParameterException` | 400 | No | È stato fornito un out-of-range valore or non valido come parametro di input. | 
| `ExpiredStreamException` | 400 | No | Tutti i record richiesti superano l'età massima consentita e sono scaduti. | 
| `ThrottlingException` | 500 | Sì | La velocità delle richieste supera il throughput massimo consentito. | 
| `StreamRecordsNotFoundException` | 404 | No | Impossibile trovare la risorsa richiesta. Il flusso potrebbe non essere specificato correttamente. | 
| `MemoryLimitExceededException` | 500 | Sì | L'elaborazione della richiesta non è andata a buon fine a causa della mancanza di memoria, tuttavia si potrà riprovare quando il server sarà meno occupato. | 

# Formati di serializzazione in Neptune Streams
<a name="streams-change-formats"></a>

Amazon Neptune utilizza due diversi formati per la serializzazione dei dati delle modifiche al grafo in flussi di log, a seconda che il grafo sia stato creato utilizzando Gremlin o SPARQL.

Entrambi i formati condividono un formato di serializzazione dei record comune, come descritto in [Formato della risposta API di Neptune Streams](streams-using-api-reponse.md), che contiene i seguenti campi:
+ `commitTimestamp`: l'ora in cui è stato richiesto il commit per la transazione, in millisecondi dall'epoca Unix.
+ `eventId`: identificatore di sequenza del record di modifica del flusso.
+ `data`— Il record serializzato Gremlin, SPARQL o Change. OpenCypher I formati di serializzazione di ciascun record sono descritti più dettagliatamente nelle sezioni successive.
+ `op`: operazione che ha creato la modifica.

**Topics**
+ [Formato di serializzazione delle modifiche PG\$1JSON](#streams-change-formats-gremlin)
+ [Formato di serializzazione della modifica SPARQL NQUADS](#streams-change-formats-sparql)

## Formato di serializzazione delle modifiche PG\$1JSON
<a name="streams-change-formats-gremlin"></a>

**Nota**  
Il formato di output del flusso Gremlin (`GREMLIN_JSON`) emesso dal Gremlin stream endpoint () è obsoleto. `https://Neptune-DNS:8182/gremlin/stream` È stato sostituito da PG\$1JSON, che attualmente è identico a `GREMLIN_JSON`.

Un record di modifica Gremlin o openCypher, contenuto nel campo `data` di una risposta del flusso di log, dispone dei seguenti campi:
+ `id`: stringa, obbligatorio.

  L'ID dell'elemento Gremlin o openCypher.
+ `type`: stringa, obbligatorio.

  Il tipo di questo elemento Gremlin o openCypher. Deve essere uno dei seguenti:
  + `vl`: etichetta di vertice per Gremlin; etichetta di nodo per openCypher.
  + `vp`: proprietà di vertice per Gremlin; proprietà di nodo per openCypher.
  + `e`: arco ed etichetta di arco per Gremlin; relazione e tipo di relazione per openCypher.
  + `ep`: proprietà di arco per Gremlin; proprietà di relazione per openCypher.
+ `key`: stringa, obbligatorio.

  Il nome della proprietà. Per le etichette degli elementi, questo è "label".
+ `value`: oggetto `value`, obbligatorio.

  Si tratta di un oggetto JSON che contiene un campo `value` per il valore stesso e un campo `datatype` per il tipo di dati JSON di tale valore.

  ```
    "value": {
      "value": "the new value",
      "dataType": "the JSON datatype of the new value"
    }
  ```
+ `from`: stringa, facoltativo.

  Se si tratta di un arco (tipo="e"), è l'ID del vertice *from* o del nodo di origine corrispondente.
+ `to`: stringa, facoltativo.

  Se si tratta di un arco (tipo="e"), ID del vertice *to* corrispondente o del nodo di destinazione.

**Esempi di Gremlin**
+ Di seguito è riportato un esempio di un'etichetta del vertice Gremlin.

  ```
  {
    "id": "an ID string",
    "type": "vl",
    "key": "label",
    "value": {
      "value": "the new value of the vertex label",
      "dataType": "String"
    }
  }
  ```
+ Di seguito è riportato un esempio di una proprietà del vertice Gremlin.

  ```
  {
    "id": "an ID string",
    "type": "vp",
    "key": "the property name",
    "value": {
      "value": "the new value of the vertex property",
      "dataType": "the datatype of the vertex property"
    }
  }
  ```
+ Di seguito è riportato un esempio di un edge Gremlin.

  ```
  {
    "id": "an ID string",
    "type": "e",
    "key": "label",
    "value": {
      "value": "the new value of the edge",
      "dataType": "String"
    },
    "from": "the ID of the corresponding "from" vertex",
    "to": "the ID of the corresponding "to" vertex"
  }
  ```

**Esempi di openCypher**
+ Il seguente è un esempio di etichetta di nodo openCypher.

  ```
  {
    "id": "an ID string",
    "type": "vl",
    "key": "label",
    "value": {
      "value": "the new value of the node label",
      "dataType": "String"
    }
  }
  ```
+ Il seguente è un esempio di proprietà di nodo openCypher.

  ```
  {
    "id": "an ID string",
    "type": "vp",
    "key": "the property name",
    "value": {
      "value": "the new value of the node property",
      "dataType": "the datatype of the node property"
    }
  }
  ```
+ Il seguente è un esempio di relazione openCypher.

  ```
  {
    "id": "an ID string",
    "type": "e",
    "key": "label",
    "value": {
      "value": "the new value of the relationship",
      "dataType": "String"
    },
    "from": "the ID of the corresponding source node",
    "to": "the ID of the corresponding target node"
  }
  ```

## Formato di serializzazione della modifica SPARQL NQUADS
<a name="streams-change-formats-sparql"></a>

Neptune registra le modifiche ai quad SPARQL nel grafo utilizzando il linguaggio `N-QUADS` di Resource Description Framework (RDF) definito nella specifica [W3C RDF 1.1 N-Quads](https://www.w3.org/TR/n-quads/).

Il campo `data` nel record di modifica contiene semplicemente un campo `stmt` che contiene un'istruzione N-QUADS che esprime il quad modificato, come nell'esempio seguente.

```
  "stmt" : "<https://test.com/s> <https://test.com/p> <https://test.com/o> .\n"
```

# Esempi di Neptune Streams
<a name="streams-examples"></a>

I seguenti esempi mostrano come accedere ai dati del flusso di log delle modifiche in Amazon Neptune.

**Topics**
+ [Change Log `AT_SEQUENCE_NUMBER`](#streams-examples-at_seq)
+ [Change Log `AFTER_SEQUENCE_NUMBER`](#streams-examples-after_seq)
+ [Change Log `TRIM_HORIZON`](#streams-examples-trim)
+ [Change Log `LATEST`](#streams-examples-trim)
+ [Log delle modifiche di compressione](#streams-examples-compress)

## Change Log `AT_SEQUENCE_NUMBER`
<a name="streams-examples-at_seq"></a>

L'esempio seguente mostra un change log `AT_SEQUENCE_NUMBER` di Gremlin o openCypher.

```
curl -s "https://Neptune-DNS:8182/propertygraph/stream?limit=1&commitNum=1&opNum=1&iteratorType=AT_SEQUENCE_NUMBER" |jq
{
  "lastEventId": {
    "commitNum": 1,
    "opNum": 1
  },
  "lastTrxTimestamp": 1560011610678,
  "format": "PG_JSON",
  "records": [
    {
      "eventId": {
        "commitNum": 1,
        "opNum": 1
      },
      "commitTimestamp": 1560011610678,
      "data": {
        "id": "d2b59bf8-0d0f-218b-f68b-2aa7b0b1904a",
        "type": "vl",
        "key": "label",
        "value": {
          "value": "vertex",
          "dataType": "String"
        }
      },
      "op": "ADD",
      "isLastOp": true
    }
  ],
  "totalRecords": 1
}
```

Questo esempio mostra un change log `AT_SEQUENCE_NUMBER` di SPARQL.

```
curl -s "https://localhost:8182/sparql/stream?limit=1&commitNum=1&opNum=1&iteratorType=AT_SEQUENCE_NUMBER" |jq
{
  "lastEventId": {
    "commitNum": 1,
    "opNum": 1
  },
  "lastTrxTimestamp": 1571252030566,
  "format": "NQUADS",
  "records": [
    {
      "eventId": {
        "commitNum": 1,
        "opNum": 1
      },
      "commitTimestamp": 1571252030566,
      "data": {
        "stmt": "<https://test.com/s> <https://test.com/p> <https://test.com/o> .\n"
      },
      "op": "ADD",
      "isLastOp": true
    }
  ],
  "totalRecords": 1
}
```

## Change Log `AFTER_SEQUENCE_NUMBER`
<a name="streams-examples-after_seq"></a>

L'esempio seguente mostra un change log `AFTER_SEQUENCE_NUMBER` di Gremlin o openCypher.

```
curl -s "https://Neptune-DNS:8182/propertygraph/stream?limit=1&commitNum=1&opNum=1&iteratorType=AFTER_SEQUENCE_NUMBER" |jq
{
  "lastEventId": {
    "commitNum": 2,
    "opNum": 1
  },
  "lastTrxTimestamp": 1560011633768,
  "format": "PG_JSON",
  "records": [
    {
      "commitTimestamp": 1560011633768,
      "eventId": {
        "commitNum": 2,
        "opNum": 1
      },
      "data": {
        "id": "d2b59bf8-0d0f-218b-f68b-2aa7b0b1904a",
        "type": "vl",
        "key": "label",
        "value": {
          "value": "vertex",
          "dataType": "String"
        }
      },
      "op": "REMOVE",
      "isLastOp": true
    }
  ],
  "totalRecords": 1
}
```

## Change Log `TRIM_HORIZON`
<a name="streams-examples-trim"></a>

L'esempio seguente mostra un change log `TRIM_HORIZON` di Gremlin o openCypher.

```
curl -s "https://Neptune-DNS:8182/propertygraph/stream?limit=1&iteratorType=TRIM_HORIZON" |jq
{
  "lastEventId": {
    "commitNum": 1,
    "opNum": 1
  },
  "lastTrxTimestamp": 1560011610678,
  "format": "PG_JSON",
  "records": [
    {
      "commitTimestamp": 1560011610678,
      "eventId": {
        "commitNum": 1,
        "opNum": 1
      },
      "data": {
        "id": "d2b59bf8-0d0f-218b-f68b-2aa7b0b1904a",
        "type": "vl",
        "key": "label",
        "value": {
          "value": "vertex",
          "dataType": "String"
        }
      },
      "op": "ADD",
      "isLastOp": true
    }
  ],
  "totalRecords": 1
}
```

## Change Log `LATEST`
<a name="streams-examples-trim"></a>

L'esempio seguente mostra un change log `LATEST` di Gremlin o openCypher. Notare che i parametri API `limit`, `commitNum` e `opNum` sono completamente facoltativi.

```
curl -s "https://Neptune-DNS:8182/propertygraph/stream?iteratorType=LATEST" | jq
{
  "lastEventId": {
    "commitNum": 21,
    "opNum": 4
  },
  "lastTrxTimestamp": 1634710497743,
  "format": "PG_JSON",
  "records": [
    {
      "commitTimestamp": 1634710497743,
      "eventId": {
        "commitNum": 21,
        "opNum": 4
      },
      "data": {
        "id": "24be4e2b-53b9-b195-56ba-3f48fa2b60ac",
        "type": "e",
        "key": "label",
        "value": {
          "value": "created",
          "dataType": "String"
        },
        "from": "4",
        "to": "5"
      },
      "op": "REMOVE",
      "isLastOp": true
    }
  ],
  "totalRecords": 1
}
```

## Log delle modifiche di compressione
<a name="streams-examples-compress"></a>

L'esempio seguente mostra un change log di compressione di Gremlin o openCypher.

```
curl -sH \
  "Accept-Encoding: gzip" \
  "https://Neptune-DNS:8182/propertygraph/stream?limit=1&commitNum=1" \
  -H "Accept-Encoding: gzip" \
  -v |gunzip -|jq
> GET /propertygraph/stream?limit=1 HTTP/1.1
> Host: localhost:8182
> User-Agent: curl/7.64.0
> Accept: /
> Accept-Encoding: gzip
*> Accept-Encoding: gzip*
>
< HTTP/1.1 200 OK
< Content-Type: application/json; charset=UTF-8
< Connection: keep-alive
*< content-encoding: gzip*
< content-length: 191
<
{ [191 bytes data]
Connection #0 to host localhost left intact
{
  "lastEventId": "1:1",
  "lastTrxTimestamp": 1558942160603,
  "format": "PG_JSON",
  "records": [
    {
      "commitTimestamp": 1558942160603,
      "eventId": "1:1",
      "data": {
        "id": "v1",
        "type": "vl",
        "key": "label",
        "value": {
          "value": "person",
          "dataType": "String"
        }
      },
      "op": "ADD",
      "isLastOp": true
    }
  ],
  "totalRecords": 1
}
```

# Utilizzo AWS CloudFormation per configurare la replica con l'applicazione Streams Consumer Neptune-to-Neptune
<a name="streams-consumer-setup"></a>

È possibile utilizzare un CloudFormation modello per configurare l'applicazione consumer Neptune Streams per supportare la replica. Neptune-to-Neptune

**Topics**
+ [Scegli un CloudFormation modello per la tua regione](#streams-consumer-cfn-by-region)
+ [Aggiunta di dettagli relativi allo stack consumer di flussi Neptune che verranno creati](#streams-consumer-cfn-stack-details)
+ [Esegui il modello CloudFormation](#streams-consumer-cfn-complete)
+ [Per aggiornare lo strumento per il polling dei flussi con gli ultimi artefatti Lambda](#streams-consumer-cfn-update)

## Scegli un CloudFormation modello per la tua regione
<a name="streams-consumer-cfn-by-region"></a>

Per avviare lo CloudFormation stack appropriato sulla CloudFormation console, scegli uno dei pulsanti **Launch Stack** nella tabella seguente, a seconda della AWS regione che desideri utilizzare.


| Region | Vista | Visualizzazione in Designer | Avvia | 
| --- | --- | --- | --- | 
| Stati Uniti orientali (Virginia settentrionale) | [Visualizzazione](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json) | [Visualizzazione in Designer](https://console.aws.amazon.com/cloudformation/designer/home?region=us-east-1&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json) | [https://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/new?stackName=NeptuneStreamPoller&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json](https://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/new?stackName=NeptuneStreamPoller&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json)  | 
| Stati Uniti orientali (Ohio) | [Visualizzazione](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json) | [Visualizzazione in Designer](https://console.aws.amazon.com/cloudformation/designer/home?region=us-east-2&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json) | [https://console.aws.amazon.com/cloudformation/home?region=us-east-2#/stacks/new?stackName=NeptuneStreamPoller&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json](https://console.aws.amazon.com/cloudformation/home?region=us-east-2#/stacks/new?stackName=NeptuneStreamPoller&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json)  | 
| Stati Uniti occidentali (California settentrionale) | [Visualizzazione](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json) | [Visualizzazione in Designer](https://console.aws.amazon.com/cloudformation/designer/home?region=us-west-1&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json) | [https://console.aws.amazon.com/cloudformation/home?region=us-west-1#/stacks/new?stackName=NeptuneStreamPoller&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json](https://console.aws.amazon.com/cloudformation/home?region=us-west-1#/stacks/new?stackName=NeptuneStreamPoller&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json)  | 
| Stati Uniti occidentali (Oregon) | [Visualizzazione](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json) | [Visualizzazione in Designer](https://console.aws.amazon.com/cloudformation/designer/home?region=us-west-2&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json) | [https://console.aws.amazon.com/cloudformation/home?region=us-west-2#/stacks/new?stackName=NeptuneStreamPoller&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json](https://console.aws.amazon.com/cloudformation/home?region=us-west-2#/stacks/new?stackName=NeptuneStreamPoller&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json)  | 
| Canada (Centrale) | [Visualizzazione](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json) | [Visualizzazione in Designer](https://console.aws.amazon.com/cloudformation/designer/home?region=us-west-2&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json) | [https://console.aws.amazon.com/cloudformation/home?region=ca-central-1#/stacks/new?stackName=NeptuneStreamPoller&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json](https://console.aws.amazon.com/cloudformation/home?region=ca-central-1#/stacks/new?stackName=NeptuneStreamPoller&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json)  | 
| Sud America (San Paolo) | [Visualizzazione](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json) | [Visualizzazione in Designer](https://console.aws.amazon.com/cloudformation/designer/home?region=sa-east-1&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json) | [https://console.aws.amazon.com/cloudformation/home?region=sa-east-1#/stacks/new?stackName=NeptuneStreamPoller&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json](https://console.aws.amazon.com/cloudformation/home?region=sa-east-1#/stacks/new?stackName=NeptuneStreamPoller&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json)  | 
| Europa (Stoccolma) | [Visualizzazione](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json) | [Visualizzazione in Designer](https://console.aws.amazon.com/cloudformation/designer/home?region=eu-north-1&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json) | [https://console.aws.amazon.com/cloudformation/home?region=eu-north-1#/stacks/new?stackName=NeptuneStreamPoller&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json](https://console.aws.amazon.com/cloudformation/home?region=eu-north-1#/stacks/new?stackName=NeptuneStreamPoller&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json)  | 
| Europa (Irlanda) | [Visualizzazione](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json) | [Visualizzazione in Designer](https://console.aws.amazon.com/cloudformation/designer/home?region=eu-west-1&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json) | [https://console.aws.amazon.com/cloudformation/home?region=eu-west-1#/stacks/new?stackName=NeptuneStreamPoller&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json](https://console.aws.amazon.com/cloudformation/home?region=eu-west-1#/stacks/new?stackName=NeptuneStreamPoller&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json)  | 
| Europa (Londra) | [Visualizzazione](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json) | [Visualizzazione in Designer](https://console.aws.amazon.com/cloudformation/designer/home?region=eu-west-2&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json) | [https://console.aws.amazon.com/cloudformation/home?region=eu-west-2#/stacks/new?stackName=NeptuneStreamPoller&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json](https://console.aws.amazon.com/cloudformation/home?region=eu-west-2#/stacks/new?stackName=NeptuneStreamPoller&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json)  | 
| Europa (Parigi) | [Visualizzazione](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json) | [Visualizzazione in Designer](https://console.aws.amazon.com/cloudformation/designer/home?region=eu-west-3&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json) | [https://console.aws.amazon.com/cloudformation/home?region=eu-west-3#/stacks/new?stackName=NeptuneStreamPoller&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json](https://console.aws.amazon.com/cloudformation/home?region=eu-west-3#/stacks/new?stackName=NeptuneStreamPoller&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json)  | 
| Europa (Francoforte) | [Visualizzazione](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json) | [Visualizzazione in Designer](https://console.aws.amazon.com/cloudformation/designer/home?region=eu-central-1&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json) | [https://console.aws.amazon.com/cloudformation/home?region=eu-central-1#/stacks/new?stackName=NeptuneStreamPoller&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json](https://console.aws.amazon.com/cloudformation/home?region=eu-central-1#/stacks/new?stackName=NeptuneStreamPoller&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json)  | 
| Medio Oriente (Bahrein) | [Visualizzazione](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json) | [Visualizzazione in Designer](https://console.aws.amazon.com/cloudformation/designer/home?region=me-south-1&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json) | [https://console.aws.amazon.com/cloudformation/home?region=me-south-1#/stacks/new?stackName=NeptuneStreamPoller&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json](https://console.aws.amazon.com/cloudformation/home?region=me-south-1#/stacks/new?stackName=NeptuneStreamPoller&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json)  | 
| Medio Oriente (Emirati Arabi Uniti) | [Visualizzazione](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json) | [Visualizzazione in Designer](https://console.aws.amazon.com/cloudformation/designer/home?region=me-central-1&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json) | [https://console.aws.amazon.com/cloudformation/home?region=me-central-1#/stacks/new?stackName=NeptuneStreamPoller&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json](https://console.aws.amazon.com/cloudformation/home?region=me-central-1#/stacks/new?stackName=NeptuneStreamPoller&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json)  | 
| Israele (Tel Aviv) | [Visualizzazione](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json) | [Visualizzazione in Designer](https://console.aws.amazon.com/cloudformation/designer/home?region=il-central-1&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json) | [https://console.aws.amazon.com/cloudformation/home?region=il-central-1#/stacks/new?stackName=NeptuneStreamPoller&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json](https://console.aws.amazon.com/cloudformation/home?region=il-central-1#/stacks/new?stackName=NeptuneStreamPoller&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json)  | 
| Africa (Città del Capo) | [Visualizzazione](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json) | [Visualizzazione in Designer](https://console.aws.amazon.com/cloudformation/designer/home?region=af-south-1&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json) | [https://console.aws.amazon.com/cloudformation/home?region=af-south-1#/stacks/new?stackName=NeptuneStreamPoller&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json](https://console.aws.amazon.com/cloudformation/home?region=af-south-1#/stacks/new?stackName=NeptuneStreamPoller&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json)  | 
| Asia Pacifico (Tokyo) | [Visualizzazione](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json) | [Visualizzazione in Designer](https://console.aws.amazon.com/cloudformation/designer/home?region=ap-northeast-1&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json) | [https://console.aws.amazon.com/cloudformation/home?region=ap-northeast-1#/stacks/new?stackName=NeptuneStreamPoller&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json](https://console.aws.amazon.com/cloudformation/home?region=ap-northeast-1#/stacks/new?stackName=NeptuneStreamPoller&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json)  | 
| Asia Pacifico (Hong Kong) | [Visualizzazione](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json) | [Visualizzazione in Designer](https://console.aws.amazon.com/cloudformation/designer/home?region=ap-east-1&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json) | [https://console.aws.amazon.com/cloudformation/home?region=ap-east-1#/stacks/new?stackName=NeptuneStreamPoller&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json](https://console.aws.amazon.com/cloudformation/home?region=ap-east-1#/stacks/new?stackName=NeptuneStreamPoller&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json)  | 
| Asia Pacifico (Seul) | [Visualizzazione](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json) | [Visualizzazione in Designer](https://console.aws.amazon.com/cloudformation/designer/home?region=ap-northeast-2&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json) | [https://console.aws.amazon.com/cloudformation/home?region=ap-northeast-2#/stacks/new?stackName=NeptuneStreamPoller&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json](https://console.aws.amazon.com/cloudformation/home?region=ap-northeast-2#/stacks/new?stackName=NeptuneStreamPoller&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json)  | 
| Asia Pacifico (Singapore) | [Visualizzazione](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json) | [Visualizzazione in Designer](https://console.aws.amazon.com/cloudformation/designer/home?region=ap-southeast-1&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json) | [https://console.aws.amazon.com/cloudformation/home?region=ap-southeast-1#/stacks/new?stackName=NeptuneStreamPoller&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json](https://console.aws.amazon.com/cloudformation/home?region=ap-southeast-1#/stacks/new?stackName=NeptuneStreamPoller&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json)  | 
| Asia Pacifico (Sydney) | [Visualizzazione](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json) | [Visualizzazione in Designer](https://console.aws.amazon.com/cloudformation/designer/home?region=ap-southeast-2&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json) | [https://console.aws.amazon.com/cloudformation/home?region=ap-southeast-2#/stacks/new?stackName=NeptuneStreamPoller&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json](https://console.aws.amazon.com/cloudformation/home?region=ap-southeast-2#/stacks/new?stackName=NeptuneStreamPoller&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json)  | 
| Asia Pacifico (Mumbai) | [Visualizzazione](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json) | [Visualizzazione in Designer](https://console.aws.amazon.com/cloudformation/designer/home?region=ap-south-1&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json) | [https://console.aws.amazon.com/cloudformation/home?region=ap-south-1#/stacks/new?stackName=NeptuneStreamPoller&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json](https://console.aws.amazon.com/cloudformation/home?region=ap-south-1#/stacks/new?stackName=NeptuneStreamPoller&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json)  | 
| Cina (Pechino) | [Visualizzazione](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json) | [Visualizzazione in Designer](https://console.amazonaws.cn/cloudformation/designer/home?region=cn-north-1&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json) | [https://console.amazonaws.cn/cloudformation/home?region=cn-north-1#/stacks/new?stackName=NeptuneStreamPoller&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json](https://console.amazonaws.cn/cloudformation/home?region=cn-north-1#/stacks/new?stackName=NeptuneStreamPoller&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json)  | 
| Cina (Ningxia) | [Visualizzazione](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json) | [Visualizzazione in Designer](https://console.amazonaws.cn/cloudformation/designer/home?region=cn-northwest-1&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json) | [https://console.amazonaws.cn/cloudformation/home?region=cn-northwest-1#/stacks/new?stackName=NeptuneStreamPoller&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json](https://console.amazonaws.cn/cloudformation/home?region=cn-northwest-1#/stacks/new?stackName=NeptuneStreamPoller&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json)  | 
| AWS GovCloud (Stati Uniti occidentali) | [Visualizzazione](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json) | [Visualizzazione in Designer](https://console.amazonaws-us-gov.com/cloudformation/designer/home?region=us-gov-west-1&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json) | [https://console.amazonaws-us-gov.com/cloudformation/home?region=us-gov-west-1#/stacks/new?stackName=NeptuneStreamPoller&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json](https://console.amazonaws-us-gov.com/cloudformation/home?region=us-gov-west-1#/stacks/new?stackName=NeptuneStreamPoller&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json)  | 
| AWS GovCloud (Stati Uniti orientali) | [Visualizzazione](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json) | [Visualizzazione in Designer](https://console.amazonaws-us-gov.com/cloudformation/designer/home?region=us-gov-east-1&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json) | [https://console.amazonaws-us-gov.com/cloudformation/home?region=us-gov-east-1#/stacks/new?stackName=NeptuneStreamPoller&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json](https://console.amazonaws-us-gov.com/cloudformation/home?region=us-gov-east-1#/stacks/new?stackName=NeptuneStreamPoller&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json)  | 

Nella pagina **Create Stack (Crea stack)** scegliere **Next (Avanti)**.

## Aggiunta di dettagli relativi allo stack consumer di flussi Neptune che verranno creati
<a name="streams-consumer-cfn-stack-details"></a>

La pagina **Specify Stack Details (Specifica dettagli stack)** fornisce proprietà e parametri che è possibile utilizzare per controllare la configurazione dell'applicazione:

**Nome dello stack**: il nome del nuovo CloudFormation stack che stai creando. In genere è possibile utilizzare il valore predefinito `NeptuneStreamPoller`.

In **Parametri**, fornire quanto segue:

**Configurazione di rete per il VPC in cui viene eseguita l'applicazione consumer di flussi**
+ **`VPC`**: specifica il nome del VPC in cui verrà eseguita la funzione Lambda di polling.
+ **`SubnetIDs`**: sottoreti in cui viene stabilita un'interfaccia di rete. Aggiungere le sottoreti corrispondenti al cluster Neptune.
+ **`SecurityGroupIds`**— Fornisci i gruppi IDs di sicurezza che garantiscono l'accesso in scrittura in entrata al cluster Neptune DB di origine.
+ **`RouteTableIds`**: necessario per creare un endpoint Amazon DynamoDB nel VPC Neptune, se non è presente. È necessario fornire un elenco separato da virgole della tabella di routing associata alle sottoreti. IDs 
+ **`CreateDDBVPCEndPoint`**: valore booleano il cui valore predefinito è `true`, che indica se è necessario creare o meno un endpoint VPC Dynamo DB. È necessario modificarlo e impostarlo su `false` solo se è già stato creato un endpoint DynamoDB nel VPC.
+ **`CreateMonitoringEndPoint`**: valore booleano il cui valore predefinito è `true`, che indica se è necessario creare o meno un endpoint VPC di monitoraggio. È necessario modificarlo in `false` solo se è già stato creato un endpoint di monitoraggio nel VPC.

**Polling di flussi**
+ **`ApplicationName`**: in genere è possibile lasciare questo valore impostato sul valore predefinito (`NeptuneStream`). Se si utilizza un nome diverso, deve essere univoco.
+ **`LambdaMemorySize`**: consente di impostare le dimensioni della memoria disponibili per la funzione Lambda dello strumento di polling. Il valore predefinito è 2.048 megabyte.
+ **`LambdaRuntime`**: linguaggio utilizzato nella funzione Lambda che recupera gli elementi dal flusso Neptune. Può essere impostato su `python3.9` o su `java8`.
+ **`LambdaS3Bucket`**: bucket Amazon S3 che contiene artefatti del codice Lambda. Lasciare questo parametro vuoto, a meno che non si utilizzi una funzione di polling Lambda personalizzata che viene caricata da un bucket Amazon S3 diverso.
+ **`LambdaS3Key`**: chiave Amazon S3 che corrisponde agli artefatti del codice Lambda. Lasciare questo parametro vuoto, a meno che non si utilizzi una funzione di polling Lambda personalizzata.
+ **`LambdaLoggingLevel`**: in generale, lasciare il valore predefinito, `INFO`.
+ **`ManagedPolicies`**: elenca le policy gestite da utilizzare per l'esecuzione della funzione Lambda. In generale, lasciare vuoto a meno che non si utilizzi una funzione di polling Lambda personalizzata.
+ **`StreamRecordsHandler`**: in generale, lascia vuoto a meno che non utilizzi un gestore personalizzato per i record nei flussi Neptune.
+ **`StreamRecordsBatchSize`**: numero massimo di registri da recuperare dal flusso. È possibile utilizzare questo parametro per ottimizzare le prestazioni. Il valore predefinito (`5000`) è un buon punto di partenza. Il massimo consentito è 10.000. Più alto è il numero, meno chiamate di rete sono necessarie per leggere i record dal flusso, ma maggiore è la memoria necessaria per elaborare i record. Valori più bassi di questo parametro comportano una minore velocità di trasmissione effettiva.
+ **`MaxPollingWaitTime`**: tempo di attesa massimo tra due polling (in secondi). Determina la frequenza con cui viene richiamato lo strumento di polling Lambda per il polling dei flussi Neptune. Impostare questo valore su 0 per il polling continuo. Il valore massimo è di 3.600 secondi (1 ora). Il valore predefinito (60 secondi) è un buon punto di partenza, a seconda della velocità con cui cambiano i dati del grafico.
+ **`MaxPollingInterval`**: periodo massimo di polling continuo (in secondi). Consente di impostare un timeout per la funzione di polling Lambda. Il valore deve essere compreso tra 5 e 900 secondi. Il valore predefinito (600 secondi) è un buon punto di partenza.
+ **`StepFunctionFallbackPeriod`**— Il numero di unità di cui step-function-fallback-period attendere il poller, dopodiché la funzione step viene richiamata tramite Amazon CloudWatch Events per il ripristino in caso di errore. Il valore predefinito (5 minuti) è un buon punto di partenza.
+ **`StepFunctionFallbackPeriodUnit`**: unità di tempo utilizzate per misurare il periodo `StepFunctionFallbackPeriodUnit` precedente (`minutes`, `hours` o `days`). Il valore predefinito (`minutes`) è generalmente sufficiente.
+ **`StartingCheckpoint`**— Il checkpoint di partenza per lo stream poller. L'impostazione predefinita è `0:0`, ovvero dall'inizio del flusso Neptune. 
+ **`StreamPollerInitialState`**— Lo stato iniziale del poller. L'impostazione predefinita è `ENABLED`, quindi la replica del flusso verrà avviata al termine della creazione dell'intero stack. 

**Flusso Neptune**
+ **`NeptuneStreamEndpoint`**: (*obbligatorio*) endpoint del flusso di origine Neptune. Può assumere uno dei due formati seguenti:
  + **`https://your DB cluster:port/propertygraph/stream`** (o il relativo alias, `https://your DB cluster:port/pg/stream`).
  + **`https://your DB cluster:port/sparql/stream`**.
+ **`Neptune Query Engine`**: scegliere Gremlin, openCypher o SPARQL.
+ **`IAMAuthEnabledOnSourceStream`**: se il cluster database Neptune utilizza l'autenticazione IAM, impostare questo parametro su `true`.
+ **`StreamDBClusterResourceId`**: se il cluster database Neptune utilizza l'autenticazione IAM, impostare questo parametro sull'ID risorsa del cluster. L'ID risorsa non è lo stesso dell'ID cluster. Invece, assume il formato: `cluster-` seguito da 28 caratteri alfanumerici. Può essere trovato in **Dettagli del cluster** nella console Neptune.

**Cluster database Neptune di destinazione**
+ **`TargetNeptuneClusterEndpoint`**: endpoint (solo nome host) del cluster di backup di destinazione.

  Notare che se si specifica `TargetNeptuneClusterEndpoint`, non si può specificare `TargetSPARQLUpdateEndpoint`.
+ **`TargetNeptuneClusterPort`**: numero di porta per il cluster di destinazione.

  Notare che se si specifica `TargetSPARQLUpdateEndpoint`, l'impostazione di `TargetNeptuneClusterPort` viene ignorata.
+ **`IAMAuthEnabledOnTargetCluster`**: impostare su true se l'autenticazione IAM deve essere abilitata sul cluster di destinazione.
+ **`TargetAWSRegion`**— La AWS regione del cluster di backup di destinazione, ad esempio`us-east-1`). È necessario fornire questo parametro solo quando la AWS regione del cluster di backup di destinazione è diversa dalla regione del cluster di origine Neptune, come nel caso della replica tra regioni. Se le regioni di origine e di destinazione coincidono, questo parametro è facoltativo.

  Nota che se il `TargetAWSRegion` valore non è una [AWS regione valida supportata da Neptune](limits.md#limits-regions), il processo fallisce.
+ **`TargetNeptuneDBClusterResourceId`**: (*facoltativo*) è necessario solo quando l'autenticazione IAM è abilitata nel cluster database di destinazione. Impostare sull'ID risorsa del cluster di destinazione.
+ **`SPARQLTripleOnlyMode`**: flag booleano che determina se è abilitata la modalità solo tripla. In modalità solo tripla, non è disponibile la replica del grafo nominato. Il valore predefinito è `false`.
+ **`TargetSPARQLUpdateEndpoint`**: URL dell'endpoint di destinazione per l'aggiornamento SPARQL, ad esempio `https://abc.com/xyz`. Questo endpoint può essere qualsiasi archivio SPARQL che supporti quadruple o triple.

  Notare che se si specifica `TargetSPARQLUpdateEndpoint`, non è possibile specificare anche `TargetNeptuneClusterEndpoint` e l'impostazione di `TargetNeptuneClusterPort` viene ignorata.
+ **`BlockSparqlReplicationOnBlankNode `**— Bandiera booleana che, se impostata su`true`, interrompe la replica dei dati BlankNode in SPARQL (RDF). Il valore predefinito è `false`.

**Allarme**
+ **`Required to create Cloud watch Alarm`**— Impostalo su `true` se vuoi creare un CloudWatch allarme per il nuovo stack.
+ **`SNS Topic ARN for Cloudwatch Alarm Notifications`**— L'argomento SNS ARN in CloudWatch cui devono essere inviate le notifiche di allarme (necessario solo se gli allarmi sono abilitati).
+ **`Email for Alarm Notifications`**: indirizzo e-mail a cui devono essere inviate le notifiche di allarme (necessario solo se gli allarmi sono abilitati).

Per la destinazione della notifica di allarme, è possibile aggiungere solo SNS, solo e-mail o sia SNS che e-mail.

## Esegui il modello CloudFormation
<a name="streams-consumer-cfn-complete"></a>

A questo punto è possibile completare il processo di provisioning di un'istanza dell'applicazione consumer di flussi Neptune come indicato di seguito:

1. Nella CloudFormation pagina **Specificare i dettagli dello stack**, scegli **Avanti**.

1. Nella pagina **Opzioni**, scegli **Avanti**.

1. Nella pagina **Revisione**, seleziona la prima casella di controllo per accettare la creazione delle risorse IAM da parte di CloudFormation . Seleziona la seconda casella di controllo per confermare `CAPABILITY_AUTO_EXPAND` per il nuovo stack. 
**Nota**  
`CAPABILITY_AUTO_EXPAND` conferma in modo esplicito che, durante la creazione dello stack, le macro verranno ampliate senza revisione preventiva. Gli utenti spesso creano un set di modifiche da un modello elaborato, quindi le modifiche apportate dalle macro possono essere riesaminate prima dell’effettiva creazione dello stack. Per ulteriori informazioni, consulta l' CloudFormation [CreateStack](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_CreateStack.html)API nell'*AWS CloudFormation API Reference.*

   Quindi, scegli **Crea**.

## Per aggiornare lo strumento per il polling dei flussi con gli ultimi artefatti Lambda
<a name="streams-consumer-cfn-update"></a>

Per aggiornare lo strumento per il polling dei flussi con gli ultimi artefatti Lambda, segui questa procedura:

1. In Console di gestione AWS, accedi CloudFormation e seleziona lo CloudFormation stack principale.

1. Seleziona l'opzione **Aggiorna** per lo stack.

1. Seleziona **Sostituisci modello corrente**.

1. Per l'origine del modello, scegli **URL di Amazon S3** e immetti l'URL S3 seguente:

   ```
   https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_neptune.json
   ```

1. Seleziona **Avanti** senza modificare alcun CloudFormation parametro.

1. Scegliere **Update Stack (Aggiorna stack)**.

Lo stack ora aggiornerà gli artefatti Lambda con quelli più recenti.

# Utilizzo della replica tra regioni di Neptune Streams per il ripristino di emergenza
<a name="streams-disaster-recovery"></a>

Neptune offre due modi per implementare le funzionalità di failover tra regioni:
+ Copia e ripristino di snapshot tra regioni
+ Utilizzo di Neptune Streams per replicare i dati tra due cluster in due regioni diverse.

La copia e il ripristino di snapshot tra regioni presentano il sovraccarico operativo più basso per il ripristino di un cluster Neptune in una regione diversa. Tuttavia, la copia di uno snapshot tra regioni può richiedere tempi di trasferimento dei dati significativi, poiché uno snapshot è un backup completo del cluster Neptune. Di conseguenza, la copia e il ripristino di snapshot tra regioni possono essere utilizzati per scenari che richiedono solo un obiettivo del punto di ripristino (RPO) di ore e un obiettivo del tempo di ripristino (RTO) di ore.

L'obiettivo del punto di ripristino (RPO) viene misurato in base al tempo che intercorre tra i backup. Definisce la quantità di dati che possono andare persi tra il momento in cui è stato eseguito l'ultimo backup e il momento in cui il database viene ripristinato.

L'obiettivo del tempo di ripristino (RTO) viene misurato in base al tempo necessario per eseguire un'operazione di ripristino. Questo è il tempo impiegato dal cluster database per eseguire il failover su un database ripristinato dopo che si è verificato un errore.

Neptune Streams offre un modo per mantenere sempre sincronizzato un cluster Neptune di backup con il cluster di produzione primario. Se si verifica un errore, il database esegue il failover sul cluster di backup. Ciò riduce gli obiettivi RPO e RTO a pochi minuti, poiché i dati vengono costantemente copiati nel cluster di backup, che è immediatamente disponibile come destinazione di failover in qualsiasi momento.

Lo svantaggio dell'utilizzo di Neptune Streams in questo modo è che sia il sovraccarico operativo necessario per mantenere i componenti di replica, sia il costo di avere sempre un secondo cluster database Neptune online possono essere significativi.

# Configurazione della Neptune-to-Neptune replica
<a name="streams-disaster-recovery-setup"></a>

Il cluster database di produzione primario risiede in un VPC di una determinata regione di origine. Sono tre gli elementi principali che è necessario replicare o emulare in una regione di ripristino diversa ai fini del ripristino di emergenza:
+ I dati archiviati nel cluster.
+ La configurazione del cluster primario. Ad esempio, se utilizza l'autenticazione IAM, se è crittografato, i parametri del cluster database, i parametri delle istanze, le dimensioni delle istanze e così via.
+ La topologia di rete utilizzata, inclusi il VPC di destinazione, i relativi gruppi di sicurezza e così via.

È possibile utilizzare la APIs gestione di Neptune come la seguente per raccogliere tali informazioni:
+ [`DescribeDBClusters`](api-clusters.md#DescribeDBClusters)
+ [`DescribeDBInstances`](api-instances.md#DescribeDBInstances)
+ [`DescribeDBClusterParameters`](api-parameters.md#DescribeDBClusterParameters)
+ [`DescribeDBParameters`](api-parameters.md#DescribeDBParameters)
+ [https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeVpcs.html](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeVpcs.html)

Con le informazioni raccolte, è possibile utilizzare la seguente procedura per configurare un cluster di backup in una regione diversa, sul quale il cluster di produzione può eseguire il failover in caso di errore.

## Abilita i flussi di Neptune
<a name="streams-disaster-recovery-setup-enable-streams"></a>

È possibile usare [Modificare DBCluster ParameterGroup](api-parameters.md#ModifyDBClusterParameterGroup) per impostare il parametro `neptune_streams` su 1. Quindi, riavviare tutte le istanze del cluster database in modo che la modifica abbia effetto.

È consigliabile eseguire almeno un'operazione di aggiunta o aggiornamento sul cluster database di origine dopo aver abilitato Neptune Streams. In questo modo il flusso di modifiche viene popolato con punti dati a cui è possibile fare riferimento in seguito quando si risincronizza il cluster di produzione con il cluster di backup.

## Crea un nuovo VPC nella regione in cui desideri configurare il cluster di backup
<a name="streams-disaster-recovery-setup-new-vpc"></a>

Prima di creare un nuovo cluster database Neptune in una regione diversa dal cluster primario, è necessario stabilire un nuovo VPC nella regione di destinazione per ospitare il cluster. La connettività tra i cluster primari e di backup viene stabilita tramite il peering VPC, che utilizza il traffico tra sottoreti private in diversi modi. VPCs Tuttavia, per stabilire il peering VPC tra due VPCs, non devono avere blocchi CIDR o spazi di indirizzi IP sovrapposti. Ciò significa che non è possibile usare il VPC predefinito in entrambe le regioni, perché il blocco CIDR per un VPC predefinito è sempre lo stesso (`172.31.0.0/16`).

È possibile utilizzare un VPC esistente nella regione di destinazione, purché soddisfi le seguenti condizioni:
+ Non deve avere un blocco CIDR che si sovrappone al blocco CIDR del VPC in cui si trova il cluster primario.
+ Non deve essere già connesso tramite peering con un altro VPC con lo stesso blocco CIDR del VPC in cui si trova il cluster primario.

Se non è disponibile un VPC adatto nella regione di destinazione, creane uno utilizzando l'API [https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateVpc.html](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateVpc.html) di Amazon EC2.

## Crea un'istantanea del cluster primario e ripristinala nella regione di backup di destinazione
<a name="streams-disaster-recovery-setup-snapshot-restore"></a>

Creare ora un nuovo cluster Neptune in un VPC appropriato nella regione di backup di destinazione che è una copia del cluster di produzione:

**Creare una copia del cluster di produzione nella regione di backup**

1. Nella regione di backup di destinazione, ricreare i parametri e i gruppi di parametri utilizzati dal cluster database di produzione. A tale scopo, è possibile utilizzare [`CreateDBClusterParameterGroup`](api-parameters.md#CreateDBClusterParameterGroup), [`CreateDBParameterGroup`](api-parameters.md#CreateDBParameterGroup), [`ModifyDBClusterParameterGroup`](api-parameters.md#ModifyDBClusterParameterGroup) e [`ModifyDBParameterGroup`](api-parameters.md#ModifyDBParameterGroup).

   Tieni presente che [`CopyDBClusterParameterGroup`](api-parameters.md#CopyDBClusterParameterGroup)attualmente [`CopyDBParameterGroup`](api-parameters.md#CopyDBParameterGroup) APIs non supportano la copia tra regioni.

1. Utilizzare [`CreateDBClusterSnapshot`](api-snapshots.md#CreateDBClusterSnapshot) per creare uno snapshot del cluster di produzione nel VPC della regione di produzione.

1. Utilizzare [`CopyDBClusterSnapshot`](api-snapshots.md#CopyDBClusterSnapshot) per copiare lo snapshot nel VPC della regione di backup di destinazione.

1. Utilizzare [`RestoreDBClusterFromSnapshot`](api-snapshots.md#RestoreDBClusterFromSnapshot) per creare un nuovo cluster database nel VPC della regione di backup di destinazione utilizzando lo snapshot copiato. Utilizzare le impostazioni e i parametri di configurazione copiati dal cluster di produzione primario.

1. Il nuovo cluster Neptune ora esiste ma non contiene istanze. [`CreateDBInstance`](api-instances.md#CreateDBInstance)Utilizzatelo per creare una nuova primary/writer istanza con lo stesso tipo e le stesse dimensioni dell'istanza writer del cluster di produzione. A questo punto non è necessario creare repliche di lettura aggiuntive, a meno che l'istanza di backup non venga utilizzata per eseguire il servizio di lettura I/O nell'area di destinazione prima del failover.

## Stabilisci il peering VPC tra il VPC del cluster primario e il VPC del nuovo cluster di backup
<a name="streams-disaster-recovery-setup-vpc-peering"></a>

Configurando il peering VPC, si consente al VPC del cluster primario di comunicare con il VPC del cluster di backup come se si trattasse di un'unica rete privata. Per questa opzione, effettua la procedura riportata di seguito.

1. Dal VPC del cluster di produzione, chiamare l'API [https://docs.aws.amazon.com/AWSEC2/latest/APIReference/CreateVpcPeeringConnection.html](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/CreateVpcPeeringConnection.html) per stabilire la connessione peering.

1. Dal VPC del cluster di backup di destinazione, chiamare l'API [https://docs.aws.amazon.com/AWSEC2/latest/APIReference/AcceptVpcPeeringConnection.html](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/AcceptVpcPeeringConnection.html) per accettare la connessione peering.

1. Dal VPC del cluster di produzione, utilizzare l'API [https://docs.aws.amazon.com/AWSEC2/latest/APIReference/CreateRoute.html](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/CreateRoute.html) per aggiungere una route alla tabella di routing del VPC che reindirizza tutto il traffico al blocco CIDR del VPC di destinazione in modo che utilizzi l'elenco dei prefissi di peering VPC.

1. Analogamente, dal VPC del cluster di backup di destinazione, utilizzare l'API [https://docs.aws.amazon.com/AWSEC2/latest/APIReference/CreateRoute.html](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/CreateRoute.html) per aggiungere una route alla tabella di routing del VPC che instrada il traffico al VPC del cluster primario.

## Configurare l'infrastruttura di replica di Neptune Streams
<a name="streams-disaster-recovery-setup-streams-replication"></a>

Ora che entrambi i cluster sono stati implementati e la comunicazione di rete tra le due regioni è stata stabilita, utilizza il modello [Neptune-to-Neptune CloudFormation per implementare la funzione Lambda consumer Neptune](streams-consumer-setup.md) Streams con l'infrastruttura aggiuntiva che supporta la replica dei dati. Eseguire questa operazione nel VPC del cluster di produzione primario.

I parametri CloudFormation che dovrai fornire per questo stack sono:
+ **`NeptuneStreamEndpoint`**: endpoint del flusso per il cluster primario, in formato URL. Ad esempio: `https://(cluster name):8182/pg/stream`.
+ **`QueryEngine`**: deve essere `gremlin`, `sparql` o `openCypher`.
+ **`RouteTableIds`**: consente di aggiungere route sia per un endpoint VPC DynamoDB che per un endpoint VPC di monitoraggio.

  Anche i due parametri aggiuntivi, vale a dire `CreateMonitoringEndpoint` e `CreateDynamoDBEndpoint`, devono essere impostati su true se non sono già presenti nel VPC del cluster primario. Se esistono già, assicurati che siano impostati su false o la CloudFormation creazione avrà esito negativo.
+ **`SecurityGroupIds`**: specifica il gruppo di sicurezza utilizzato dal consumer Lambda per comunicare con l'endpoint del flusso Neptune del cluster primario.

  Nel cluster di backup di destinazione, collegare un gruppo di sicurezza che consenta il traffico proveniente da questo gruppo di sicurezza.
+ **`SubnetIds`**: elenco di ID di sottorete nel VPC del cluster primario che possono essere utilizzati dal consumer Lambda per comunicare con il cluster primario.
+ **`TargetNeptuneClusterEndpoint`**: endpoint (solo nome host) del cluster di backup di destinazione.
+ **`TargetAWSRegion`**— La AWS regione del cluster di backup di destinazione, ad esempio`us-east-1`). È necessario fornire questo parametro solo quando la AWS regione del cluster di backup di destinazione è diversa dalla regione del cluster di origine Neptune, come nel caso della replica tra regioni. Se le regioni di origine e di destinazione coincidono, questo parametro è facoltativo.

  Nota che se il `TargetAWSRegion` valore non è una [AWS regione valida supportata da Neptune](limits.md#limits-regions), il processo fallisce.
+ **`VPC`**: ID del VPC del cluster primario.

Tutti gli altri parametri possono essere lasciati con i valori predefiniti.

Una volta distribuito il CloudFormation modello, Neptune inizierà a replicare tutte le modifiche dal cluster primario al cluster di backup. È possibile monitorare questa replica nei CloudWatch log generati dalla funzione consumer Lambda.

# Altre considerazioni
<a name="streams-disaster-recovery-setup-other"></a>
+ Se è necessario utilizzare l'autenticazione IAM tra il cluster primario e il cluster di backup, è possibile configurarla anche quando si richiama il modello. CloudFormation 
+ Se nel cluster primario è abilitata la crittografia dei dati inattivi, considerare come gestire le chiavi KMS associate quando si copia lo snapshot nella regione di destinazione e come associare una nuova chiave KMS nella regione di destinazione.
+ Una best practice consiste nell'utilizzare il DNS CNAMEs davanti agli endpoint Neptune utilizzati nelle applicazioni. Quindi, se è necessario eseguire manualmente il failover sul cluster di backup di destinazione, questi CNAMEs possono essere modificati in modo che puntino agli endpoint dell'istanza del cluster di destinazione. and/or 