2016-02-18 79 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