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
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
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.
Requisiti dello stato della tabella
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
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
È 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
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
È possibile annullare un'operazione di invio in blocco di elementi chiamando CancelBulkOperation. 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
CANCELLINGe poiCANCELLED.
Fatturazione per articoli non riusciti
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.
Streams
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 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
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
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
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:
-
Nella politica di identità del chiamante, aggiungi il bucket di origine a
AllowS3ReadInput. -
Nell'account del proprietario del bucket, aggiungi una politica del bucket che garantisca il chiamante
s3:ListBucketsul secchio es3:GetObjectsul prefisso di input. -
Nel
InputS3Configuration, impostatoS3BucketOwnerall'ID dell'account del proprietario del bucket.
Per inviare i risultati a un altro account:
-
Nel bucket di output, imposta Object Ownership su Bucket owner enforced. Il proprietario del bucket è quindi il proprietario del report e degli oggetti manifest.
-
Nella politica di identità del chiamante, consenti
s3:PutObjectes3:AbortMultipartUploadsul prefisso di uscita. -
Nell'account del proprietario del bucket, aggiungi una policy del bucket che conceda al chiamante le stesse due azioni sullo stesso prefisso.
-
In
OutputS3Configuration, impostatoS3BucketOwnerall'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 S3AccessDeniede 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
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
S3SseKmsKeyId è richiesto quando S3SseAlgorithm è KMSe 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
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)
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
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. 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
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" }