繁体   English   中英

AWS Lambda未检测到pyopenssl

[英]AWS Lambda not detecting pyopenssl

我有一个AWS Lambda函数,它使用oauth2clientSignedJwtAssertionCredentials

我已经在我的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。

有什么我想念的吗?

看起来这有点问题,但如果你还在寻找答案:

发生这种情况是因为pyopenssl的一个或多个依赖项是本机程序包,或者具有本机绑定(加密是pyopenssl的依赖项并且依赖于libssl),而不是为目标平台编译的。

不幸的是,这个过程因编译版本而异。 最简单的方法(只有在平台上有所不同,而不是缺少.so库)才能:

  1. 创建ec2主机(使用t2.micro和AWS AMI映像)
  2. 安装python和virtualenv
  3. 创建虚拟环境
  4. 安装目标库
  5. 拉上virtualenv virtualenv / site-packages和virtualenv / dist-packages并将它们从机器上移开
  6. 丢弃机器图像

然后,在上传之前,需要将此zip文件扩展为lambda zip。 结果将是驻留在zip文件根目录中的必需软件包(不在site-packages或dist-packages文件夹中)

对于简单的依赖项,如果您需要本机库(例如Numpy或Scipy),则需要采用更详细的方法,例如此处列出的方法: http//thankcoder.com/questions/jns3d/using- moviepy-SciPy的-和numpy的功能于亚马逊拉姆达

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM