2016-07-13 4 views
0

Я новичок в функции лямбда AWS, и я пытаюсь добавить свой существующий код в AWS лямбда. Мой существующий код выглядит следующим образом:Как написать функцию AWS лямбда?

import boto3 
import slack 
import slack.chat 
import time 
import itertools 
from slacker import Slacker 

ACCESS_KEY = "" 
SECRET_KEY = "" 
slack.api_token = "" 
slack_channel = "#my_test_channel" 

def gather_info_ansible(): 
      . 
      . 

def call_snapshot_creater(data): 
      . 
      . 
def call_snapshot_destroyer(data): 
      . 
      . 
if __name__ == '__main__': 
    print "Calling Ansible Box Gather detail Method first!" 
    ansible_box_info = gather_info_ansible() 

    print "Now Calling the Destroyer of SNAPSHOT!! BEHOLD THIS IS HELL!!" 
    call_snapshot_destroyer(ansible_box_info) 

    #mapping = {i[0]: [i[1], i[2]] for i in data} 
    print "Now Calling the Snapshot Creater!" 
    call_snapshot_creater(ansible_box_info) 

Теперь я пытаюсь создать функцию лямбда с нуля на AWS консоли следующим образом (а привет мир)

from __future__ import print_function 

import json 


print('Loading function') 


def lambda_handler(event, context): 
    #print("Received event: " + json.dumps(event, indent=2)) 
    print("value1 = " + event['key1']) 
    print("value2 = " + event['key2']) 
    print("value3 = " + event['key3']) 
    print("test") 
    return event['key1'] # Echo back the first key value 
    #raise Exception('Something went wrong') 

и испытуемый образец события на AWS консоли:

{ 
    "key3": "value3", 
    "key2": "value2", 
    "key1": "value1" 
} 

Я действительно не знаю, как поставить свой код в AWS лямбда сог, если я даже добавить модули в лямбда-консоль и запустить его он выдает мне ошибку:

Unable to import module 'lambda_function': No module named slack 

Как решить эту проблему и импортировать мой код в лямбда?

ответ

3

Вам необходимо сделать zipped-пакет, состоящий из вашего скрипта python, содержащего функцию лямбда и всех модулей, которые вы импортируете в скрипте python. Загрузите пакет zip на aws.

Независимо от того, какой модуль вы хотите импортировать, вы должны включить этот модуль в почтовый пакет. Только после этого будут выполняться инструкции импорта.

Например ваш почтовый пакет должен состоять из

test_package.zip 
|-test.py (script containing the lambda_handler function) 
|-boto3(module folder) 
|-slack(module folder) 
|-slacker(module folder) 
+0

что/как именно я буду ставить внутри лямбда-функции? я имею в виду, должен ли я просто вызвать другие методы изнутри lambda_handler? – Kittystone

+0

@ Юсуф, скажите, пожалуйста, какова должна быть структура моего test.py? Я имею в виду, что я вызываю другие методы изнутри функции lambda_handler?? – Kittystone

+0

Если вы хотите импортировать другие модули, вам необходимо загрузить пакет. Вы не сможете импортировать модули, создав лямбда-функцию с консоли. zip-пакет из 1. сценария python, содержащий функцию lambda handler, где вы будете импортировать все модули и 2. Все модули, которые вы импортируете в сценарии python. – MYGz

1

Вы получите сообщение об ошибке, потому что AWS лямбда не имеет никакой информации о модуле под названием слабина.

Модуль представляет собой набор файлов .py, которые хранятся где-то на компьютере. В случае лямбда вы должны импортировать все свои библиотеки, создав пакет развертывания.

Вот еще один вопрос, который описывает подобный случай и предоставляет несколько решений: AWS Lambda questions

+0

oh okay .. так что я должен extrat модулей из установленного каталога, а затем создать пакет развертывания в формате zip? также я не понимаю, что писать внутри лямбда-функции? – Kittystone

Смежные вопросы