2017-10-17 7 views
0

次のコードを使用しようとしていますが、動作させることができません。 the documentationで行われている処理を正確に行っているにもかかわらず、フィルター式が誤ったタイプであるというエラーメッセージが表示され続けます。これを修正するにはどうすればよいですか?Boto Scan Filterexpression:パラメータの型が無効です

def EndpointDeleted(event): 
 
    endpoint = event['Attributes']['EndpointArn'] 
 
    if('EndpointArn' in event['Attributes']): 
 
     client = boto3.client('dynamodb') 
 
     response = client.scan(
 
      TableName='sniffergps-mobilehub-812282467-Users', 
 
      Select='ALL_ATTRIBUTES', 
 
      FilterExpression=Attr('Endpoints').contains(endpoint) 
 
     ) 
 
     return response

しかし、私はフィルタ式が正しくないタイプであるというエラーを取得します。私は、次のインポートメッセージいる: import boto3 from boto3.dynamodb.conditions import Key from boto3.dynamodb.conditions import Attr

エラーメッセージ:

{ 
 
    "errorMessage": "Parameter validation failed:\nInvalid type for parameter FilterExpression, value: <boto3.dynamodb.conditions.Contains object at 0x7fdca25e0b38>, type: <class 'boto3.dynamodb.conditions.Contains'>, valid types: <class 'str'>", 
 
    "errorType": "ParamValidationError", 
 
    "stackTrace": [ 
 
    [ 
 
     "/var/task/lambda_function.py", 
 
     13, 
 
     "lambda_handler", 
 
     "return EndpointDeleted(event)" 
 
    ], 
 
    [ 
 
     "/var/task/lambda_function.py", 
 
     24, 
 
     "EndpointDeleted", 
 
     "FilterExpression=Attr('Endpoints').contains(endpoint)" 
 
    ], 
 
    [ 
 
     "/var/runtime/botocore/client.py", 
 
     312, 
 
     "_api_call", 
 
     "return self._make_api_call(operation_name, kwargs)" 
 
    ], 
 
    [ 
 
     "/var/runtime/botocore/client.py", 
 
     575, 
 
     "_make_api_call", 
 
     "api_params, operation_model, context=request_context)" 
 
    ], 
 
    [ 
 
     "/var/runtime/botocore/client.py", 
 
     630, 
 
     "_convert_to_request_dict", 
 
     "api_params, operation_model)" 
 
    ], 
 
    [ 
 
     "/var/runtime/botocore/validate.py", 
 
     291, 
 
     "serialize_to_request", 
 
     "raise ParamValidationError(report=report.generate_report())" 
 
    ] 
 
    ] 
 
}

答えて

2

はBoto3 DynamoDBのClient、および表Resource間の構文の違いに注意してください。

DynamoDBクライアントのパラメータFilterExpressionには文字列が必要です。

FilterExpressionパラメータを設定する方法は、DynamoDB.Tableリソースの使用方法と似ています。

関連する問題