2016-11-02 18 views
9

Tôi đã cố gắng triển khai một Lambda trong Serverless để chạy trên một lịch biểu Cron gọi nó mỗi giờ. Khi nó được gọi, tôi muốn sự kiện bên trong Lambda được điền bởi đầu vào JSON của riêng tôi thay vì thông tin từ sự kiện Cron là đầu vào mặc định khi nó được triển khai.Làm thế nào để chuyển dữ liệu đầu vào json cho Cron được lập lịch Cron được triển khai trong Serverless khi sử dụng sự kiện?

Bên trong bảng điều khiển AWS, tôi có thể tự chuyển sang trình kích hoạt Cron cho Lambda và thay đổi đầu vào từ "Sự kiện được khớp" thành "Độ dài (văn bản JSON)" để nhận kết quả mà tôi muốn. Vì Serverless tạo ra quy tắc này trong khi triển khai Lambda, tôi cảm thấy có một số cách để thay đổi đầu vào thông qua một cấu hình trong tệp serverless.yml. Tôi đã không thể tìm thấy bất cứ điều gì trong khi tìm kiếm thông qua các tài liệu cho Serverless, vì vậy bây giờ tôi tự hỏi nếu điều này là có thể thông qua Serverless ở trạng thái hiện tại của nó, và nếu như vậy làm thế nào để đi về nó.

Mọi lời khuyên sẽ được đánh giá cao.

Chỉnh sửa: Có bản cập nhật cần thêm chức năng này, tuy nhiên tôi vẫn chưa thể triển khai với lịch biểu bằng JSON sử dụng Serverless 1.3.0 (và cũng đã được thử nghiệm với 1.2.0). Một số ví dụ về các serverless.yml tôi sử dụng là dưới đây:

functions: 
    test: 
    handler: test.test 
    description: "test serverless Lambda" 
    memorySize: 128 
    timeout: 300 
    events: 
     - schedule: 
     rate: rate(10 minutes) 
     input: 
      key: value 
     - schedule: 
     rate: rate(10 minutes) 
     input: '{"key": "value"}' 
     - schedule: 
     rate: rate(10 minutes) 
     input: 
      key: 'value' 

ai có thể bình luận về trạng thái của tính năng này trong serverless như của 1.3.0, và có hoặc không serverless.yml của tôi ở trên có vẻ tốt đẹp ?

Chỉnh sửa 2: Đăng các serverless.yml làm việc

functions: 
    test: 
    handler: test.test 
    description: "test serverless Lambda" 
    memorySize: 128 
    timeout: 300 
    events: 
     - schedule: 
      rate: rate(10 minutes) 
      enabled: true 
      input: 
      key: value 
     - schedule: 
      rate: rate(10 minutes) 
      input: '{"key": "value"}' 
      enabled: true 
     - schedule: 
      rate: rate(10 minutes) 
      input: 
      key: 'value' 
      enabled: true 
+0

Tôi đã cập nhật câu trả lời của mình – Erndob

Trả lời

5

Edit để chỉnh sửa BẠN: Tôi đã làm một số đào, nó có vẻ như serverless sẽ tự động vô hiệu hóa lịch trình nếu nó không phải là một chuỗi. Có nghĩa là nếu toàn bộ sự kiện của bạn là - schedule: rate(10 minutes) thì sự kiện đó sẽ được bật. Nhưng nếu bạn có các thuộc tính khác, bạn phải kích hoạt nó bởi vì nó sẽ bị vô hiệu hóa theo mặc định.

Vì vậy .yml hiện tại của bạn sẽ trông như thế này:

functions: test: 
    handler: test.test 
    description: "test serverless Lambda" 
    memorySize: 128 
    timeout: 300 
    events: 
     - schedule: 
     rate: rate(10 minutes) 
     enabled: true 
     input: 
      key: value 
     - schedule: 
     rate: rate(10 minutes) 
     input: '{"key": "value"}' 
     enabled: true 
     - schedule: 
     rate: rate(10 minutes) 
     input: 
      key: 'value' 
     enabled: true 

Bạn có thể sử dụng cùng một inputinputPath trong tập tin serverless.yml của bạn giống như bạn sẽ làm gì với nguyên tắc sự kiện cloudwatch. Sự khác biệt duy nhất từ ​​các quy tắc cloudwath là bạn thực sự có thể vượt qua một đối tượng và không có máy chủ sẽ tự động chỉnh sửa nó cho bạn.

Ví dụ:

functions: 
    crawl: 
    handler: crawl 
    events: 
     - schedule: 
      rate: rate(1 hours) 
      input: 
      key1: value1 
      key2: value2 

này sẽ bằng quy tắc sự kiện cloudformation với input:"{'key1':'value1','key2':'value2'}" do đó đi qua json thay vì sự kiện phù hợp.

Được thông báo ngay bây giờ khi câu hỏi được hỏi vào ngày 2 tháng 11. Vào thời điểm đó nó không thể làm điều đó nhưng nó đã được thực hiện ngay sau khi câu hỏi được hỏi. https://github.com/serverless/serverless/pull/2567

+0

Cảm ơn bạn đã trả lời. Tôi đã thực sự theo kịp với PR này, nhưng vẫn chưa thể triển khai với JSON tôi có đầu vào. Tôi sẽ cập nhật câu hỏi và đăng một số ví dụ trong đó. – Raiju

+0

Tôi đã xem ví dụ đầu tiên mà bạn đã đăng một lần nữa và tôi nhận thấy rằng đó là indents là vấn đề. Ban đầu tôi đã sao chép định dạng từ PR mà không bao gồm các thụt lề khiến lịch biểu không xuất hiện chút nào. Mẹo để đặt bật thành đúng cũng rất hữu ích, cảm ơn bạn rất nhiều vì đã giúp đỡ! – Raiju

+0

bạn có thể vượt qua một mảng không? đầu vào: ['test1', 'test2'] – inside

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