![](/img/trans.png)
[英]Access json request from python in python AWS lambda function
[英]How to access context.identity from a Python AWS Lambda function?
我的lambda函数正在接收上下文。
def lambda_handler(event, context):
logger.info(context.function_name)
logger.info(context.identity)
logger.info(context.cognito_identity_id)
logger.info(context.identity.cognito_identity_id)
return 'hello world'
日志接收function_name,并记录context.identity
的内存地址。 但是context.cognito_identity_id
和context.identity.cognito_identity_pool_id
报告为None
。
如何填充cognito_identity_id
?
从AWS API Gateway构建的类中的Xcode调试器,我可以看到私有变量`_configuration._credentialsProvider._identityId设置正确。 但是此值并未通过我的AWS Lambda函数传递。
我找不到如何通过。 我已经阅读了本页面 ,希望可以覆盖该页面 。
进一步:从Lambda函数中,我注销了dir(context.identity)
并给出了['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__slots__', '__str__', '__subclasshook__', 'cognito_identity_id', 'cognito_identity_pool_id']
这表明cognito_identity_id
和cognito_identity_id
实际上存在。
我认为AWS Gateway-> AWS Lambda无法免费设置身份-我缺少一些配置-也许是映射模板。
评论太久了...
您将需要查看API Gateway文档。 我知道,如果您知道Cognito身份ID为“ None
,
(a)使用带有(access key id,secret key)
作为凭据的CLI调用lambda,
(b)使用(access key id,secret key)
凭据使用boto调用lambda,
(c)从AWS控制台调用lambda。
我使用Cognito凭据调用Lambda,并且在上下文对象中获得非None
身份ID。 要设置Cognito凭据,您需要使用一个有权调用该函数的角色来设置身份池(简单设置:创建一个未经授权的角色,并为您的函数授予lambda:invokeFunction权限)。
我可以提供Python或JavaScript代码来执行此操作,尽管它不能回答您的问题,因为您专门询问了从API网关的调用。 但是,如果您想让我知道。
这就是我取得进步的方式。
删除GET方法-它不支持通过Cognito身份传递给Lambda。
请改用POST。 对于POST的集成请求,选择“使用呼叫者凭据调用”并创建一个映射模板。 模板必须为“ application / json”,其模板内容为{ "identity": "$input.params('identity')" }
有了这些添加,当调用lambda函数时,将使用调用者的认知标识符池和id的值填充其`context.identity'参数。
确保从Lambda函数中的Python中访问context.identity
而不是context[identity]
所以从事件
UserPoolId = event['identity']['claims']['iss'].rsplit('/', 1)[-1]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.