【问题标题】:AWS lambda cannot import name '_bcrypt'AWS lambda 无法导入名称“_bcrypt”
【发布时间】:2018-01-01 06:42:37
【问题描述】:

我编写了一个简单的 python 脚本,它将通过 ssh 连接到 EC2 实例并在该实例中运行脚本。

我使用 paramiko 库进行 ssh 连接。下面是我的代码 sn-p。

def lambda_handler(event, context):
    client = boto3.client('ec2')
    s3_client = boto3.client('s3')
    # Download private key file from secure S3 bucket
    s3_client.download_file('test','test.pem', '/tmp/test.pem')
    k = paramiko.RSAKey.from_private_key_file("/tmp/test.pem")
    c = paramiko.SSHClient()
    c.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    bastion_host = "xxx.com"
    print ("Connecting to " + bastion_host)
    c.connect(hostname=bastion_host, username="yyy", key_filename="/tmp/test.pem")
    print ("Connected to " + bastion_host)
    commands = [

        "sh /home/ec2-user/TestDeploy.sh"
    ]
    for command in commands:
        print ("Executing {}".format(command))
        stdin, stdout, stderr = c.exec_command(command)
        print (stdout.read())
        print (stderr.read())
return 'Hello from Lambda'

在我的本地设置中,python 版本为 3.6.2,它工作正常。但是当我将它与 AWS lambda 中的所有依赖库一起上传并运行时,它给了我以下错误。

cannot import name '_bcrypt'

我已确认我在上传的 zip 中有 bcrypt 文件夹。

【问题讨论】:

    标签: python-3.x amazon-ec2 ssh aws-lambda paramiko


    【解决方案1】:

    我猜您的本地 PC 不是 linux PC。

    您需要在 linux PC 上构建您的部署包。 Lambda 底层运行 AMI 镜像,基于 linux。

    我已经在自己的博客 here 上记录了这一点

    【讨论】:

    • 问题的答案可能只是“您需要在 linux PC 上构建部署包”。我添加的其他所有内容都不仅仅是一条线。要我删除链接吗?
    • 这个问题很大程度上是关于 python 的,因为它是关于 AWS lambda 的。从 OPs 的问题来看,他似乎对两者都很熟悉,他只是错过了一个微小但关键的细节。该链接更像是第一次尝试将 python 代码部署到 AWS lambda 的指南。对于这个问题,我觉得任何充实它的尝试只会掩盖“直接/实际”的答案。
    • 所以,我被罚了2分。最好不要回答,是吗?
    • 所以,总而言之,我不应该期望从这一切中获得任何意义。之所以会发现一个问题缺少关于 SO 的答案,花 3 个小时解决它,然后将答案发布回来……当然不是为了受到惩罚。您过分热衷于强制执行“结构”而不是正确性,决定对您没有技术或上下文理解的问题的答案采取行动(标记),这在很大程度上是罪魁祸首。您所要做的就是先提出要求,然后再采取行动。
    • 谢谢大约。我确实使用 python 3.6 在 linux 中构建了我的包。但它仍然失败了。当我用 2.7 构建它并在 lambda 2.7 上运行它时,它运行良好。
    猜你喜欢
    • 2019-12-03
    • 2020-03-30
    • 2019-12-11
    • 2018-03-22
    • 2018-06-08
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2021-01-09
    相关资源
    最近更新 更多