Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 使用Lamda层在aws lambda中部署Pytidylib模块_Amazon Web Services_Aws Lambda_Aws Lambda Layers - Fatal编程技术网

Amazon web services 使用Lamda层在aws lambda中部署Pytidylib模块

Amazon web services 使用Lamda层在aws lambda中部署Pytidylib模块,amazon-web-services,aws-lambda,aws-lambda-layers,Amazon Web Services,Aws Lambda,Aws Lambda Layers,我正试图通过使用层将pytidylib python模块部署到AWS lambda函数中。 我已经创建了aws文档中描述的路径,并创建了新层。 现在pytidylib的代码需要一些来自/usr/lib的库,但是我已经在/python/lib/python3.7/site-packages/中安装了库,所以为了解决这个问题,我在aws linux服务器平台的environ-path中添加了路径,但问题仍然没有解决。 下面是我的代码:- def lambda_handler(event, conte

我正试图通过使用层将pytidylib python模块部署到AWS lambda函数中。 我已经创建了aws文档中描述的路径,并创建了新层。 现在pytidylib的代码需要一些来自/usr/lib的库,但是我已经在/python/lib/python3.7/site-packages/中安装了库,所以为了解决这个问题,我在aws linux服务器平台的environ-path中添加了路径,但问题仍然没有解决。 下面是我的代码:-

def lambda_handler(event, context):
"""Read  file from s3 on trigger."""
    s3 = boto3.client("s3")
    print(sys.platform)
    ld_library_path = os.environ["LD_LIBRARY_PATH"]
    print("old ld_library_path is ",ld_library_path)
    ld_library_path = ld_library_path + 
   ":/opt/python/lib/python3.7/site-packages/"
    os.environ["LD_LIBRARY_PATH"] = ld_library_path
    print("ld_library_path after set is 
    ",os.environ["LD_LIBRARY_PATH"])
  
ld_library_path after set is  /var/lang/lib:/lib64:/usr/lib64:/var/runtime:/var/runtime/lib:/var/task:/var/task/lib:/opt/lib:/opt/python/lib/python3.7/site-packages/
我想了解是否有任何方法可以通过代码中的一些更改来实现这一点,并使pytidylib模块在各个层中运行。 以下是错误:-

[ERROR] OSError: Could not load libtidy using any of these names: 
libtidy,libtidy.so,libtidy-0.99.so.0,cygtidy-0-99-0,tidylib,libtidy.dylib,tidy
Traceback (most recent call last):
File "/var/task/lambda_function.py", line 68, in lambda_handler
document, errors = tidy_document(doc)
File "/opt/python/lib/python3.7/site-packages/tidylib/tidy.py", line 222, in tidy_document
return get_module_tidy().tidy_document(text, options)
File "/opt/python/lib/python3.7/site-packages/tidylib/tidy.py", line 234, in get_module_tidy
_tidy = Tidy()
File "/opt/python/lib/python3.7/site-packages/tidylib/tidy.py", line 99, in __init__
+ ",".join(lib_names))

我试着复制你的问题,对我来说,Pytidylib层工作正常

这是我用来构建图层的方法,以防你想尝试一下。它涉及最近AWS博客中描述的一个docker工具:

我创建了
Pytidylib
层,如下所示:

  • 创建空文件夹,例如
    mylayer

  • 转到文件夹并创建包含以下内容的
    requirements.txt
    文件:

  • 运行以下docker命令(可以根据需要调整python版本):
  • 将图层创建为zip:
  • 基于AWS控制台中的
    pytidylayer.zip
    创建lambda层。别忘了将
    兼容运行时指定给
    python3.8

  • 将层添加到lambda并使用以下lambda函数进行测试:

  • 正确执行的功能:

    ['PersistentTidy', 'Tidy', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', 'release_tidy_doc', 'sink', 'tidy', 'tidy_document', 'tidy_fragment']
    

    我通过在linux服务器的LD_library_path环境变量中添加tidy库的path(libtiy.so.5.2.0)来解决这个问题


    For me library预先安装在ubuntu 18.04服务器的/usr/lib中。从该路径复制该库,将其放在tidylib文件夹中创建一个zip,然后按照lambda layers创建的步骤进行操作。

    我尝试了与您描述的相同的方法,但只要我通过“document,errors=tidy_document(doc)”实现了pytidylib它会中断并给出与上面相同的错误。@user190549我仅在加载时测试。没有任何文档可供测试。您知道如何在lambda的/usr/lib中添加这些库吗server@user190549您不能修改这些文件夹。唯一的替代方法是尝试不使用层,只需将
    Pytidylib
    与部署包捆绑在一起。但是如果它需要
    /usr/lib
    中的一些操作系统级软件包,您将无法在那里添加它们。好的,我将尝试使用部署软件包,谢谢帮助:)
    docker run -v "$PWD":/var/task "lambci/lambda:build-python3.8" /bin/sh -c "pip install -r requirements.txt -t python/lib/python3.8/site-packages/; exit"
    
    zip -r pytidylayer.zip python > /dev/null
    
    import json
    import  tidylib 
    
    def lambda_handler(event, context):
        
        print(dir(tidylib))
        
        return {
            'statusCode': 200,
            'body': json.dumps('Hello from Lambda!')
        }
    
    ['PersistentTidy', 'Tidy', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', 'release_tidy_doc', 'sink', 'tidy', 'tidy_document', 'tidy_fragment']