

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

# Considerazioni, quote e autorizzazioni relative agli articoli in blocco
<a name="BulkPutItems.Considerations"></a>

Questo argomento tratta le quote, le autorizzazioni IAM e le interazioni tra funzionalità che si applicano alle operazioni di invio di articoli in blocco di Amazon DynamoDB. Esamina questi vincoli prima di iniziare un'operazione di invio in blocco di articoli.

## Quote
<a name="BulkPutItems.Considerations.Quotas"></a>

Le operazioni di inserimento in blocco degli elementi sono soggette a quote relative alle operazioni simultanee, alle operazioni attive per tabella, alla dimensione totale di input e al numero e alle dimensioni degli oggetti di input. Per i valori e il modo in cui DynamoDB li applica, vedi [Quote per gli articoli messi in blocco](ServiceQuotas.md#limits-bulk-put-items).

## Requisiti dello stato della tabella
<a name="BulkPutItems.Considerations.TableState"></a>

Per avviare un'operazione di inserimento in blocco degli elementi, la tabella di destinazione deve trovarsi in `ACTIVE` stato, o nel `UPDATING` stato per una modifica che non sia in conflitto con le scritture in blocco. Non è possibile avviare un'operazione mentre la tabella sta creando un indice secondario. Inoltre, non è possibile avviarne una mentre la tabella sta effettuando la transizione da o verso una tabella globale o il ripristino da un backup.

## Tabelle globali
<a name="BulkPutItems.Considerations.GlobalTables"></a>

**Importante**  
Gli elementi inseriti in blocco non supportano le tabelle globali.

Le restrizioni si applicano come segue:
+ Non è possibile avviare un'operazione di inserimento in blocco degli elementi su una tabella che fa parte di una tabella globale.
+ Non è possibile aggiungere una replica a una tabella in cui è in corso un'operazione di inserimento in blocco degli elementi.

Se il carico di lavoro richiede la scrittura di dati in una tabella globale, usa `BatchWriteItem` o individuale `PutItem` operazioni invece.

## Indici vettoriali
<a name="BulkPutItems.Considerations.VectorIndexes"></a>

È possibile utilizzare elementi put in blocco per inserire dati in tabelle con indice vettoriale utilizzando il livello di prestazioni Standard. Il livello di prestazioni accelerate non è disponibile per queste tabelle e la sua richiesta non viene convalidata.

DynamoDB misura i byte dell'indice vettoriale separatamente dai byte della tabella e dell'indice secondario.

## Indici secondari
<a name="BulkPutItems.Considerations.SecondaryIndexes"></a>

Bulk put items aggiorna automaticamente gli indici secondari globali (GSI) e gli indici secondari locali (LSI) durante un'operazione. Non è necessario eseguire ulteriori passaggi per propagare i dati agli indici.

Ogni scrittura dell'indice viene misurata in modo indipendente. I byte scritti su ogni GSI e LSI vengono conteggiati per l'utilizzo in blocco degli elementi put.

## Annullamento
<a name="BulkPutItems.Considerations.Cancellation"></a>

È possibile annullare un'operazione di invio in blocco di elementi chiamando [CancelBulkOperation](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_CancelBulkOperation.html). Quando si annulla un'operazione, si verifica quanto segue:
+ Gli elementi già scritti nella tabella rimangono al loro posto e sono immediatamente leggibili. DynamoDB non ripristina gli elementi scritti prima dell'annullamento.
+ Lo stato dell'operazione passa a `CANCELLING` e poi `CANCELLED`.

## Fatturazione per articoli non riusciti
<a name="BulkPutItems.Considerations.Billing"></a>

Gli articoli rifiutati dalla convalida prima del tentativo di scrittura della tabella non vengono fatturati come scritture nella tabella. Gli articoli che arrivano alla tabella e non superano il controllo delle condizioni vengono fatturati. Per i dettagli di fatturazione completi, consulta [Fatturazione dei report e degli articoli non riusciti](BulkPutItems.Output.md#BulkPutItems.Output.Billing).

## Streams
<a name="BulkPutItems.Considerations.Streams"></a>

Su una tabella con DynamoDB Streams o un flusso di dati Kinesis abilitato, ogni scrittura in blocco produce un record di flusso, fornito alla velocità di scrittura dell'operazione. Gli elementi che non superano il controllo delle condizioni non producono un record di stream. I consumatori di dimensioni adeguate al traffico normale possono rimanere indietro. DynamoDB Streams conserva i record per 24 ore, quindi un consumatore con più di 24 ore di ritardo li perde. Usa [MaxWriteRequestUnits](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_StartBulkPutItems.html#DDB-StartBulkPutItems-request-MaxWriteRequestUnits) nel `StartBulkPutItems` chiamata a limitare la velocità di scrittura delle operazioni di massa e proteggere i consumatori a valle.

## Metriche e approfondimenti per i collaboratori
<a name="BulkPutItems.Considerations.Metrics"></a>

Le scritture in blocco non vengono visualizzate nella tabella `ConsumedWriteCapacityUnits` metrica o in Contributor Insights, perché non consumano capacità. Durante un'operazione, usa `DescribeBulkOperation` e l'output di Amazon S3 per tenere traccia dei progressi e degli errori anziché quello della tabella CloudWatch metriche.

## Scrizioni simultanee sulle stesse chiavi
<a name="BulkPutItems.Considerations.ConcurrentWrites"></a>

Durante un'operazione, DynamoDB può scrivere alcuni record una seconda volta dopo un failover interno. Ogni scrittura ripetuta utilizza l'espressione di condizione del record, quindi una protezione della versione su ogni record impedisce che una scrittura ripetuta sostituisca i dati più recenti. Se l'applicazione scrive sulle stesse chiavi durante l'esecuzione di un'operazione, una scrittura in blocco ripetuta senza condizioni può sovrascrivere una scrittura più recente dell'applicazione. Per proteggere tali chiavi, inserite un attributo di versione su ogni elemento e utilizzate un'espressione condizionale (ad esempio `attribute_not_exists(#v) OR #v < :new`) quindi una scrittura ripetuta non può sovrascrivere un valore più recente.

## Cross-account accesso
<a name="BulkPutItems.Considerations.CrossAccount"></a>

Il chiamante deve essere nell'account della tabella. Cross-account i chiamanti vengono bloccati all'avvio, alla descrizione e all'annullamento. Per un bucket Amazon S3 in un altro account, imposta `S3BucketOwner`. DynamoDB invia `x-amz-expected-bucket-owner`, che per impostazione predefinita è l'account del chiamante. DynamoDB utilizza le credenziali del chiamante per accedere ad Amazon S3, pertanto il principale del chiamante, non il principale del servizio DynamoDB, ha bisogno dell'accesso al bucket.

Se un altro account possiede un bucket, sia la politica di identità del chiamante che la policy del bucket devono consentire l'accesso.

Per leggere l'input di un altro account:

1. Nella politica di identità del chiamante, aggiungi il bucket di origine a `AllowS3ReadInput`.

1. Nell'account del proprietario del bucket, aggiungi una politica del bucket che garantisca il chiamante `s3:ListBucket` sul secchio e `s3:GetObject` sul prefisso di input.

1. Nel `InputS3Configuration`, impostato `S3BucketOwner` all'ID dell'account del proprietario del bucket.

Per inviare i risultati a un altro account:

1. Nel bucket di output, imposta Object Ownership su Bucket owner enforced. Il proprietario del bucket è quindi il proprietario del report e degli oggetti manifest.

1. Nella politica di identità del chiamante, consenti `s3:PutObject` e `s3:AbortMultipartUpload` sul prefisso di uscita.

1. Nell'account del proprietario del bucket, aggiungi una policy del bucket che conceda al chiamante le stesse due azioni sullo stesso prefisso.

1. In `OutputS3Configuration`, impostato `S3BucketOwner` all'ID dell'account del proprietario del bucket.

Con questa politica, il proprietario del bucket può leggere l'output e il chiamante no. Condition-check i record del report contengono l'elemento della tabella esistente (`oldImage`), in modo che il proprietario del bucket di output possa leggere quei dati.

Se `S3BucketOwner` è sbagliato, `StartBulkPutItems` restituisce comunque un'operazione ARN. DynamoDB può scrivere elementi nella tabella prima che l'operazione fallisca con `S3AccessDenied`e non genera alcun report o manifesto.

L'esempio seguente mostra una politica del bucket di output. Sostituisci {{TABLE\_ACCOUNT\_ID}}, {{ROLE\_NAME}}, {{OUTPUT\_BUCKET}} e {{OUTPUT\_PREFIX}} con il tuo valore.

```
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": { "AWS": "arn:aws:iam::{{TABLE_ACCOUNT_ID}}:role/{{ROLE_NAME}}" },
      "Action": ["s3:PutObject", "s3:AbortMultipartUpload"],
      "Resource": "arn:aws:s3:::{{OUTPUT_BUCKET}}/{{OUTPUT_PREFIX}}/*"
    }
  ]
}
```

## Cross-Region secchi
<a name="BulkPutItems.Considerations.CrossRegion"></a>

Un bucket di input o output in un altro AWS La regione comporta costi di trasferimento dati interregionali e, se tale regione è compromessa, l'operazione rallenta o si blocca fino al timeout. Usa i bucket nella regione della tabella quando puoi.

## AWS KMS crittografia
<a name="BulkPutItems.Considerations.KMS"></a>

[S3SseKmsKeyId](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_OutputS3Configuration.html#DDB-Type-OutputS3Configuration-S3SseKmsKeyId) è richiesto quando [S3SseAlgorithm](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_OutputS3Configuration.html#DDB-Type-OutputS3Configuration-S3SseAlgorithm) è `KMS`e viene rifiutato quando `S3SseAlgorithm` è `AES256`. `S3SseAlgorithm` è richiesto ogni volta che si fornisce un ID chiave. Per una tabella crittografata con una chiave gestita dal cliente, il chiamante deve `kms:Decrypt` su quella chiave. Se il chiamante non ce l'ha, `StartBulkPutItems` restituisce un `AccessDeniedException` e non viene avviata alcuna operazione.

## CloudTrail
<a name="BulkPutItems.Considerations.CloudTrail"></a>

AWS CloudTrail registra il `StartBulkPutItems` chiamata con il nome dell'evento `StartBulkOperation` e tipo di risorsa `AWS::DynamoDB::BulkOperation`. Le scritture dei singoli elementi non vengono registrate.

## DynamoDB Accelerator (DAX)
<a name="BulkPutItems.Considerations.DAX"></a>

Le scritture in blocco bypassano il DAX, quindi gli elementi memorizzati nella cache in DAX rimangono obsoleti fino alla scadenza del relativo TTL DAX. Pianifica questa operazione se la tabella è preceduta da DAX.

## Autorizzazioni IAM
<a name="BulkPutItems.Considerations.IAM"></a>

L'inserimento in blocco degli elementi richiede le seguenti azioni IAM. Una policy minima deve includerle tutte e cinque, perché una policy che concede solo le azioni di avvio può avviare un'operazione ma non può monitorarla o annullarla. La tabella seguente elenca queste azioni.


| Azione | Scope | Description | 
| --- | --- | --- | 
| dynamodb:StartBulkOperation | bulk-operation/\* | Necessario per avviare un'operazione di invio in blocco degli articoli. La chiamata di avvio valuta anche i tag e la politica basata sulle risorse della tabella di destinazione. | 
| dynamodb:BulkPutItems | La tabella di destinazione | Necessaria per scrivere elementi nella tabella di destinazione durante un'operazione di inserimento in blocco degli elementi. | 
| dynamodb:DescribeBulkOperation | L'operazione ARN | Necessario per monitorare un'operazione. | 
| dynamodb:CancelBulkOperation | L'operazione ARN | Necessario per annullare un'operazione. | 
| dynamodb:ListBulkOperations | bulk-operation/\* | Necessario per elencare le operazioni. | 

Oltre alle azioni DynamoDB, il principale IAM che chiama `StartBulkPutItems` necessita delle autorizzazioni Amazon S3 nella policy di esempio. Per i bucket in un altro account, consulta [Cross-account accesso](#BulkPutItems.Considerations.CrossAccount). Il bucket di input può anche trovarsi in una regione diversa dalla tabella.

DynamoDB controlla nuovamente le autorizzazioni del chiamante durante l'esecuzione dell'operazione. Se il chiamante perde `dynamodb:BulkPutItems` sul tavolo, o AWS KMS accesso alla chiave gestita dal cliente della tabella, l'operazione termina `FAILED` con `DynamoDBAccessDeniedException` o `KmsAccessDeniedException`. Gli elementi già scritti rimangono nella tabella. Mantieni valide le autorizzazioni del chiamante fino al termine dell'operazione.

DynamoDB supporta operazioni in blocco su tabelle crittografate e supporta anche la lettura da fonti di dati crittografate e l'invio dell'output di errore a bucket Amazon S3 crittografati.

### Policy IAM di esempio
<a name="BulkPutItems.Considerations.IAM.Example"></a>

La seguente politica IAM concede le autorizzazioni minime richieste per eseguire un'operazione di invio di elementi in blocco. Sostituisci i valori segnaposto con l'ID dell'account, la regione, il nome della tabella e i nomi dei bucket.

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowStartBulkOperation",
            "Effect": "Allow",
            "Action": "dynamodb:StartBulkOperation",
            "Resource": "arn:aws:dynamodb:us-east-1:111122223333:bulk-operation/*"
        },
        {
            "Sid": "AllowBulkPutItems",
            "Effect": "Allow",
            "Action": "dynamodb:BulkPutItems",
            "Resource": "arn:aws:dynamodb:us-east-1:111122223333:table/MyTable"
        },
        {
            "Sid": "AllowManageBulkOperations",
            "Effect": "Allow",
            "Action": [
                "dynamodb:DescribeBulkOperation",
                "dynamodb:CancelBulkOperation",
                "dynamodb:ListBulkOperations"
            ],
            "Resource": "arn:aws:dynamodb:us-east-1:111122223333:bulk-operation/*"
        },
        {
            "Sid": "AllowS3ReadInput",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket",
                "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ]
        },
        {
            "Sid": "AllowS3WriteOutput",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:AbortMultipartUpload"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*"
        }
    ]
}
```

Se usi AWS KMS crittografia sugli oggetti Amazon S3 o sulla tabella DynamoDB, aggiungi le seguenti autorizzazioni alla policy. Per leggere o scrivere su una tabella crittografata, il chiamante ha bisogno delle stesse AWS KMS autorizzazioni documentate per `PutItem` su tabelle crittografate. Sostituisci {{your-kms-key-id}} con l'ID del tuo AWS KMS chiave:

```
{
    "Sid": "AllowKMSAccess",
    "Effect": "Allow",
    "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey"
    ],
    "Resource": "arn:aws:kms:us-east-1:111122223333:key/your-kms-key-id"
}
```