2015-11-28 17 views
8

Tôi có chức năng này hoạt động như mong đợi trong python. Làm cách nào để chuyển đổi nó sang hàm AWS Lambda?chuyển đổi một hàm thành Lambda

def mymailgun(url):  
    import urllib2 
    myfile=urllib2.urlopen(url) 

    import requests 
    print requests.post("https://api.mailgun.net/v3/XXX.mailgun.org/messages", 
         auth=("api", "key-XXX"), 
         files=[("attachment", myfile) 
           #("attachment", open("files/test.txt")) 
           ], 
         data={"from": "Excited User <[email protected]>", 
           "to": "[email protected]", 
           "cc": "[email protected]", 
           "bcc": "[email protected]", 
           "subject": "Hello", 
           "text": "Testing some awesomness with attachments!", 
           "html": myfile}) 

Trả lời

1

Mã của bạn phải tuân theo Mô hình lập trình hàm lambda và có vẻ như bạn sẽ cần sửa đổi mã của mình để vừa. Mã Python của bạn phải xác định một trong các hàm của nó là trình xử lý. Này được thực hiện như sau:

def handler_name(event, context): 
    ... 
    return some_value 

Từ hướng dẫn chính thức:

sự kiện-AWS Lambda sử dụng tham số này để vượt qua trong dữ liệu sự kiện để xử lý . Tham số này thường là kiểu dict của Python. Nó có thể cũng là danh sách, str, int, float hoặc loại NoneType.

ngữ cảnh — AWS Lambda sử dụng thông số này để cung cấp thông tin thời gian chạy cho trình xử lý của bạn. Tham số này thuộc loại LambdaContext. Tùy chọn, trình xử lý có thể trả về một giá trị. Điều gì xảy ra các trở giá trị phụ thuộc vào loại gọi bạn sử dụng khi gọi chức năng Lambda :

Nếu bạn sử dụng các loại RequestResponse gọi (đồng bộ thực hiện), AWS Lambda trả về kết quả của hàm Python gọi để máy khách gọi hàm Lambda (trong phản hồi HTTP tới yêu cầu gọi, được tuần tự hóa thành JSON). Ví dụ, giao diện điều khiển AWS Lambda sử dụng loại yêu cầu RequestResponse, vì vậy khi bạn kiểm tra gọi hàm bằng bàn điều khiển, bảng điều khiển sẽ hiển thị giá trị trả về .

  • Nếu trình xử lý không trả về gì, AWS Lambda trả về giá trị rỗng.

  • Nếu bạn sử dụng loại gọi sự kiện (thực thi không đồng bộ), giá trị sẽ bị hủy.

Với những thay đổi được thực bước đầu tiên sẽ được đóng gói mã, cùng với bất kỳ phụ thuộc, vào một gói phần mềm triển khai. Để thực hiện việc này, bạn phải tạo một tệp số

.zip theo cách sau.

Trước tiên, tạo thư mục cho gói của bạn. Trong trường hợp này bạn có thể gọi nó là MailgunScript hoặc một cái gì đó tương tự. Lưu tất cả các tệp nguồn Python của bạn bên trong thư mục này ở cấp cơ sở.

Bạn có thể sử dụng lệnh pip cài đặt bất cứ thư viện cần thiết, giống như các yêu cầu và các thư viện urllib2, vào một thư mục lựa chọn của bạn:

pip install requests -t /absolutePathTo/MailgunScript 
pip install urllib2 -t /absolutePathTo/MailgunScript 

Cuối cùng, bạn phải tạo một kho lưu trữ .zip từ nội dung của thư mục này, không phải từ chính thư mục đó.

Bạn đã sẵn sàng chuyển gói triển khai của mình thành một hàm Lambda. Đăng nhập vào bảng điều khiển quản lý AWS của bạn và chọn Create a Lambda Function. Nếu được nhắc chọn một kế hoạch chi tiết, bạn có thể chọn mặc định hello-world kế hoạch chi tiết và tiến hành tải lên gói triển khai của bạn và điền vào phần còn lại của các trường theo yêu cầu.

Sau đó, bạn có thể kiểm tra chức năng này chỉ bằng cách quay lại bảng điều khiển quản lý AWS chính, chọn chức năng và bấm test. Ngoài ra, bạn có thể tự gọi hàm Lambda mới từ giao diện dòng lệnh với một lệnh như sau:

aws lambda invoke \ 
--region yourRegion \ 
--function-name yourFunctionName \ 
--payload '{"url"}' \ 
--invocation-type RequestResponse \ 
/tmp/response 

này sẽ thực hiện chức năng và đầu ra của bạn phản ứng với /tmp/response để kiểm tra.

+0

Chức năng thư của tôi có url là đầu vào. Làm thế nào để chuyển nó vào sự kiện? – shantanuo

+0

liên quan đến mã zip, tôi gặp sự cố với Linux zip fie và phải sao chép mã vào cửa sổ và sử dụng winzip. Nếu không, bạn sẽ tiếp tục nhận được lỗi là "không tìm thấy mô-đun" – BMW

2

Bạn cần đặt chức năng của mình theo cách hàm lambda. Như đã nói trên doumentation:

def handler_name(event, context): 
    return some_value 

kiện - AWS Lambda sử dụng tham số này để vượt qua trong dữ liệu sự kiện để xử lý. Tham số này thường là kiểu dict của Python. Nó cũng có thể là danh sách, str, int, float hoặc loại NoneType.

ngữ cảnh - AWS Lambda sử dụng thông số này để cung cấp thông tin thời gian chạy cho trình xử lý của bạn. Tham số này thuộc loại LambdaContext.

kiểm tra các mã như một hàm lambda:

  1. Lưu file
  2. trọn gói các tập tin và bất kỳ phụ thuộc vào một tập tin .zip More info
  3. Tải lên các tập tin .zip bằng cách sử dụng giao diện điều khiển hoặc AWS CLI để tạo một hàm Lambda. More info

Lệnh CLI để tạo ra các chức năng lambda:

aws lambda create-function \ 
--region us-west-2 \ 
--function-name HelloPython \ 
--zip-file fileb://deployment-package.zip \ 
--role arn:aws:iam::account-id:role/lambda_basic_execution \ 
--handler hello_python.my_handler \ 
--runtime python2.7 \ 
--timeout 15 \ 
--memory-size 512 

Để biết thêm thông tin với chức năng lambda: nhấp chuột herehere. :)

Các vấn đề liên quan