简体   繁体   中英

AWS Lambda Layers - module 'dicttoxml' has no attribute 'dicttoxml'

I have a AWS Lambda function based on python 3.7 and trying to use a module dicttoxml via AWS layers. My Python code is as below:

import json
import dicttoxml
def lambda_handler(event, context):
    xml = dicttoxml.dicttoxml({"name": "Foo"})
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

At my local machine, it works perfectly fine but Lambda gives error as below:

{
  "errorMessage": "module 'dicttoxml' has no attribute 'dicttoxml'",
  "errorType": "AttributeError",
  "stackTrace": [
    "  File \"/var/task/lambda_function.py\", line 4, in lambda_handler\n    xml = dicttoxml.dicttoxml({\"name\": \"Ankur\"})\n"
  ]
}

The directory structure of dicttoxml layer is as below:

dicttoxml.zip > python > dicttoxml > dicttoxml.py

I feel puzzled, what is wrong here?

I created the custom layer with dicttoxml can confirm that it works .

The technique used includes docker tool described in the recent AWS blog :

Thus for this question, I verified it as follows:

  1. Create empty folder, eg mylayer .

  2. Go to the folder and create requirements.txt file with the content of

echo dicttoxml > ./requirements.txt
  1. Run the following docker command:
docker run -v "$PWD":/var/task "lambci/lambda:build-python3.7" /bin/sh -c "pip install -r requirements.txt -t python/lib/python3.7/site-packages/; exit"
  1. Create layer as zip:
zip -9 -r mylayer.zip python 
  1. Create lambda layer based on mylayer.zip in the AWS Console. Don't forget to specify Compatible runtimes to python3.7 .

  2. Test the layer in lambda using the following lambda function:

import dicttoxml

def lambda_handler(event, context):
    
    print(dir(dicttoxml))

The function executes correctly:

['LOG', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '__version__', 'collections', 'convert', 'convert_bool', 'convert_dict', 'convert_kv', 'convert_list', 'convert_none', 'default_item_func', 'dicttoxml', 'escape_xml', 'get_unique_id', 'get_xml_type', 'ids', 'key_is_valid_xml', 'logging', 'long', 'make_attrstring', 'make_id', 'make_valid_xml_name', 'numbers', 'parseString', 'randint', 'set_debug', 'unicode', 'unicode_literals', 'unicode_me', 'version', 'wrap_cdata']

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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