Skip to content

Instantly share code, notes, and snippets.

@kapilt
Last active June 6, 2018 06:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save kapilt/770bdf5d2a55b7385a9c to your computer and use it in GitHub Desktop.
Save kapilt/770bdf5d2a55b7385a9c to your computer and use it in GitHub Desktop.
Log output
The area below shows the logging calls in your code. These correspond to a single row within the CloudWatch log group corresponding to this Lambda function. Click here to view the CloudWatch log group.
START RequestId: 2644abca-b08d-11e5-a8cb-e1cccca020f0 Version: $LATEST
Unable to import module 'lambda_function': No module named lambda_function
END RequestId: 2644abca-b08d-11e5-a8cb-e1cccca020f0
REPORT RequestId: 2644abca-b08d-11e5-a8cb-e1cccca020f0 Duration: 72.41 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 8 MB
from __future__ import print_function
print("Loading Function")
def lambda_handler(event, context):
print("Got Here")
return 1
$ md5 lambda-2.zip
md5 lambda-2.zip
MD5 (lambda-2.zip) = f4da7d8e551e9214dc27ed9673d43ad4
$ unzip -lv lambda-2.zip
unzip -lv lambda-2.zip
Archive: lambda-2.zip
Length Method Size Ratio Date Time CRC-32 Name
-------- ------ ------- ----- ---- ---- ------ ----
138 Defl:N 112 19% 01-01-16 08:38 0a224fa9 lambda_function.py
-------- ------- --- -------
138 112 19% 1 file
zip -j lambda-2.zip f/lambda_function.py
aws lambda create-function \
--region us-east-1 \
--runtime python2.7 \
--role "arn:aws:iam::11221122111:role/lambda_basic_execution" \
--description "testing venv problems" \
--timeout 10 \
--memory-size 128 \
--handler lambda_function.lambda_handler \
--zip-file fileb://lambda-2.zip \
--function-name maid-dev-test-2
@philigan
Copy link

Did you figure out the Unable to import module 'lambda_function': No module named lambda_function thing? I'm having same issue and it's driving me nuts!

@stevegio
Copy link

Same here. Did you find a solution?

@mlapida
Copy link

mlapida commented Feb 1, 2016

From the docs:

Zip the directory content, not the directory.

Zipping the contents and not the directory itself worked like a charm for me.

@adamlamar
Copy link

What distribution are you using to build the zip file? I had this issue with the zip command in centos 6. Switched to Ubuntu without any trouble. And apparently I'm not the only one having problems uploading zip files to lambda.

@catalinciurea
Copy link

Make sure the file that you zip is world-wide readable before zipping it. (min chmod 444). I added chmod u=rwx,go=r before zipping and everything worked fine.

@sw360cab
Copy link

@mlapida Simple and straightforwad solution!

@Nononox
Copy link

Nononox commented May 12, 2017

@mlapida it worked

@krchandanvk
Copy link

not working my code
alexa lambda function-

import urllib2
import json

API_BASE="http://bartjsonapi.elasticbeanstalk.com/api"

def lambda_handler(event, context):
if (event["session"]["application"]["applicationId"] !=
"amzn1.echo-sdk-ams.app.bd304b90-xxxx-xxxx-xxxx-xxxxd4772bab"):
raise ValueError("Invalid Application ID")

if event["session"]["new"]:
    on_session_started({"requestId": event["request"]["requestId"]}, event["session"])

if event["request"]["type"] == "LaunchRequest":
    return on_launch(event["request"], event["session"])
elif event["request"]["type"] == "IntentRequest":
    return on_intent(event["request"], event["session"])
elif event["request"]["type"] == "SessionEndedRequest":
    return on_session_ended(event["request"], event["session"])

def on_session_started(session_started_request, session):
print("Starting new session.")

def on_launch(launch_request, session):
return get_welcome_response()

def on_intent(intent_request, session):
intent = intent_request["intent"]
intent_name = intent_request["intent"]["name"]

if intent_name == "GetStatus":
    return get_system_status()
elif intent_name == "GetElevators":
    return get_elevator_status()
elif intent_name == "GetTrainTimes":
    return get_train_times(intent)
elif intent_name == "AMAZON.HelpIntent":
    return get_welcome_response()
elif intent_name == "AMAZON.CancelIntent" or intent_name == "AMAZON.StopIntent":
    return handle_session_end_request()
else:
    raise ValueError("Invalid intent")

def on_session_ended(session_ended_request, session):
print("Ending session.")
# Cleanup goes here...

def handle_session_end_request():
card_title = "BART - Thanks"
speech_output = "Thank you for using the BART skill. See you next time!"
should_end_session = True

return build_response({}, build_speechlet_response(card_title, speech_output, None, should_end_session))

def get_welcome_response():
session_attributes = {}
card_title = "BART"
speech_output = "Welcome to the Alexa BART times skill. "
"You can ask me for train times from any station, or "
"ask me for system status or elevator status reports."
reprompt_text = "Please ask me for trains times from a station, "
"for example Fremont."
should_end_session = False
return build_response(session_attributes, build_speechlet_response(
card_title, speech_output, reprompt_text, should_end_session))

def get_system_status():
session_attributes = {}
card_title = "BART System Status"
reprompt_text = ""
should_end_session = False

response = urllib2.urlopen(API_BASE + "/status")
bart_system_status = json.load(response)   

speech_output = "There are currently " + bart_system_status["traincount"] + " trains operating. "

if len(bart_system_status["message"]) > 0:
    speech_output += bart_system_status["message"]
else:
    speech_output += "The trains are running normally."

return build_response(session_attributes, build_speechlet_response(
    card_title, speech_output, reprompt_text, should_end_session))

def get_elevator_status():
session_attributes = {}
card_title = "BART Elevator Status"
reprompt_text = ""
should_end_session = False

response = urllib2.urlopen(API_BASE + "/elevatorstatus")
bart_elevator_status = json.load(response) 

speech_output = "BART elevator status. " + bart_elevator_status["bsa"]["description"]

return build_response(session_attributes, build_speechlet_response(
    card_title, speech_output, reprompt_text, should_end_session))

def get_train_times(intent):
session_attributes = {}
card_title = "BART Departures"
speech_output = "I'm not sure which station you wanted train times for. "
"Please try again."
reprompt_text = "I'm not sure which station you wanted train times for. "
"Try asking about Fremont or Powell Street for example."
should_end_session = False

if "Station" in intent["slots"]:
    station_name = intent["slots"]["Station"]["value"]
    station_code = get_station_code(station_name.lower())

    if (station_code != "unkn"):
        card_title = "BART Departures from " + station_name.title()

        response = urllib2.urlopen(API_BASE + "/departures/" + station_code)
        station_departures = json.load(response)   

        speech_output = "Train departures from " + station_name + " are as follows: "
        for destination in station_departures["etd"]:
            speech_output += "Towards " + destination["destination"] + " on platform " + destination["estimate"][0]["platform"] + ". ";
            for estimate in destination["estimate"]:
                if estimate["minutes"] == "Leaving":
                    speech_output += "Leaving now: "
                elif estimate["minutes"] == "1":
                    speech_output += "In one minute: "
                else:
                    speech_output += "In " + estimate["minutes"] + " minutes: "

                speech_output += estimate["length"] + " car train. "

        reprompt_text = ""

return build_response(session_attributes, build_speechlet_response(
    card_title, speech_output, reprompt_text, should_end_session))

def get_station_code(station_name):
return {
"12th street oakland city center": "12th",
"16th street mission": "16th",
"19th street oakland": "19th",
"24th street mission": "24th",
"ashby": "ashb",
"balboa park": "balb",
"bay fair": "bayf",
"castro valley": "cast",
"civic center": "civc",
"coliseum": "cols",
"colma": "colm",
"concord": "conc",
"daly city": "daly",
"downtown berkeley": "dbrk",
"dublin pleasanton": "dubl",
"el cerrito del norte": "deln",
"del norte": "deln",
"el cerrito plaza": "plza",
"embarcadero": "embr",
"fremont": "frmt",
"fruitvale": "ftvl",
"glen park": "glen",
"hayward": "hayw",
"lafayette": "lafy",
"lake merritt": "lake",
"macarthur": "mcar",
"millbrae": "mlbr",
"montgomery street": "mont",
"north berkeley": "nbrk",
"north concord martinez": "ncon",
"oakland airport": "oakl",
"orinda": "orin",
"pittsburg bay point": "pitt",
"pleasant hill": "phil",
"powell street": "powl",
"richmond": "rich",
"rockridge": "rock",
"san bruno": "sbrn",
"san francisco airport": "sfia",
"san leandro": "sanl",
"south hayward": "shay",
"south san francisco": "ssan",
"union city": "ucty",
"walnut creek": "wcrk",
"west dublin pleasanton": "wdub",
"west oakland": "woak",
}.get(station_name, "unkn")

def build_speechlet_response(title, output, reprompt_text, should_end_session):
return {
"outputSpeech": {
"type": "PlainText",
"text": output
},
"card": {
"type": "Simple",
"title": title,
"content": output
},
"reprompt": {
"outputSpeech": {
"type": "PlainText",
"text": reprompt_text
}
},
"shouldEndSession": should_end_session
}

def build_response(session_attributes, speechlet_response):
return {
"version": "1.0",
"sessionAttributes": session_attributes,
"response": speechlet_response
}

@krchandanvk
Copy link

error- Unable to import module 'lambda': No module named 'urllib2'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment