python - 使用 pytest 设置的 Lambda 处理程序上下文 aws_request_id

标签 python amazon-web-services aws-lambda pytest boto3

我可以在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/

相关文章:

python - 将 RDD 转换为可迭代的 : PySpark?

ios - 如何让 Alexa 在我的 iOS 应用程序上运行?

amazon-web-services - 软件包Amazon.Lambda.Tools 3.0.1与netcoreapp2.1(.NETCoreApp,Version = v2.1)不兼容。

python - xcopy python 部署

python - 如何从 python (2.5) 中的 subprocess.Popen 获取 'real-time' 信息

amazon-web-services - 如何使用 cloudformation 模板将 Fargate 集群服务与任务定义集成/链接

amazon-web-services - 通过单个 CloudFront 分配支持 HTTPS URL 重定向

Python lambda 函数检查我的 S3 存储桶是否公开并将它们设为私有(private)

python - 如何在 flask 中建立一个获取表单的帖子

.htaccess - AWS EC2 ubuntu 服务器权限问题