2016-02-18 41 views
0

我的lambda函数正在接收一个上下文。如何从Python AWS Lambda函数访问context.identity?

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' 

日志接收到函数名,并记录内存地址为context.identity。但context.cognito_identity_idcontext.identity.cognito_identity_pool_id报告为None

我如何获得cognito_identity_id填充?

从AWS API Gateway构建的类中的Xcode调试器我可以看到私有变量`_configuration._credentialsProvider._identityId设置正确。但是这个值并没有传递给我的AWS Lambda函数。

我无法找到如何获得通过。我读过这个page,我期望它被覆盖。

另外: 从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_idcognito_identity_id是实际存在的。

我认为AWS网关 - > AWS Lambda没有免费设置身份 - 我缺少一些配置 - 可能是映射模板。

+1

你通过AWS移动SDK调用lambda函数? –

+0

我正在使用API​​网关来调用Lambda函数。但它的名称应该没有区别。我只需要记录对象 – Carl

+0

该文档位于您链接的页面上:http://docs.aws.amazon.com/lambda/latest/dg/python-context-object.html标识“有关Amazon Cognito身份提供者的信息当通过AWS Mobile SDK调用时,它可以为空。“ –

回答

1

这就是我的进步。

删除GET方法 - 它不支持将Cognit身份传递到Lambda。

改为使用POST。 对于POST的集成请求,选择“使用调用者凭据调用”并创建一个映射模板。模板需要是模板内容的“应用程序/ json”{ "identity": "$input.params('identity')" }

有了这些补充,当调用lambda函数时,它的`context.identity'参数将填充调用者的认知标识符池的值和id 。

通过Python在你的lambda函数一定要与context.identity访问,而不是context[identity]

0

这是太长的评论...

您将需要查看API网关文档。我知道Cognito身份ID为None,如果你

(一)调用使用CLI与(access key id,secret key)作为凭证拉姆达,

(b)使用博托使用(access key id,secret key)凭据调用拉姆达,

(c)从AWS控制台调用lambda。

我使用Cognito凭据调用我的Lambda,并在我的上下文对象中获得非None身份标识。要设置Cognito凭据,您需要设置一个身份池,该身份池具有授权调用该功能的角色(简单设置:创建未授权角色并为其授予您的函数的lambda:invokeFunction权限)。

我可以提供Python或JavaScript代码来执行此操作,但它不会回答您的问题,因为您特别询问了有关API网关的调用。但如果你想让它知道。

+0

顺便说一句我看了一下API网关文档,它看起来像不知道如何与Cognito交谈,即Cognito身份不能放入HTTP标头或类似的东西。 API网关很可能用于公共和匿名接口。 –

+0

Thanks @Rohit Chatterjee。 context.identity是否有价值而cognito_identity_id是None? – Carl

+0

这是Python语法正确的'context.identity.cognito_identity_pool_id'吗? – Carl