Yêu cầu txt python aws lambda

AWS Lambda hiện là một trong những tài nguyên được sử dụng nhiều nhất cho cái gọi là Ứng dụng không có máy chủ. Tính linh hoạt được trừu tượng hóa từ công cụ này không thể bị lạm dụng với lý do như - "nó không chứa lib X hoặc Y trong môi trường của nó. "

Trong bài đăng này, mục tiêu của tôi là chia sẻ một mẹo hữu ích đi kèm với Hàm Lambda. các lớp được xây dựng của riêng bạn

Một Layer cho phép bạn triển khai. zip chứa bất kỳ loại phụ thuộc nào cần cho hàm, chẳng hạn như thư viện mã hoặc thời gian chạy tùy chỉnh. Trong phần tiếp theo, tôi sẽ trình bày cách

  1. Cài đặt các thư viện Python trên một thư mục cụ thể và nén nó đúng cách
  2. Đặt tệp zip này ở định dạng lớp
  3. Nhập Lớp tùy chỉnh của bạn từ bất kỳ chức năng lambda nào

xây dựng của bạn. tập tin nén

Tôi sẽ sử dụng Rice n' Beans từ thế giới Pythonic làm thư viện ví dụ, gấu trúc và NumPy. Bước này sẽ rất đơn giản khi bạn có thể thực hiện ở bất cứ đâu bạn muốn

Trong các dòng mã sau, chúng tôi đang cài đặt tất cả các gói được đặt trên một. txt nằm trên cùng thư mục nơi lệnh sẽ được thực thi [các yêu cầu cũ tốt. txt]

1. Cài đặt nó

$ python3 -m pip cài đặt -r yêu cầu. txt -t. /trăn

Các [. ] trước các câu lệnh này đang cho phép lệnh này chạy trên Máy tính xách tay Jupyter

Lệnh [-t] đặt đường dẫn đích mà bạn muốn các gói được cài đặt tại -Trong trường hợp này, trên một thư mục có tên python

Yêu cầu?

Bố cục tệp này về cơ bản chứa tên của từng thư viện. Bạn có thể chỉ định phiên bản từ nó, nhưng tên là thuộc tính bắt buộc duy nhất [tất nhiên]

[tên lib]==[phiên bản lib]

[Trong trường hợp bạn không chỉ định phiên bản phụ thuộc, phiên bản mới nhất hiện có sẽ là phiên bản được cài đặt]

Tôi có cần phải tự viết tất cả các tên gói này không?

Nếu bạn muốn cài đặt tất cả các phụ thuộc thư viện hiện có trong môi trường hiện tại của mình, bạn có thể chạy câu lệnh sau và tạo một. txt một cách nhanh chóng,

$ pip đóng băng > yêu cầu. txt

từ chối trách nhiệm. Đây là một mẹo hay trong trường hợp bạn muốn có một cách dễ dàng để ghi lại các lib mà bạn đã cài đặt, nhưng lý tưởng nhất là bạn không nên nhập toàn bộ phần phụ thuộc của mình vào một lớp duy nhất. Nó không có nhiều ý nghĩa

2. Zip nó

Dòng sau đây sẽ nén thư mục libs tích hợp gần đây của bạn sau khi định dạng nén là cần thiết để thực hiện quy trình nhập lớp

$ zip -r python_layer. khóa kéo. /trăn/

Xem ra cho kích thước của tập tin của bạn

Tổng kích thước của hàm lambda VÀ tất cả các tệp lớp đã giải nén đang được sử dụng phải tuân theo giới hạn 250 MB. Và đó là một trong nhiều lý do bạn không muốn sử dụng điều đóng băng trong những trường hợp này

3. nhập nó

Mát mẻ. Tại thời điểm này, bạn có một python_layer. zip trên máy cục bộ của bạn. Bây giờ, hãy đặt lớp này thành một lớp thực trên Tài khoản AWS của chúng ta [Nếu tôi chưa đề cập đến nó trước đây, sẽ rất hữu ích nếu bạn có một trong số đó]

Hàm AWS Lambda

Đi tới nút Tạo lớp để đạt được các tùy chọn cấu hình sau

Tên là cách bạn sẽ đặt tên cho lớp này;

Một điều thực sự hữu ích mà tôi nghĩ đáng đề cập ở đây là bạn. zip có thể được tải lên dưới dạng tệp cục bộ hoặc từ đường dẫn Bộ chứa S3. Nếu kích thước tệp của bạn lớn hơn 10MB, bạn có thể không có quyền chọn tùy chọn này

Thời gian chạy, Python, Python, Python. Và thế là xong. Bây giờ bạn chỉ cần thêm lớp này vào bất kỳ chức năng lambda nào bạn chọn và bạn sẽ có thể sử dụng các thư viện này trong quá trình thực thi mã của mình

Thêm tùy chọn lớp

Trước khi bạn đi…

Trong trường hợp cần cập nhật nội dung lớp trong tương lai, bạn không cần phải xóa tệp gốc của mình để cập nhật này. Có thể thêm nhiều phiên bản của các lớp…trong các lớp. Vì vậy, bạn luôn có thể quay lại phiên bản trước trong trường hợp xảy ra sự cố

Amazon Lambda là một dịch vụ tuyệt vời cho phép bạn chạy mã không cần máy chủ. thay vì giữ cho máy chủ chạy để thực thi mã của bạn bất cứ lúc nào, máy chủ chỉ được khởi động khi cần thiết để đáp ứng với một số sự kiện. Sự kiện này có thể là từ một yêu cầu HTTP, một thông báo được đăng lên một dịch vụ xếp hàng như Amazon SQS hoặc ngay cả khi một tệp được tải lên bộ chứa S3

Lambda cung cấp các thời gian chạy khác nhau tùy thuộc vào ngôn ngữ bạn muốn viết hàm của mình. Đối với lập trình Python, thời gian chạy này bao gồm thư viện chuẩn Python, nhưng nếu bạn muốn sử dụng các gói bên ngoài từ PyPI hoặc nơi khác thì sao? . Các lớp cung cấp các phần phụ thuộc [hoặc thậm chí là thời gian chạy tùy chỉnh] cho chức năng của bạn và trong hướng dẫn nhanh này, chúng tôi sẽ hướng dẫn cách sử dụng chúng

Những gì bạn cần

  • Một tài khoản AWS và một chút kinh nghiệm sử dụng hàm Lambda. Nếu bạn chưa từng sử dụng chúng trước đây, Amazon có những hướng dẫn tuyệt vời
  • Docker được cài đặt trên máy tính của bạn, vì chúng tôi sẽ sử dụng nó để cài đặt các phần phụ thuộc trong một môi trường tương tự như thời gian chạy AWS Lambda Python

Dự án demo của chúng tôi sẽ là một hàm Lambda rất đơn giản, truy cập vào điểm cuối

import json
import requests

def lambda_handler[event, context]:
    # Make sure a Pokemon name [or ID] was passed in the event object:
    pokemon = event.get['pokemon']
    if pokemon is None:
        return {
            'statusCode': 400,
            'body': json.dumps['Missing pokemon attribute in the event object']
        }

    # If we have a pokemon name/ID passed in, try to get info for it:
    r = requests.get[f"//pokeapi.co/api/v2/pokemon/{pokemon}"]

    if r.status_code == 200:
        status_code = 200
        body = json.dumps[r.json[]]
    else:
        status_code = r.status_code
        body = json.dumps[f"Could not load information for Pokemon {pokemon}"]

    # Return what we got from the API:
    return {
        'statusCode': status_code,
        'body': body
    }
7 của PokéAPI để trả về thông tin về Pokémon, được đặt tên trong trường hợp kích hoạt hàm

Thiết lập dự án của chúng tôi tại địa phương

Trước tiên, chúng tôi sẽ tạo một môi trường ảo cho dự án của chúng tôi và làm việc trong đó, để tách biệt mọi phần phụ thuộc của dự án với những phần khác trên máy tính của bạn

$ mkdir poke-lambda 
$ cd poke-lambda
$ python -m venv venv
$ source venv/bin/activate

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Chúng tôi đang sử dụng thư viện yêu cầu để thực hiện lệnh gọi API của mình, vì vậy hãy cài đặt thư viện đó với

import json
import requests

def lambda_handler[event, context]:
    # Make sure a Pokemon name [or ID] was passed in the event object:
    pokemon = event.get['pokemon']
    if pokemon is None:
        return {
            'statusCode': 400,
            'body': json.dumps['Missing pokemon attribute in the event object']
        }

    # If we have a pokemon name/ID passed in, try to get info for it:
    r = requests.get[f"//pokeapi.co/api/v2/pokemon/{pokemon}"]

    if r.status_code == 200:
        status_code = 200
        body = json.dumps[r.json[]]
    else:
        status_code = r.status_code
        body = json.dumps[f"Could not load information for Pokemon {pokemon}"]

    # Return what we got from the API:
    return {
        'statusCode': status_code,
        'body': body
    }
8. Một tệp của chúng tôi,
import json
import requests

def lambda_handler[event, context]:
    # Make sure a Pokemon name [or ID] was passed in the event object:
    pokemon = event.get['pokemon']
    if pokemon is None:
        return {
            'statusCode': 400,
            'body': json.dumps['Missing pokemon attribute in the event object']
        }

    # If we have a pokemon name/ID passed in, try to get info for it:
    r = requests.get[f"//pokeapi.co/api/v2/pokemon/{pokemon}"]

    if r.status_code == 200:
        status_code = 200
        body = json.dumps[r.json[]]
    else:
        status_code = r.status_code
        body = json.dumps[f"Could not load information for Pokemon {pokemon}"]

    # Return what we got from the API:
    return {
        'statusCode': status_code,
        'body': body
    }
9 trông như thế này

import json
import requests

def lambda_handler[event, context]:
    # Make sure a Pokemon name [or ID] was passed in the event object:
    pokemon = event.get['pokemon']
    if pokemon is None:
        return {
            'statusCode': 400,
            'body': json.dumps['Missing pokemon attribute in the event object']
        }

    # If we have a pokemon name/ID passed in, try to get info for it:
    r = requests.get[f"//pokeapi.co/api/v2/pokemon/{pokemon}"]

    if r.status_code == 200:
        status_code = 200
        body = json.dumps[r.json[]]
    else:
        status_code = r.status_code
        body = json.dumps[f"Could not load information for Pokemon {pokemon}"]

    # Return what we got from the API:
    return {
        'statusCode': status_code,
        'body': body
    }

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Công việc của mã này là kiểm tra thuộc tính

poke-lambda
|   lambda_function.py
└───venv
0 trong dữ liệu
import json
import requests

def lambda_handler[event, context]:
    # Make sure a Pokemon name [or ID] was passed in the event object:
    pokemon = event.get['pokemon']
    if pokemon is None:
        return {
            'statusCode': 400,
            'body': json.dumps['Missing pokemon attribute in the event object']
        }

    # If we have a pokemon name/ID passed in, try to get info for it:
    r = requests.get[f"//pokeapi.co/api/v2/pokemon/{pokemon}"]

    if r.status_code == 200:
        status_code = 200
        body = json.dumps[r.json[]]
    else:
        status_code = r.status_code
        body = json.dumps[f"Could not load information for Pokemon {pokemon}"]

    # Return what we got from the API:
    return {
        'statusCode': status_code,
        'body': body
    }
0 mà hàm Lambda nhận được, truy vấn PokéAPI để biết thông tin về Pokémon được truyền vào và trả lại phản hồi của API [với cách xử lý lỗi cơ bản]. Tại thời điểm này, cấu trúc dự án của chúng tôi trông như thế này

poke-lambda
|   lambda_function.py
└───venv

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Xây dựng lớp Lambda của chúng tôi

Để đưa mã này lên AWS Lambda, trước tiên chúng tôi cần một cách để đưa thư viện

import json
import requests

def lambda_handler[event, context]:
    # Make sure a Pokemon name [or ID] was passed in the event object:
    pokemon = event.get['pokemon']
    if pokemon is None:
        return {
            'statusCode': 400,
            'body': json.dumps['Missing pokemon attribute in the event object']
        }

    # If we have a pokemon name/ID passed in, try to get info for it:
    r = requests.get[f"//pokeapi.co/api/v2/pokemon/{pokemon}"]

    if r.status_code == 200:
        status_code = 200
        body = json.dumps[r.json[]]
    else:
        status_code = r.status_code
        body = json.dumps[f"Could not load information for Pokemon {pokemon}"]

    # Return what we got from the API:
    return {
        'statusCode': status_code,
        'body': body
    }
1 vào. Các lớp lambda là. zip chứa thư viện [và thời gian chạy tùy chỉnh nếu bạn cần] chức năng của bạn yêu cầu. Đối với các lớp lambda Python, AWS yêu cầu các thư viện phải được đặt trong thư mục
import json
import requests

def lambda_handler[event, context]:
    # Make sure a Pokemon name [or ID] was passed in the event object:
    pokemon = event.get['pokemon']
    if pokemon is None:
        return {
            'statusCode': 400,
            'body': json.dumps['Missing pokemon attribute in the event object']
        }

    # If we have a pokemon name/ID passed in, try to get info for it:
    r = requests.get[f"//pokeapi.co/api/v2/pokemon/{pokemon}"]

    if r.status_code == 200:
        status_code = 200
        body = json.dumps[r.json[]]
    else:
        status_code = r.status_code
        body = json.dumps[f"Could not load information for Pokemon {pokemon}"]

    # Return what we got from the API:
    return {
        'statusCode': status_code,
        'body': body
    }
2 hoặc
import json
import requests

def lambda_handler[event, context]:
    # Make sure a Pokemon name [or ID] was passed in the event object:
    pokemon = event.get['pokemon']
    if pokemon is None:
        return {
            'statusCode': 400,
            'body': json.dumps['Missing pokemon attribute in the event object']
        }

    # If we have a pokemon name/ID passed in, try to get info for it:
    r = requests.get[f"//pokeapi.co/api/v2/pokemon/{pokemon}"]

    if r.status_code == 200:
        status_code = 200
        body = json.dumps[r.json[]]
    else:
        status_code = r.status_code
        body = json.dumps[f"Could not load information for Pokemon {pokemon}"]

    # Return what we got from the API:
    return {
        'statusCode': status_code,
        'body': body
    }
3

  1. Trong khi môi trường ảo được kích hoạt cho dự án của bạn, hãy lưu danh sách các phần phụ thuộc của nó vào tệp

    import json
    import requests
    
    def lambda_handler[event, context]:
        # Make sure a Pokemon name [or ID] was passed in the event object:
        pokemon = event.get['pokemon']
        if pokemon is None:
            return {
                'statusCode': 400,
                'body': json.dumps['Missing pokemon attribute in the event object']
            }
    
        # If we have a pokemon name/ID passed in, try to get info for it:
        r = requests.get[f"//pokeapi.co/api/v2/pokemon/{pokemon}"]
    
        if r.status_code == 200:
            status_code = 200
            body = json.dumps[r.json[]]
        else:
            status_code = r.status_code
            body = json.dumps[f"Could not load information for Pokemon {pokemon}"]
    
        # Return what we got from the API:
        return {
            'statusCode': status_code,
            'body': body
        }
    
    4.
    import json
    import requests
    
    def lambda_handler[event, context]:
        # Make sure a Pokemon name [or ID] was passed in the event object:
        pokemon = event.get['pokemon']
        if pokemon is None:
            return {
                'statusCode': 400,
                'body': json.dumps['Missing pokemon attribute in the event object']
            }
    
        # If we have a pokemon name/ID passed in, try to get info for it:
        r = requests.get[f"//pokeapi.co/api/v2/pokemon/{pokemon}"]
    
        if r.status_code == 200:
            status_code = 200
            body = json.dumps[r.json[]]
        else:
            status_code = r.status_code
            body = json.dumps[f"Could not load information for Pokemon {pokemon}"]
    
        # Return what we got from the API:
        return {
            'statusCode': status_code,
            'body': body
        }
    
    5

  2. Tạo một thư mục

    import json
    import requests
    
    def lambda_handler[event, context]:
        # Make sure a Pokemon name [or ID] was passed in the event object:
        pokemon = event.get['pokemon']
        if pokemon is None:
            return {
                'statusCode': 400,
                'body': json.dumps['Missing pokemon attribute in the event object']
            }
    
        # If we have a pokemon name/ID passed in, try to get info for it:
        r = requests.get[f"//pokeapi.co/api/v2/pokemon/{pokemon}"]
    
        if r.status_code == 200:
            status_code = 200
            body = json.dumps[r.json[]]
        else:
            status_code = r.status_code
            body = json.dumps[f"Could not load information for Pokemon {pokemon}"]
    
        # Return what we got from the API:
        return {
            'statusCode': status_code,
            'body': body
        }
    
    2. Điều này sẽ chứa tất cả các thư viện trong lớp của chúng tôi. Tại thời điểm này, cấu trúc thư mục của bạn sẽ là

    import json
    import requests
    
    def lambda_handler[event, context]:
        # Make sure a Pokemon name [or ID] was passed in the event object:
        pokemon = event.get['pokemon']
        if pokemon is None:
            return {
                'statusCode': 400,
                'body': json.dumps['Missing pokemon attribute in the event object']
            }
    
        # If we have a pokemon name/ID passed in, try to get info for it:
        r = requests.get[f"//pokeapi.co/api/v2/pokemon/{pokemon}"]
    
        if r.status_code == 200:
            status_code = 200
            body = json.dumps[r.json[]]
        else:
            status_code = r.status_code
            body = json.dumps[f"Could not load information for Pokemon {pokemon}"]
    
        # Return what we got from the API:
        return {
            'statusCode': status_code,
            'body': body
        }
    
    0
  3. Từ thư mục gốc của dự án, hãy chạy lệnh sau để xây dựng các phần phụ thuộc của bạn trong một vùng chứa tương tự như môi trường thực thi Lambda mà Amazon cung cấp [do lambci cung cấp]

    import json
    import requests
    
    def lambda_handler[event, context]:
        # Make sure a Pokemon name [or ID] was passed in the event object:
        pokemon = event.get['pokemon']
        if pokemon is None:
            return {
                'statusCode': 400,
                'body': json.dumps['Missing pokemon attribute in the event object']
            }
    
        # If we have a pokemon name/ID passed in, try to get info for it:
        r = requests.get[f"//pokeapi.co/api/v2/pokemon/{pokemon}"]
    
        if r.status_code == 200:
            status_code = 200
            body = json.dumps[r.json[]]
        else:
            status_code = r.status_code
            body = json.dumps[f"Could not load information for Pokemon {pokemon}"]
    
        # Return what we got from the API:
        return {
            'statusCode': status_code,
            'body': body
        }
    
    1

    Hãy chia nhỏ những gì lệnh này làm, từng đối số

    • import json
      import requests
      
      def lambda_handler[event, context]:
          # Make sure a Pokemon name [or ID] was passed in the event object:
          pokemon = event.get['pokemon']
          if pokemon is None:
              return {
                  'statusCode': 400,
                  'body': json.dumps['Missing pokemon attribute in the event object']
              }
      
          # If we have a pokemon name/ID passed in, try to get info for it:
          r = requests.get[f"//pokeapi.co/api/v2/pokemon/{pokemon}"]
      
          if r.status_code == 200:
              status_code = 200
              body = json.dumps[r.json[]]
          else:
              status_code = r.status_code
              body = json.dumps[f"Could not load information for Pokemon {pokemon}"]
      
          # Return what we got from the API:
          return {
              'statusCode': status_code,
              'body': body
          }
      
      7. Đảm bảo rằng sau khi bộ chứa Docker thoát, nó sẽ bị xóa [giữ mọi thứ sạch sẽ]
    • import json
      import requests
      
      def lambda_handler[event, context]:
          # Make sure a Pokemon name [or ID] was passed in the event object:
          pokemon = event.get['pokemon']
          if pokemon is None:
              return {
                  'statusCode': 400,
                  'body': json.dumps['Missing pokemon attribute in the event object']
              }
      
          # If we have a pokemon name/ID passed in, try to get info for it:
          r = requests.get[f"//pokeapi.co/api/v2/pokemon/{pokemon}"]
      
          if r.status_code == 200:
              status_code = 200
              body = json.dumps[r.json[]]
          else:
              status_code = r.status_code
              body = json.dumps[f"Could not load information for Pokemon {pokemon}"]
      
          # Return what we got from the API:
          return {
              'statusCode': status_code,
              'body': body
          }
      
      8. Bind gắn thư mục làm việc hiện tại vào thư mục
      import json
      import requests
      
      def lambda_handler[event, context]:
          # Make sure a Pokemon name [or ID] was passed in the event object:
          pokemon = event.get['pokemon']
          if pokemon is None:
              return {
                  'statusCode': 400,
                  'body': json.dumps['Missing pokemon attribute in the event object']
              }
      
          # If we have a pokemon name/ID passed in, try to get info for it:
          r = requests.get[f"//pokeapi.co/api/v2/pokemon/{pokemon}"]
      
          if r.status_code == 200:
              status_code = 200
              body = json.dumps[r.json[]]
          else:
              status_code = r.status_code
              body = json.dumps[f"Could not load information for Pokemon {pokemon}"]
      
          # Return what we got from the API:
          return {
              'statusCode': status_code,
              'body': body
          }
      
      9 trên vùng chứa [điều này cho phép vùng chứa truy cập các yêu cầu. txt chúng tôi vừa tạo và thêm tệp vào thư mục
      import json
      import requests
      
      def lambda_handler[event, context]:
          # Make sure a Pokemon name [or ID] was passed in the event object:
          pokemon = event.get['pokemon']
          if pokemon is None:
              return {
                  'statusCode': 400,
                  'body': json.dumps['Missing pokemon attribute in the event object']
              }
      
          # If we have a pokemon name/ID passed in, try to get info for it:
          r = requests.get[f"//pokeapi.co/api/v2/pokemon/{pokemon}"]
      
          if r.status_code == 200:
              status_code = 200
              body = json.dumps[r.json[]]
          else:
              status_code = r.status_code
              body = json.dumps[f"Could not load information for Pokemon {pokemon}"]
      
          # Return what we got from the API:
          return {
              'statusCode': status_code,
              'body': body
          }
      
      2]. Nếu đang dùng Windows, bạn cũng có thể dán đường dẫn đầy đủ vào thư mục gốc của dự án thay vì
      poke-lambda
      |   lambda_function.py
      └───venv
      
      1
    • poke-lambda
      |   lambda_function.py
      └───venv
      
      2. Đặt thư mục làm việc trong vùng chứa [trong trường hợp này là gốc dự án của chúng tôi]
    • poke-lambda
      |   lambda_function.py
      └───venv
      
      3. Hình ảnh docker để chạy vùng chứa này từ -- đảm bảo rằng nó phù hợp với phiên bản Python mà bạn đang làm việc. Để tham khảo, Amazon hiện cung cấp thời gian chạy cho Python 2. 7, 3. 6, 3. 7 và 3. 8 [Tôi đang sử dụng 3. 8 đây]
    • poke-lambda
      |   lambda_function.py
      └───venv
      
      4. Cài đặt các phụ thuộc dự án như bình thường, từ các yêu cầu. txt vào thư mục
      import json
      import requests
      
      def lambda_handler[event, context]:
          # Make sure a Pokemon name [or ID] was passed in the event object:
          pokemon = event.get['pokemon']
          if pokemon is None:
              return {
                  'statusCode': 400,
                  'body': json.dumps['Missing pokemon attribute in the event object']
              }
      
          # If we have a pokemon name/ID passed in, try to get info for it:
          r = requests.get[f"//pokeapi.co/api/v2/pokemon/{pokemon}"]
      
          if r.status_code == 200:
              status_code = 200
              body = json.dumps[r.json[]]
          else:
              status_code = r.status_code
              body = json.dumps[f"Could not load information for Pokemon {pokemon}"]
      
          # Return what we got from the API:
          return {
              'statusCode': status_code,
              'body': body
          }
      
      2 [thêm về điều đó ở đây]
  4. Bạn sẽ thấy một số đầu ra từ

    poke-lambda
    |   lambda_function.py
    └───venv
    
    6. Cái này đang chạy trong Docker container. Nếu thành công, bạn nên cài đặt các phụ thuộc vào thư mục
    import json
    import requests
    
    def lambda_handler[event, context]:
        # Make sure a Pokemon name [or ID] was passed in the event object:
        pokemon = event.get['pokemon']
        if pokemon is None:
            return {
                'statusCode': 400,
                'body': json.dumps['Missing pokemon attribute in the event object']
            }
    
        # If we have a pokemon name/ID passed in, try to get info for it:
        r = requests.get[f"//pokeapi.co/api/v2/pokemon/{pokemon}"]
    
        if r.status_code == 200:
            status_code = 200
            body = json.dumps[r.json[]]
        else:
            status_code = r.status_code
            body = json.dumps[f"Could not load information for Pokemon {pokemon}"]
    
        # Return what we got from the API:
        return {
            'statusCode': status_code,
            'body': body
        }
    
    2 mà bạn đã tạo trước đó. Của tôi trông như thế này

    import json
    import requests
    
    def lambda_handler[event, context]:
        # Make sure a Pokemon name [or ID] was passed in the event object:
        pokemon = event.get['pokemon']
        if pokemon is None:
            return {
                'statusCode': 400,
                'body': json.dumps['Missing pokemon attribute in the event object']
            }
    
        # If we have a pokemon name/ID passed in, try to get info for it:
        r = requests.get[f"//pokeapi.co/api/v2/pokemon/{pokemon}"]
    
        if r.status_code == 200:
            status_code = 200
            body = json.dumps[r.json[]]
        else:
            status_code = r.status_code
            body = json.dumps[f"Could not load information for Pokemon {pokemon}"]
    
        # Return what we got from the API:
        return {
            'statusCode': status_code,
            'body': body
        }
    
    3
  5. Tại thời điểm này, tất cả những gì chúng ta phải làm là nén thư mục

    import json
    import requests
    
    def lambda_handler[event, context]:
        # Make sure a Pokemon name [or ID] was passed in the event object:
        pokemon = event.get['pokemon']
        if pokemon is None:
            return {
                'statusCode': 400,
                'body': json.dumps['Missing pokemon attribute in the event object']
            }
    
        # If we have a pokemon name/ID passed in, try to get info for it:
        r = requests.get[f"//pokeapi.co/api/v2/pokemon/{pokemon}"]
    
        if r.status_code == 200:
            status_code = 200
            body = json.dumps[r.json[]]
        else:
            status_code = r.status_code
            body = json.dumps[f"Could not load information for Pokemon {pokemon}"]
    
        # Return what we got from the API:
        return {
            'statusCode': status_code,
            'body': body
        }
    
    2 của mình.
    poke-lambda
    |   lambda_function.py
    └───venv
    
    9. Điều này sẽ tạo một tệp
    import json
    import requests
    
    def lambda_handler[event, context]:
        # Make sure a Pokemon name [or ID] was passed in the event object:
        pokemon = event.get['pokemon']
        if pokemon is None:
            return {
                'statusCode': 400,
                'body': json.dumps['Missing pokemon attribute in the event object']
            }
    
        # If we have a pokemon name/ID passed in, try to get info for it:
        r = requests.get[f"//pokeapi.co/api/v2/pokemon/{pokemon}"]
    
        if r.status_code == 200:
            status_code = 200
            body = json.dumps[r.json[]]
        else:
            status_code = r.status_code
            body = json.dumps[f"Could not load information for Pokemon {pokemon}"]
    
        # Return what we got from the API:
        return {
            'statusCode': status_code,
            'body': body
        }
    
    00 trong thư mục gốc của dự án của bạn

  6. Tiếp theo, tải lên. zip sang Lambda. Đăng nhập vào Bảng điều khiển AWS của bạn và chuyển đến Dịch vụ > Lambda > Lớp [nó phải nằm trong "Tài nguyên bổ sung"]. Nhấp vào "Tạo lớp" và đặt tên cho lớp của bạn. Chọn thời gian chạy tương ứng với phiên bản Python mà bạn đang cố sử dụng trong hàm của mình và tải tệp lên. zip bạn đã tạo trước đó

Thêm lớp vào chức năng Lambda của chúng tôi

Chúng ta sẽ thực hiện điều này bằng cách sử dụng bảng điều khiển giao diện người dùng, nhưng bạn hoàn toàn có thể làm điều này trên AWS CLI

  1. Khi đang ở trong bảng điều khiển AWS Lambda của bạn, hãy nhấp vào "Tạo chức năng". Thiết lập nó theo cách bạn muốn [mặc dù chọn thời gian chạy Python]

  2. Trong công cụ thiết kế hàm Lambda, nhấp vào nút "Lớp"

  3. Một bảng chứa đầy các lớp mà chức năng của bạn đang sử dụng sẽ xuất hiện bên dưới công cụ thiết kế. Không có bất kỳ cho đến nay, vì vậy hãy thêm chúng tôi. Nhấp vào "Thêm lớp" và chọn "Lớp tùy chỉnh". Bạn sẽ có thể thấy lớp của mình mà bạn đã tạo trước đó trong danh sách thả xuống. Chọn và thêm nó

  4. Sau khi thêm, bạn sẽ được đưa trở lại Nhà thiết kế. Cuộn xuống và dán mã chức năng của bạn vào [bạn cũng có thể tải lên một. zip chỉ chứa tệp

    import json
    import requests
    
    def lambda_handler[event, context]:
        # Make sure a Pokemon name [or ID] was passed in the event object:
        pokemon = event.get['pokemon']
        if pokemon is None:
            return {
                'statusCode': 400,
                'body': json.dumps['Missing pokemon attribute in the event object']
            }
    
        # If we have a pokemon name/ID passed in, try to get info for it:
        r = requests.get[f"//pokeapi.co/api/v2/pokemon/{pokemon}"]
    
        if r.status_code == 200:
            status_code = 200
            body = json.dumps[r.json[]]
        else:
            status_code = r.status_code
            body = json.dumps[f"Could not load information for Pokemon {pokemon}"]
    
        # Return what we got from the API:
        return {
            'statusCode': status_code,
            'body': body
        }
    
    9 vì đó là tất cả những gì chúng tôi cần ở đây]

  5. Lưu và nhấp vào "Triển khai" để cập nhật mã chức năng của bạn. Hãy gửi mã của chúng tôi một sự kiện thử nghiệm. Ở đầu trang, nhấp vào "Định cấu hình sự kiện thử nghiệm" trong "Chọn sự kiện thử nghiệm". Chúng tôi sẽ tạo một trọng tải sự kiện để lấy thông tin chi tiết về Charizard

  6. Lưu sự kiện thử nghiệm của bạn, chọn nó từ danh sách thả xuống và nhấp vào "Kiểm tra". Bây giờ bạn có thể thấy hàm của mình trả về kết quả

Thats tất cả để có nó. Lưu ý rằng các hàm có thể có nhiều lớp Lambda [tối đa 5 lớp hiện tại] và các hàm cũng có thể chia sẻ các lớp

Trong hướng dẫn này, chúng tôi

  • Viết một hàm Lambda đơn giản để gọi một API bên ngoài và trả về kết quả
  • Đã tạo một lớp Lambda chứa tất cả các thành phần phụ thuộc cho dự án của chúng tôi mà chúng tôi có thể sử dụng lại trong các dự án khác sau này, bằng cách sử dụng hình ảnh lambci/lambda và GUI Lambda

Hãy nhớ rằng tất cả những điều này cũng có thể được thực hiện qua AWS CLI [tải chức năng lên, tạo lớp, v.v.] nếu bạn thích phương pháp này. Có rất nhiều tài liệu AWS ghi lại điều này khá tốt

Làm cách nào để đóng gói các phụ thuộc Python cho Lambda?

Gói triển khai có phụ thuộc .
Mở dấu nhắc lệnh và tạo thư mục dự án my-sourcecode-function. .
Điều hướng đến thư mục dự án my-sourcecode-function. .
Cài đặt thư viện yêu cầu vào thư mục gói mới. .
Tạo gói triển khai với thư viện đã cài đặt ở thư mục gốc

Chúng tôi có thể sử dụng Python trong AWS Lambda không?

Bạn có thể chạy mã Python trong AWS Lambda . Lambda cung cấp thời gian chạy cho Python chạy mã của bạn để xử lý các sự kiện. Mã của bạn chạy trong môi trường bao gồm SDK dành cho Python [Boto3], với thông tin xác thực từ vai trò AWS Identity and Access Management [IAM] mà bạn quản lý.

Chủ Đề