2016-02-29 85 views
2

我有一個AWS Lambda函數,它使用oauth2clientSignedJwtAssertionCredentialsAWS Lambda未檢測到pyopenssl

我已經在我的Lambda函數目錄的本地(位於根目錄)安裝了我的需求。

requirements.txt

boto3==1.2.5 
gspread==0.3.0 
oauth2client==1.5.2 
pyOpenSSL==0.15.1 
pycrypto==2.6.1 

我的lambda表達式是這樣的:

import boto3 
import gspread 
from oauth2client.client import SignedJwtAssertionCredentials 

def lambda_handler(event, context): 
    dynamodb = boto3.resource('dynamodb') 
    scope = ['https://spreadsheets.google.com/feeds'] 

    private_key = "!--some-private-key" 
    google_email = "some-email" 
    credentials = SignedJwtAssertionCredentials(google_email, private_key, scope) 
    gc = gspread.authorize(credentials) 

但是,運行這個時候,我得到了下面的堆棧跟蹤:

{ 
    "stackTrace": [ 
     [ 
      "/var/task/lambda_function.py", 
      20, 
      "lambda_handler", 
      "credentials = SignedJwtAssertionCredentials(google_email, private_key, scope)" 
     ], 
     [ 
      "/var/task/oauth2client/util.py", 
      140, 
      "positional_wrapper", 
      "return wrapped(*args, **kwargs)" 
     ], 
     [ 
      "/var/task/oauth2client/client.py", 
      1630, 
      "__init__", 
      "_RequireCryptoOrDie()" 
     ], 
     [ 
      "/var/task/oauth2client/client.py", 
      1581, 
      "_RequireCryptoOrDie", 
      "raise CryptoUnavailableError('No crypto library available')" 
     ] 
    ], 
    "errorType": "CryptoUnavailableError", 
    "errorMessage": "No crypto library available" 
} 

從我在網上閱讀的所有內容,我被告知我需要進入停止pyopenssl。不過,我已經安裝了pycrypto。

有什麼我失蹤了嗎?

回答

2

看起來這是一個有點老問題,但如果你還在尋找一個答案:

這是因爲一個或多個依賴關係pyopenssl的是本機包或具有天然的綁定(密碼是pyopenssl的一個依賴項,並且依賴於libssl),該目錄不是針對目標平臺編譯的。

不幸的是,這個過程因如何獲得編譯版本而異。 (工作僅當它在平臺的不同,不會遺漏。所以庫)最簡單的方法是:

  1. 創建EC2主機(使用t2.micro和AWS AMI圖像)
  2. 安裝Python和的virtualenv
  3. 創建虛擬ENV
  4. 安裝你的目標庫
  5. 拉上了virtualenv中的virtualenv /站點包和的virtualenv/DIST-包和移動它們關閉機器
  6. 棄機圖像

然後在上傳之前需要將該zip文件擴展到您的lambda zip中。結果將是所需的軟件包駐留在您的zip文件的根目錄中(不在站點包或dist-packages文件夾中)

對於簡單的依賴關係,如果您還需要本地庫(例如Numpy或Scipy),您需要採取更詳盡的方法,例如這裏列出的方法:http://thankcoder.com/questions/jns3d/using-moviepy-scipy-and-numpy-in-amazon-lambda