首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AWS Lambda检测不到pyopenssl

AWS Lambda检测不到pyopenssl
EN

Stack Overflow用户
提问于 2016-02-29 18:44:42
回答 1查看 3.4K关注 0票数 3

我有一个使用oauth2clientSignedJwtAssertionCredentials的AWS函数。

我已经在本地(在根目录下)安装了Lambda函数目录的需求。

requirements.txt

代码语言:javascript
复制
boto3==1.2.5
gspread==0.3.0
oauth2client==1.5.2
pyOpenSSL==0.15.1
pycrypto==2.6.1

我的lambda函数看起来如下:

代码语言:javascript
复制
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)

但是,在运行该程序时,我会得到以下堆栈跟踪:

代码语言:javascript
复制
{
    "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。

我遗漏了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-28 15:58:47

看起来这是个老问题,但如果你还在寻找答案的话:

这是因为pyopenssl的一个或多个依赖项是本机包或本机绑定(密码学是pyopenssl的依赖项,并且依赖于libssl),而不是为目标平台编译的。

不幸的是,对于如何获得编译版本,这个过程是不同的。最简单的方法(只有在平台中不同,而不是缺少.so库时才能起作用)是:

  1. 创建一个ec2主机(使用t2.microandAWSAMI映像)
  2. 安装python和virtualenv
  3. 创建虚拟env
  4. 安装目标库
  5. 拉上virtualenv /site-包和virtualenv/dist-包,并将它们从机器上移出。
  6. 丢弃机器图像

在上传之前,这个zip需要扩展到lambda zip中。结果将是所需的包驻留在您的zip文件的根目录(不是在站点包或dist-packages文件夹中)。

对于简单的依赖关系,如果您也需要本机库(例如Numpy或Scipy),则需要采取更详细的方法,如这里概述的方法:http://thankcoder.com/questions/jns3d/using-moviepy-scipy-and-numpy-in-amazon-lambda

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35707138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档