我可以在pytest中模拟事件来测试lambda_handler(event, context),但无法测试上下文并且仅使用aws_request_id语境。我正在尝试关注。
context = {
'aws_request_id': 'abcdef',
'log_stream_name': '1f73402ad',
'invoked_function_arn': 'arn:aws:lambda:region:1000:function:TestCFStackNam-TestLambdaFunctionResourceName-ABC-1234F',
'client_context': None,
'log_group_name': '/aws/lambda/TestCFStackName-TestLambdaFunctionResourceName-ABC-1234F',
'function_name': 'TestCloudFormationStackName-TestLambdaFunctionResourceName--ABC-1234F',
'function_version': '$LATEST',
'identity': '<__main__.CognitoIdentity object at 0x1fb81abc00>',
'memory_limit_in_mb': '128'
}
lambda_handler(event, context)
aws_request_id = context.aws_request_id
Error -
AttributeError: 'dict' object has no attribute 'aws_request_id'
最佳答案
AWS Lambda 上下文对象不是字典。 aws_request_id
不是字典键,它是上下文对象的属性。将模拟修改为字典会导致代码在作为实际 Lambda 函数运行时被破坏。解决此问题的正确方法是确保您的模拟对象是实际 Lambda 上下文对象的真实复制品。
您可以编写一个简单的类并在其上设置 aws_request_id
属性,如下所示:
class LambdaContext:
aws_request_id = 'abcdef'
# ...
context = LambdaContext()
aws_request_id = context.aws_request_id
关于python - 使用 pytest 设置的 Lambda 处理程序上下文 aws_request_id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56941436/