Python调用AWS Lambda动态传参失败问题求助
Python调用AWS Lambda动态变量异常问题
原始场景
硬编码函数名和参数时,代码可正常执行:
params = {"value1": "value1-value", "value2": "value2-value", "value3": "value3-value"} client = boto3.client('lambda') response = client.invoke( FunctionName='MyLambdaFunctionName', InvocationType='RequestResponse', Payload=json.dumps(params).encode(), ) pprint.pp(response['Payload'].read())
改为从环境变量获取Lambda函数名、动态构造参数后执行失败,测试代码:
lambdaName = os.getenv('TF_VAR_lambdaName') value1="value1-value" value2="value2-value" value3="value3-value" data = {"value1": "value1-value", "value2": "value2-value", "value3": "value3-value"} params = json.dumps(data) client = boto3.client('lambda') response = client.invoke( FunctionName=lambdaName, InvocationType='RequestResponse', Payload=json.dumps(params).encode(), ) pprint.pp(response['Payload'].read())
首次错误信息
执行后抛出参数验证错误:
Traceback (most recent call last): File "/Users/go/src/github.com/repo/./cleanup/cleanup.py", line 25, in <module> response = client.invoke( File "/Users/Library/Python/3.9/lib/python/site-packages/botocore/client.py", line 515, in _api_call return self._make_api_call(operation_name, kwargs) File "/Users/Library/Python/3.9/lib/python/site-packages/botocore/client.py", line 893, in _make_api_call request_dict = self._convert_to_request_dict( File "/Users/Library/Python/3.9/lib/python/site-packages/botocore/client.py", line 964, in _convert_to_request_dict request_dict = self._serializer.serialize_to_request( File "/Users/Library/Python/3.9/lib/python/site-packages/botocore/validate.py", line 381, in serialize_to_request raise ParamValidationError(report=report.generate_report()) botocore.exceptions.ParamValidationError: Parameter validation failed: Invalid type for parameter FunctionName, value: None, type: <class 'NoneType'>, valid types: <class 'str'>
更新后的问题
修改参数传递方式,直接使用JSON序列化结果尝试解决问题,却出现新的Lambda执行错误:
{ "errorType": "ValidationMetadataException", "errorMessage": "The argument is null or empty. Provide an argument that is not null or empty, and then try the command again.", "stackTrace": [ "at Amazon.Lambda.PowerShellHost.PowerShellFunctionHost.ExecuteFunction(Stream inputStream, ILambdaContext context)", "at lambda_method1(Closure , Stream , ILambdaContext , Stream )", "at Amazon.Lambda.RuntimeSupport.Bootstrap.UserCodeLoader.Invoke(Stream lambdaData, ILambdaContext lambdaContext, Stream outputStream) in /src/Repo/Libraries/src/Amazon.Lambda.RuntimeSupport/Bootstrap/UserCodeLoader.cs:line 145", "at Amazon.Lambda.RuntimeSupport.HandlerWrapper.<>c__DisplayClass8_0.<GetHandlerWrapper>b__0(InvocationRequest invocation) in /src/Repo/Libraries/src/Amazon.Lambda.RuntimeSupport/Bootstrap/HandlerWrapper.cs:line 56", "at Amazon.Lambda.RuntimeSupport.LambdaBootstrap.InvokeOnceAsync(CancellationToken cancellationToken) in /src/Repo/Libraries/src/Amazon.Lambda.RuntimeSupport/Bootstrap/LambdaBootstrap.cs:line 176" ] }
目前Lambda函数名传入的问题仍未解决,代码已更新。
内容的提问来源于stack exchange,提问作者Maxamis4
相关产品推荐
相关产品推荐

