I have a python lambda which is just the sample hello_world which you can create using sam init
.
I have modified it slightly by adding sub-folder in the lambda folder.
So inside the hello_world lambda folder I have:
app.py # this is the lambda handler
requirements.txt
my_code_folder # I added this and I want to be able to import it and use it in the lambda. It contains a tonne of custom modules.
However when I run sam local invoke
I get:
[ERROR] Runtime.ImportModuleError: Unable to import module 'app': No module named 'hello_world'
If I take out the import it works fine.
Perhaps I have imported incorrectly in my lambda?
import hello_world.my_code_folder.MyModule as my_module
My SAM template has this:
Globals:
Function:
Timeout: 3
Resources:
HelloWorldFunction:
Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
Properties:
CodeUri: hello_world/
Handler: app.lambda_handler
Runtime: python3.8
Events:
HelloWorld:
Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
Properties:
Path: /hello
Method: get
Sample app created using sam init
command and added a custom module named hello
āÆāÆ cat hello_world/hello/hello_world.py
# custom module
def hello():
print("hello")
āÆāÆ cat hello_world/app.py
import json
import hello.hello_world as h
def lambda_handler(event, context):
...
h.hello()
return {
"statusCode": 200,
"body": json.dumps({
"message": "hello world",
# "location": ip.text.replace("\n", "")
directory structure
/tmp/foo/samapp via š v3.8.2 ((samapp))
āÆāÆ tree
.
..
āāā __init__.py
āāā events
āĀ Ā āāā event.json
āāā hello_world
āĀ Ā āāā __init__.py
āĀ Ā āāā app.py
āĀ Ā āāā hello. <--- my custom module
āĀ Ā āĀ Ā āāā hello_world.py
āĀ Ā āāā requirements.txt
āāā samconfig.toml
āāā template.yaml
Uploaded code
Logs