使用boto3调用DynamoDB export_table_to_point_in_time增量导出遇参数验证错误
问题解决:DynamoDB增量导出参数验证失败
问题描述
使用boto3 1.28.79调用export_table_to_point_in_time接口执行增量导出时,触发参数验证错误,提示ExportType和IncrementalExportSpecification为未知参数。代码示例:
client.export_table_to_point_in_time( TableArn=table_arn, S3Bucket=s3_bucket_name, ExportFormat='DYNAMODB_JSON', ExportType='INCREMENTAL_EXPORT', IncrementalExportSpecification={ 'ExportFromTime': datetime.today(), 'ExportToTime': datetime.today() - timedelta(days=1), 'ExportViewType': 'NEW_IMAGE' } )
错误信息:
{ "errorMessage": "Parameter validation failed:\nUnknown parameter in input: \"ExportType\", must be one of: TableArn, ExportTime, ClientToken, S3Bucket, S3BucketOwner, S3Prefix, S3SseAlgorithm, S3SseKmsKeyId, ExportFormat\nUnknown parameter in input: \"IncrementalExportSpecification\", must be one of: TableArn, ExportTime, ClientToken, S3Bucket, S3BucketOwner, S3Prefix, S3SseAlgorithm, S3SseKmsKeyId, ExportFormat", "errorType": "ParamValidationError", "requestId": "e0edeed9-d68d-4f8c-ae4f-030e05248061", "stackTrace": [ " File \"/opt/python/lib/python3.9/site-packages/datadog_lambda/wrapper.py\", line 214, in __call__\n self.response = self.func(event, context, **kwargs)\n", " File \"/var/task/src/eda_transaction_export_handler.py\", line 15, in handle\n def handle(events, context):\n", " File \"/opt/python/lib/python3.9/site-packages/ddtrace/contrib/aws_lambda/patch.py\", line 120, in __call__\n self.response = self.func(*args, **kwargs)\n", " File \"/var/task/src/eda_transaction_export_handler.py\", line 16, in handle\n client.export_table_to_point_in_time(\n", " File \"/var/runtime/botocore/client.py\", line 530, in _api_call\n return self._make_api_call(operation_name, kwargs)\n", " File \"/var/runtime/botocore/client.py\", line 919, in _make_api_call\n request_dict = self._convert_to_request_dict(\n", " File \"/var/runtime/botocore/client.py\", line 990, in _convert_to_request_dict\n request_dict = self._serializer.serialize_to_request(\n", " File \"/var/runtime/botocore/validate.py\", line 381, in serialize_to_request\n raise ParamValidationError(report=report.generate_report())\n" ] }
原因分析
boto3依赖botocore提供的AWS服务API模型定义,ExportType和IncrementalExportSpecification是DynamoDB增量导出的新增参数,需要对应版本的botocore支持。即使boto3版本为1.28.79,如果配套的botocore版本过低,会缺少这些参数的校验规则,从而触发参数验证错误。
解决方案
升级botocore到兼容版本
boto3与botocore存在严格的版本对应关系,boto3 1.28.x系列对应的botocore版本应为1.31.x。执行以下命令升级:pip install --upgrade botocore==1.31.79可通过
pip show botocore命令查看当前botocore版本,确认是否符合要求。修正时间参数逻辑(可选但重要)
代码中ExportFromTime与ExportToTime的时间范围逻辑颠倒,会导致导出数据为空。正确顺序应为ExportFromTime早于ExportToTime:IncrementalExportSpecification={ 'ExportFromTime': datetime.today() - timedelta(days=1), 'ExportToTime': datetime.today(), 'ExportViewType': 'NEW_IMAGE' }确认客户端初始化方式
确保DynamoDB客户端使用默认方式初始化,避免加载旧的自定义服务模型或配置文件覆盖新API参数定义:import boto3 client = boto3.client('dynamodb')
内容的提问来源于stack exchange,提问作者Long Vu
相关产品推荐
相关产品推荐

