가져오기 형식 할당량 및 유효성 검사 - Amazon DynamoDB

가져오기 형식 할당량 및 유효성 검사

가져오기 할당량

Amazon S3에서 DynamoDB 가져오기는 us-east-1, us-west-2 및 eu-west-1 리전에서 한 번에 총 가져오기 소스 객체 크기가 15TB인 최대 50개의 동시 가져오기 작업을 지원할 수 있습니다. 다른 모든 리전에서는 총 크기가 1TB인 최대 50개의 동시 가져오기 작업이 지원됩니다. 각 가져오기 작업은 모든 리전에서 최대 5만 개의 Amazon S3 객체를 가져올 수 있습니다. 이러한 기본 할당량은 모든 계정에 적용됩니다. 이러한 할당량을 수정해야 한다고 생각되면 계정 팀에 문의하세요. 이것은 사례별로 검토됩니다. DynamoDB 제한에 대한 자세한 내용은 Service Quotas를 참조하세요.

유효성 검사 오류

가져오기 프로세스 중에 DynamoDB에서 데이터를 구문 분석하는 동안 오류가 발생할 수 있습니다. 각 오류에 대해 DynamoDB는 CloudWatch 로그를 내보내며 발생한 총 오류 수를 로깅합니다. Amazon S3 객체 자체의 형식이 잘못되었거나 해당 콘텐츠가 DynamoDB 항목을 형성할 수 없는 경우 객체의 나머지 부분 처리를 건너뛸 수 있습니다.

참고

Amazon S3 데이터 소스에 동일한 키를 공유하는 여러 항목이 있는 경우 하나가 남을 때까지 항목을 덮어씁니다. 이렇게 하면 1개의 항목을 가져오고 다른 항목은 무시된 것처럼 나타날 수 있습니다. 중복 항목은 임의의 순서로 덮어써지고 오류로 계산되지 않으며 CloudWatch 로그로 내보내지지 않습니다.

가져오기가 완료되면 가져온 총 항목 수, 총 오류 수 및 처리된 총 항목 수를 볼 수 있습니다. 추가 문제 해결을 위해 가져온 항목의 총 크기와 처리된 데이터의 총 크기를 확인할 수도 있습니다.

가져오기 오류에는 API 유효성 검사 오류, 데이터 유효성 검사 오류 및 구성 오류의 세 가지 범주가 있습니다.

API 유효성 검사 오류

API 유효성 검사 오류는 동기화 API의 항목 수준 오류입니다. 일반적인 원인은 권한 문제, 필수 파라미터 누락 및 파라미터 유효성 검사 실패입니다. API 호출이 실패한 이유에 대한 세부 정보는 ImportTable 요청에서 발생한 예외에 포함되어 있습니다.

데이터 유효성 검사 오류

데이터 유효성 검사 오류는 항목 수준 또는 파일 수준에서 발생할 수 있습니다. 가져오는 동안 대상 테이블로 가져오기 전에 DynamoDB 규칙에 따라 항목의 유효성이 검사됩니다. 항목이 유효성 검사에 실패하여 항목을 가져오지 않는 경우 가져오기 작업이 해당 항목을 건너뛰고 다음 항목으로 계속 진행됩니다. 작업이 끝나면 가져오기 상태가 FAILED로 설정되고 FailureCode, ItemValidationError 및 FailureMessage "Some of the items failed validation checks and were not imported(유효성 검사에 실패하여 일부 항목을 가져오지 않았습니다.) Please check CloudWatch error logs for more details(자세한 내용은 CloudWatch 오류 로그를 참조하십시오)"가 표시됩니다.

데이터 유효성 검사 오류의 일반적인 원인에는 객체를 구문 분석할 수 없거나, 객체의 형식이 잘못되었거나(입력은 DYNAMODB_JSON을 지정하지만 객체가 DYNAMODB_JSON에 없음), 스키마가 지정된 소스 테이블 키와 일치하지 않는 것 등이 포함됩니다.

구성 오류

구성 오류는 일반적으로 권한 유효성 검사로 인한 워크플로 오류입니다. 가져오기 워크플로는 요청을 수락한 후 일부 권한을 확인합니다. Amazon S3 또는 CloudWatch와 같은 필수 종속 항목을 호출하는 데 문제가 있는 경우 프로세스에서 가져오기 상태를 FAILED로 표시합니다. failureCodefailureMessage는 실패 이유를 가리킵니다. 해당하는 경우 실패 메시지에는 CloudTrail에서 실패 이유를 조사하는 데 사용할 수 있는 요청 ID도 포함됩니다.

일반적인 구성 오류에는 Amazon S3 버킷의 URL이 잘못되었거나 Amazon S3 버킷, CloudWatch Logs 및 Amazon S3 객체의 암호를 해독하는 데 사용되는 AWS KMS 키에 액세스할 수 있는 권한이 없는 것 등이 포함됩니다. 자세한 내용은 사용 및 데이터 키를 참조하세요.

소스 Amazon S3 객체 유효성 검사

소스 S3 객체의 유효성을 검사하려면 다음 단계를 수행합니다.

  1. 데이터 형식 및 압축 유형 유효성 검사

    • 지정된 접두사 아래의 일치하는 모든 Amazon S3 객체가 동일한 형식(DYNAMODB_JSON, DYNAMODB_ION, CSV)인지 확인합니다.

    • 지정된 접두사 아래의 일치하는 모든 Amazon S3 객체가 동일한 방식(GZIP, ZSTD, NONE)으로 압축되었는지 확인합니다.

      참고

      ImportTable 호출에 지정된 입력 형식이 우선하므로 Amazon S3 객체는 해당 확장자(.csv/.json/.ion/.gz/.zstd 등)를 가질 필요가 없습니다.

  2. 가져오기 데이터가 원하는 테이블 스키마를 준수하는지 검증합니다.

    • 소스 데이터의 각 항목에 프라이머리 키가 있는지 확인합니다. 가져오기에서 정렬 키는 선택 사항입니다.

    • 프라이머리 키 및 정렬 키와 연결된 속성 유형이 테이블 생성 파라미터에 지정된 대로 테이블 및 GSI 스키마의 속성 유형과 일치하는지 확인합니다.

문제 해결

CloudWatch 로그

실패한 가져오기 작업의 경우 자세한 오류 메시지가 CloudWatch 로그에 게시됩니다. 이러한 로그에 액세스하려면 먼저 다음 명령을 사용하여 출력 및 describe-import에서 ImportArn을 검색합니다.

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

출력 예제:

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." } }

위의 응답에서 로그 그룹과 가져오기 ID를 검색하고 이를 사용하여 오류 로그를 검색합니다. 가져오기 ID는 ImportArn 필드의 마지막 경로 요소입니다. 로그 그룹 이름은 /aws-dynamodb/imports입니다. 오류 로그 스트림 이름은 import-id/error입니다. 이 예제에서는 01658528578619-c4d4e311/error입니다.

항목에 pk 키가 누락됨

소스 S3 객체에 파라미터로 제공된 프라이머리 키가 포함되어 있지 않으면 가져오기가 실패합니다. 예를 들어 가져오기에 대한 프라이머리 키를 열 이름 '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"}'

다음 내용이 있는 소스 객체 import-test.csv에서 'pk' 열이 누락되었습니다.

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

데이터 소스의 프라이머리 키가 누락되어 항목 유효성 검사 오류로 인해 가져오기가 실패합니다.

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" }

이 오류 로그에는 "One or more parameter values were invalid: Missing the key pk in the item(하나 이상의 파라미터 값이 잘못되었습니다. 항목에 키 pk가 누락되었습니다)"라고 나와 있습니다. 이 가져오기 작업이 실패했기 때문에 'target-table' 테이블이 존재하지만 가져온 항목이 없으므로 비어 있습니다. 첫 번째 항목이 처리되었고 객체가 항목 유효성 검사에 실패했습니다.

문제를 해결하려면 'target-table'이 더 이상 필요하지 않은 경우 먼저 이를 삭제합니다. 그런 다음 소스 객체에 있는 프라이머리 키 열 이름을 사용하거나 소스 데이터를 다음과 같이 업데이트합니다.

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

대상 테이블 존재

가져오기 작업을 시작하고 다음과 같은 응답을 받았습니다.

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

이 오류를 해결하려면 아직 존재하지 않는 테이블 이름을 선택하고 가져오기를 다시 시도해야 합니다.

지정된 버킷이 존재하지 않습니다

소스 버킷이 없는 경우 가져오기가 실패하고 오류 메시지 세부 정보가 CloudWatch에 기록됩니다.

describe import 예제:

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)" } }

FailureCodeS3NoSuchBucket이며, FailureMessag에는 요청 ID 및 오류가 발생한 서비스와 같은 세부 정보가 포함되어 있습니다. 데이터를 테이블로 가져오기 전에 오류가 발견되었으므로 새 DynamoDB 테이블이 생성되지 않습니다. 경우에 따라 데이터 가져오기가 시작된 후 이러한 오류가 발생하면 부분적으로 가져온 데이터가 있는 테이블이 유지됩니다.

이 오류를 해결하려면 소스 Amazon S3 버킷이 있는지 확인한 다음 가져오기 프로세스를 다시 시작합니다.