Importar cotas e validação de formato - Amazon DynamoDB

Importar cotas e validação de formato

Importar cotas

A importação do Amazon S3 para o DynamoDB pode comportar até 50 trabalhos de importação simultâneos com um tamanho total de objeto de origem de importação de 15 TB por vez nas regiões us-east-1, us-west-2 e eu-west-1. Em todas as outras regiões, podem ser feitas até 50 tarefas de importação simultâneas com um tamanho total de 1 TB. Cada trabalho de importação pode ter até 50 mil objetos do Amazon S3 em todas as regiões. Essas cotas padrão são aplicadas a todas as contas. Se você achar que precisa revisar essas cotas, entre em contato com a equipe da sua conta. Isso será considerado caso a caso. Para obter mais detalhes sobre os limites do DynamoDB, consulte Service Quotas.

Erros de validação

Durante o processo de importação, o DynamoDB pode encontrar erros ao analisar os dados. Para cada erro, o DynamoDB emite um log do CloudWatch e mantém uma contagem do número total de erros encontrados. Se o próprio objeto do Amazon S3 for malformado ou se o respectivo conteúdo não puder formar um item do DynamoDB, poderemos ignorar o processamento da parte restante do objeto.

nota

Se a fonte de dados do Amazon S3 tiver vários itens que compartilham a mesma chave, os itens serão substituídos até restar um. Por isso, pode parecer que um item foi importado e os outros foram ignorados. Os itens duplicados serão substituídos em ordem aleatória, não serão contados como erros e não serão emitidos para os logs do CloudWatch.

Quando a importação estiver concluída, será possível ver a contagem total de itens importados, de erros e de itens processados. Para solucionar problemas adicionais, também é possível verificar o tamanho total dos itens importados e dos dados processados.

Há três categorias de erros de importação: erros de validação de API, erros de validação de dados e erros de configuração.

Erros de validação de API

Erros de validação de API são erros em nível de item da API de sincronização. As causas comuns são problemas de permissões, falta de parâmetros obrigatórios e falhas de validação de parâmetro. Os detalhes sobre o motivo de falha da chamada de API encontram-se nas exceções lançadas pela solicitação ImportTable.

Erros de validação de dados

Erros de validação de dados podem ocorrer em nível de item ou de arquivo. Durante a importação, os itens são validados com base nas regras do DynamoDB antes de serem importados para a tabela de destino. Quando há falha na validação de um item e ele não é importado, o trabalho de importação o ignora e prossegue para o próximo item. No final do trabalho, o status de importação é definido como FAILED (Com falha) com um FailureCode, ItemValidationError e o FailureMessage “Some of the items failed validation checks and were not imported. Please check CloudWatch error logs for more details” (Alguns dos itens apresentaram erro nas verificações de validação e não foram importados. Verifique os logs de erro do CloudWatch para obter mais detalhes).

As causas comuns de erros de validação de dados incluem objetos não analisáveis, objetos no formato incorreto (a entrada especifica DYNAMODB_JSON, mas o objeto não está nesse formato) e incompatibilidade de esquema com as chaves de tabela de origem especificadas.

Erros de configuração

Erros de configuração geralmente são erros de fluxo de trabalho decorrentes de validação de permissão. O fluxo de trabalho de importação verifica algumas permissões depois de aceitar a solicitação. Se houver problemas ao chamar qualquer uma das dependências necessárias, como o Amazon S3 ou o CloudWatch, o processo marcará o status de importação como FAILED (Com falha). O failureCode e a failureMessage indicam o motivo da falha. Quando aplicável, a mensagem de falha também contém o ID da solicitação, que você pode usar para investigar o motivo da falha no CloudTrail.

Erros comuns de configuração incluem ter o URL errado para o bucket do Amazon S3 e não ter permissão para acessar o bucket do Amazon S3, o CloudWatch Logs e as chaves do AWS KMS usadas para descriptografar o objeto do Amazon S3. Para obter mais informações, consulte Usar e chaves de dados.

Validar objetos de origem do Amazon S3

Para validar objetos de origem do S3, execute as etapas a seguir.

  1. Validar o formato dos dados e o tipo de compactação

    • Verifique se todos os objetos correspondentes do Amazon S3 sob o prefixo especificado têm o mesmo formato (DYNAMODB_JSON, DYNAMODB_ION, CSV)

    • Verifique se todos os objetos correspondentes do Amazon S3 sob o prefixo especificado estão compactados da mesma maneira (GZIP, ZSTD, NONE)

      nota

      Os objetos do Amazon S3 não precisam ter a extensão correspondente (.csv/.json/.ion/.gz/.zstd etc.), pois o formato de entrada especificado na chamada ImportTable tem precedência.

  2. Valide se os dados de importação estão em conformidade com o esquema de tabela desejado

    • Verifique se cada item nos dados de origem tem a chave primária. A chave de classificação é opcional para importações.

    • Verifique se o tipo de atributo associado à chave primária e a qualquer chave de classificação corresponde ao tipo de atributo na tabela e no esquema GSI, conforme especificado nos parâmetros de criação de tabela.

Solução de problemas

Logs do CloudWatch

Para trabalhos de importação que apresentam falha, mensagens de erro detalhadas são publicadas nos logs do CloudWatch. Para acessar esses logs, primeiro recupere o ImportArn da saída e describe-import usando este comando:

aws dynamodb describe-import --import-arn arn:aws:dynamodb:us-east-1:ACCOUNT:table/target-table/import/01658528578619-c4d4e311 }

Resultado do exemplo:

aws dynamodb describe-import --import-arn "arn:aws:dynamodb:us-east-1:531234567890:table/target-table/import/01658528578619-c4d4e311" { "ImportTableDescription": { "ImportArn": "arn:aws:dynamodb:us-east-1:ACCOUNT:table/target-table/import/01658528578619-c4d4e311", "ImportStatus": "FAILED", "TableArn": "arn:aws:dynamodb:us-east-1:ACCOUNT:table/target-table", "TableId": "7b7ecc22-302f-4039-8ea9-8e7c3eb2bcb8", "ClientToken": "30f8891c-e478-47f4-af4a-67a5c3b595e3", "S3BucketSource": { "S3BucketOwner": "ACCOUNT", "S3Bucket": "my-import-source", "S3KeyPrefix": "import-test" }, "ErrorCount": 1, "CloudWatchLogGroupArn": "arn:aws:logs:us-east-1:ACCOUNT:log-group:/aws-dynamodb/imports:*", "InputFormat": "CSV", "InputCompressionType": "NONE", "TableCreationParameters": { "TableName": "target-table", "AttributeDefinitions": [ { "AttributeName": "pk", "AttributeType": "S" } ], "KeySchema": [ { "AttributeName": "pk", "KeyType": "HASH" } ], "BillingMode": "PAY_PER_REQUEST" }, "StartTime": 1658528578.619, "EndTime": 1658528750.628, "ProcessedSizeBytes": 70, "ProcessedItemCount": 1, "ImportedItemCount": 0, "FailureCode": "ItemValidationError", "FailureMessage": "Some of the items failed validation checks and were not imported. Please check CloudWatch error logs for more details." } }

Recupere o grupo de logs e o ID de importação da resposta acima e use-os para recuperar os logs de erro. O ID de importação é o último elemento do caminho do campo ImportArn. O nome do grupo de logs é /aws-dynamodb/imports. O nome do fluxo de logs de erro é import-id/error. Para este exemplo, seria 01658528578619-c4d4e311/error.

Ausência da chave pk no item

Se o objeto S3 de origem não contiver a chave primária fornecida como parâmetro, a importação apresentará falha. Por exemplo, quando você define a chave primária para a importação como o nome da coluna “pk”.

aws dynamodb import-table —s3-bucket-source S3Bucket=my-import-source,S3KeyPrefix=import-test.csv \ —input-format CSV --table-creation-parameters '{"TableName":"target-table","KeySchema": \ [{"AttributeName":"pk","KeyType":"HASH"}],"AttributeDefinitions":[{"AttributeName":"pk","AttributeType":"S"}],"BillingMode":"PAY_PER_REQUEST"}'

A coluna “pk” está existe no objeto de origem import-test.csv que tem o seguinte conteúdo:

title,artist,year_of_release The Dark Side of the Moon,Pink Floyd,1973

Essa importação apresentará falha devido a um erro de validação do item porque a chave primária não está presente na fonte de dados.

Exemplo de log de erros do CloudWatch:

aws logs get-log-events —log-group-name /aws-dynamodb/imports —log-stream-name 01658528578619-c4d4e311/error { "events": [ { "timestamp": 1658528745319, "message": "{\"itemS3Pointer\":{\"bucket\":\"my-import-source\",\"key\":\"import-test.csv\",\"itemIndex\":0},\"importArn\":\"arn:aws:dynamodb:us-east-1:531234567890:table/target-table/import/01658528578619-c4d4e311\",\"errorMessages\":[\"One or more parameter values were invalid: Missing the key pk in the item\"]}", "ingestionTime": 1658528745414 } ], "nextForwardToken": "f/36986426953797707963335499204463414460239026137054642176/s", "nextBackwardToken": "b/36986426953797707963335499204463414460239026137054642176/s" }

Esse log de erro indica “One or more parameter values were invalid: Missing the key pk in the item” (Um ou mais valores de parâmetro estavam inválidos: o item não contém a chave pk). Como esse trabalho de importação apresentou falha, a tabela “target-table” agora existe e está vazia porque nenhum item foi importado. O primeiro item foi processado e o objeto apresentou falha na validação do item.

Para corrigir o problema, primeiro exclua a “target-table” se ela não for mais necessária. Em seguida, use um nome de coluna de chave primária existente no objeto de origem ou atualize os dados de origem para:

pk,title,artist,year_of_release Albums::Rock::Classic::1973::AlbumId::ALB25,The Dark Side of the Moon,Pink Floyd,1973

A tabela de destino existe

Quando você inicia um trabalho de importação e recebe a seguinte resposta:

An error occurred (ResourceInUseException) when calling the ImportTable operation: Table already exists: target-table

Para corrigir esse erro, você precisará escolher um nome de tabela que ainda não exista e tentar importar novamente.

O bucket especificado não existe

Se o bucket de origem não existir, a importação apresentará falha e registrará os detalhes da mensagem de erro no CloudWatch.

Exemplo de descrição de importação:

aws dynamodb —endpoint-url $ENDPOINT describe-import —import-arn "arn:aws:dynamodb:us-east-1:531234567890:table/target-table/import/01658530687105-e6035287" { "ImportTableDescription": { "ImportArn": "arn:aws:dynamodb:us-east-1:ACCOUNT:table/target-table/import/01658530687105-e6035287", "ImportStatus": "FAILED", "TableArn": "arn:aws:dynamodb:us-east-1:ACCOUNT:table/target-table", "TableId": "e1215a82-b8d1-45a8-b2e2-14b9dd8eb99c", "ClientToken": "3048e16a-069b-47a6-9dfb-9c259fd2fb6f", "S3BucketSource": { "S3BucketOwner": "531234567890", "S3Bucket": "BUCKET_DOES_NOT_EXIST", "S3KeyPrefix": "import-test" }, "ErrorCount": 0, "CloudWatchLogGroupArn": "arn:aws:logs:us-east-1:ACCOUNT:log-group:/aws-dynamodb/imports:*", "InputFormat": "CSV", "InputCompressionType": "NONE", "TableCreationParameters": { "TableName": "target-table", "AttributeDefinitions": [ { "AttributeName": "pk", "AttributeType": "S" } ], "KeySchema": [ { "AttributeName": "pk", "KeyType": "HASH" } ], "BillingMode": "PAY_PER_REQUEST" }, "StartTime": 1658530687.105, "EndTime": 1658530701.873, "ProcessedSizeBytes": 0, "ProcessedItemCount": 0, "ImportedItemCount": 0, "FailureCode": "S3NoSuchBucket", "FailureMessage": "The specified bucket does not exist (Service: Amazon S3; Status Code: 404; Error Code: NoSuchBucket; Request ID: Q4W6QYYFDWY6WAKH; S3 Extended Request ID: ObqSlLeIMJpQqHLRX2C5Sy7n+8g6iGPwy7ixg7eEeTuEkg/+chU/JF+RbliWytMlkUlUcuCLTrI=; Proxy: null)" } }

O FailureCode é S3NoSuchBucket, e FailureMessag contém detalhes como o ID da solicitação e o serviço que gerou o erro. Como o erro foi detectado antes de os dados serem importados para a tabela, uma nova tabela do DynamoDB não é criada. Em alguns casos, quando esses erros são encontrados após o início da importação de dados, a tabela com dados parcialmente importados é mantida.

Para corrigir esse erro, verifique se o bucket do Amazon S3 de origem existe e reinicie o processo de importação.