


Buat, debug, dan gunakan kod anda sebagai lapisan AWS Lambda yang boleh diguna semula
Lapisan Lambda AWS adalah cara yang baik untuk dapat menggunakan semula kod dengan lambdas yang berbeza. Saya telah melihat banyak tutorial tentang cara membuat lapisan untuk pakej PIP yang sedia ada, tetapi tidak banyak yang menjelaskan bagaimana untuk melakukannya dengan kod anda sendiri dan membolehkan anda menyahpepijatnya bersama -sama dengan lambda anda. Dalam senario saya, anda boleh mempunyai lapisan anda dan beberapa lambdas menggunakan lapisan ini, dan debug kod lambdas dan lapisan di sepanjang simulasi persekitaran AWS. Saya akan menganggap anda sudah mempunyai fungsi lambda yang dibuat dengan template.yml. Jika tidak, periksa artikel berikut mengenai cara membuat lambda https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html. Selepas menciptanya, anda boleh memuat turunnya sebagai fail zip dan mengeluarkan kod dan template.yml dari sana.
Menyediakan lapisan anda
Pertama, kita perlu menyediakan struktur folder untuk lapisan. Saya suka membuat folder yang dipanggil Lapisan, dan untuk setiap lapisan membuat folder sendiri. AWS Lambda memerlukan struktur folder tertentu untuk lapisan, di mana kod setiap lapisan berada dalam python/ folder. Lihat pautan berikut untuk maklumat lanjut mengenai perkara ini. https://docs.aws.amazon.com/lambda/latest/dg/packaging-layers.html
Lapisan kami akan dipanggil Layer_utils. Kami meletakkan kemudian folder layer_utils di dalam folder python dan di dalam kami membuat fail request_handler.py dan pemproses.py dengan kod. Kami juga memerlukan fail kosong . Ini adalah bagaimana struktur pokok sepatutnya kelihatan seperti
layers/ └── layer_utils/ └── python/ ├── layer_utils/ │ ├── __init__.py │ └── request_handler.py │ └── processor.py
3
3
di sini, adalah penting untuk diperhatikan bagaimana kami mengimport fungsi pemproses, dengan memanggil dari Layer_utils.Processor Import Process_data, bukannya dari Processor Import Process_Data sahaja. Menggunakan jalan mutlak membantu mengelakkan kesilapan import kemudian.
import requests def process_data(url): """ Fetches data from a URL. Args: url (str): The URL to fetch data from. Returns: str: The fetched content or an error message. """ try: response = requests.get(url) response.raise_for_status() # Raise an error for bad status codes return response.text[:200] # Return the first 200 characters of the response except requests.RequestException as e: return f"Error fetching data: {str(e)}"
baiklah, kini kami mempunyai kod lapisan kami yang dibuat. Tetapi kita belum selesai dengannya. Kita perlu membuat pakej yang boleh diedit dengan PIP supaya ini boleh digunakan oleh kod Lambda kami. Kami akan mengikuti gaya PEP 660 untuk berbuat demikian. Kita perlu membuat dua fail: keperluan.txt dan pyproject.toml. Yang pertama akan memasukkan semua perpustakaan luaran yang kita perlukan untuk lapisan ini, dalam permintaan ini. Yang kedua ialah fail yang kita perlukan untuk membuat pakej yang boleh diedit menggunakan PIP dan memastikan semua kebergantungan dipasang. Ini membolehkan mengedit kod lapisan tanpa perlu mengemas semula ia sentiasa (yang kita perlukan untuk debug).
ini adalah bagaimana pokok itu kelihatan seperti
from layer_utils.processor import process_data def handle_request(request): """ Handles an incoming request and processes it. Args: request (dict): The input request data. Returns: dict: The processed result. """ # Example: Extract 'url' from the request and process it if "url" not in request: return {"error": "Missing 'data' in request"} data = request["url"] processed_result = process_data(data) return {"result": processed_result}
pyproject.toml akan digunakan oleh PIP untuk membuat pakej dengan lapisan kami.
3
Dalam fail ini, pakej setuptools diperlukan untuk membuat pakej dan pakej roda digunakan untuk membungkus kod ke dalam format yang boleh diedarkan.
layers/ └── layer_utils/ └── python/ ├── layer_utils/ │ ├── __init__.py │ └── request_handler.py │ └── processor.py
Saya fikir penting untuk menjejaki versi pakej anda yang anda gunakan, kerana pakej luaran anda akan diimport dengan menghubungi sumber lapisan AWS Lambda secara langsung dari AWS. Sekiranya anda menyahpepijat secara langsung pada sistem anda dengan menjalankan lambda anda secara langsung dari persekitaran python anda dan bukannya menggunakan Sam Local Invoke atau Sam Local Start-API, anda perlu memastikan bahawa pakej tempatan anda dipasang dengan PIP akan sama seperti yang anda gunakan pakej di lapisan anda. Saya tidak akan menerangkan cara membuat lapisan luaran kerana terdapat banyak tutorial yang baik untuk itu (contohnya, ini https://www.keyq.cloud/en/blog/creating-an-aws-lambda-layer-for- Python-Requests-Module
).
Menetapkan persekitaran maya
Sekarang mari kita buat persekitaran maya. Ini tidak perlu, tetapi disyorkan, kerana ia mengasingkan kebergantungan dan memastikan persekitaran python selaras dengan yang akan digunakan oleh Lambda. Untuk melakukan ini, dalam konsol di dir projek anda, input
import requests def process_data(url): """ Fetches data from a URL. Args: url (str): The URL to fetch data from. Returns: str: The fetched content or an error message. """ try: response = requests.get(url) response.raise_for_status() # Raise an error for bad status codes return response.text[:200] # Return the first 200 characters of the response except requests.RequestException as e: return f"Error fetching data: {str(e)}"
Yang pertama membuat python menjalankan modul Venv dengan -m venv dan mewujudkan persekitaran maya yang dipanggil Venv.
yang kedua mengaktifkan persekitaran maya dengan memanggil sumber arahan terbina dalam yang menjalankan skrip pengaktifan persekitaran maya. Jika anda menggunakan kod Visual Studio, ia mungkin mendorong anda untuk beralih ke persekitaran maya. Katakan ya.
selepas ini, anda harus melihat dalam shell anda seperti ini.
from layer_utils.processor import process_data def handle_request(request): """ Handles an incoming request and processes it. Args: request (dict): The input request data. Returns: dict: The processed result. """ # Example: Extract 'url' from the request and process it if "url" not in request: return {"error": "Missing 'data' in request"} data = request["url"] processed_result = process_data(data) return {"result": processed_result}
(venv) pada mulanya menunjukkan anda berada di persekitaran maya.
Kadang -kadang saya suka debug menjalankan fail python secara langsung dan bukannya dengan alat SAM (kerana ia lebih cepat). Untuk melakukan ini, saya akan memasang semua pakej luaran pada persekitaran maya saya supaya saya dapat menggunakannya secara tempatan untuk pembangunan dan debugging.
└── layer_utils └── python ├── layer_utils │ ├── __init__.py │ ├── processor.py │ └── request_handler.py ├── pyproject.toml └── requirements.txt
sekarang kita perlu membungkus lapisan, jadi lambda kami dapat mencari lapisan sebagai pakej python.
[project] name = "layer_utils" version = "0.1.0" [build-system] requires = ["setuptools", "wheel"] build-backend = "setuptools.build_meta"
Debugging
OK, mari kita lihat bagaimana kita akan debug ini. Ini adalah struktur folder saya dengan lapisan dan lambdas.
layers/ └── layer_utils/ └── python/ ├── layer_utils/ │ ├── __init__.py │ └── request_handler.py │ └── processor.py
ini adalah kod lambda saya
import requests def process_data(url): """ Fetches data from a URL. Args: url (str): The URL to fetch data from. Returns: str: The fetched content or an error message. """ try: response = requests.get(url) response.raise_for_status() # Raise an error for bad status codes return response.text[:200] # Return the first 200 characters of the response except requests.RequestException as e: return f"Error fetching data: {str(e)}"
anda boleh menjalankan fail dan anda harus mendapatkan hasil yang sah tanpa kesilapan.
Jika anda menggunakan kod Visual Studio dengan Pylance, anda mungkin melihat bahawa import lapisan tidak menyelesaikan walaupun kod tersebut telah berfungsi.
from layer_utils.processor import process_data def handle_request(request): """ Handles an incoming request and processes it. Args: request (dict): The input request data. Returns: dict: The processed result. """ # Example: Extract 'url' from the request and process it if "url" not in request: return {"error": "Missing 'data' in request"} data = request["url"] processed_result = process_data(data) return {"result": processed_result}
Menambah lapisan ke timbunan anda
kita perlu sekarang untuk menubuhkan lapisan pada template.yml lambdas anda. Kami perlu menambah perkara berikut di dalam sumber: seksyen (menyesuaikan kandungan mengikut projek anda)
3
Di Contenturi, anda dapat melihat bagaimana ia merujuk kepada laluan relatif di mana kod lapisan itu. Lihat bagaimana ia tidak menunjuk pada folder Python, kerana sistem AWS Sam akan mencari folder Python di sana. Pastikan runtime sepadan dengan yang anda gunakan dalam persekitaran maya anda dan lamnbda anda.
Juga, anda perlu merujuk lapisan pada bahagian lambda fail
└── layer_utils └── python ├── layer_utils │ ├── __init__.py │ ├── processor.py │ └── request_handler.py ├── pyproject.toml └── requirements.txt
Perhatikan bahawa dalam bahagian lapisan fail templat kami juga mempunyai lapisan permintaan yang sudah ada di AWS kami. Ini akan mewujudkan lapisan tempatan, jadi Sam akan tahu ia perlu membacanya. Ia juga akan menggunakan lapisan ini pada AWS setiap kali anda memanggil AWS Deploy.
Debugging dengan Sam
[project] name = "layer_utils" version = "0.1.0" [build-system] requires = ["setuptools", "wheel"] build-backend = "setuptools.build_meta"
Ini akan membina semua kebergantungan yang diperlukan.
Sekarang kita boleh memanggilnya. Saya membuat fail acara untuk menguji lambda
requests==2.32.2
Sekarang kita boleh menggunakan fail untuk debugging. Ingat bahawa anda memerlukan Docker dipasang dan berjalan untuk ini. Sekali lagi, ingatlah untuk memohon ini dari tempat di mana fail templat.
Ini akan memohon fungsi pada template.yml. Bendera -d bendera menunjukkan bahawa port debug ialah 5678.
Menggunakan Lambda dan Lapisan anda ke AWS
mari kita selesaikan ini dengan menggunakan kod ke AWS.
layers/ └── layer_utils/ └── python/ ├── layer_utils/ │ ├── __init__.py │ └── request_handler.py │ └── processor.py
Bendera yang boleh digunakan boleh digunakan pada kali pertama jika anda belum menggunakan Lambda anda, kerana ia akan membantu anda dalam proses. Selepas melakukan ini, anda boleh pergi ke konsol AWS dan mencari lapisan anda. Anda kini boleh menggunakan lapisan dengan lambdas lain dengan menggunakan ARN lapisan.
Jika anda mahu menggunakan vscode untuk debug, menetapkan titik putus, dan lain -lain, kita perlu melakukan beberapa langkah tambahan.
kita perlu menambah konfigurasi debug. Untuk melakukan ini, lakukan Control/Command Shift P dan Taip Debug: Tambah Konfigurasi .... Ini akan membuka fail launch.json. Anda perlu menambah konfigurasi di sana.
./. Vscode/launch.json
import requests def process_data(url): """ Fetches data from a URL. Args: url (str): The URL to fetch data from. Returns: str: The fetched content or an error message. """ try: response = requests.get(url) response.raise_for_status() # Raise an error for bad status codes return response.text[:200] # Return the first 200 characters of the response except requests.RequestException as e: return f"Error fetching data: {str(e)}"
Kami akan memerlukan perpustakaan debugpy untuk debug. Mari kita tambahkan terlebih dahulu ke keperluan.txt Lambda anda
3
sekarang mari kita pasang dengan pip
from layer_utils.processor import process_data def handle_request(request): """ Handles an incoming request and processes it. Args: request (dict): The input request data. Returns: dict: The processed result. """ # Example: Extract 'url' from the request and process it if "url" not in request: return {"error": "Missing 'data' in request"} data = request["url"] processed_result = process_data(data) return {"result": processed_result}
└── layer_utils └── python ├── layer_utils │ ├── __init__.py │ ├── processor.py │ └── request_handler.py ├── pyproject.toml └── requirements.txt
[project] name = "layer_utils" version = "0.1.0" [build-system] requires = ["setuptools", "wheel"] build-backend = "setuptools.build_meta"
di sini kita menentukan AWS_SAM_LOCAL supaya lambda akan tahu bahawa berjalan secara tempatan melalui AWS Sam.
kita juga perlu memberitahu persekitaran python kita bahawa ia perlu menggunakan pembolehubah persekitaran dari fail persekitaran. Ini adalah bagaimana ia kelihatan seperti
requests==2.32.2
./. Vscode/settings.json
dan akhirnya kita perlu mengubah suai kod Lambda kami supaya ia perlu melampirkan ke debugger ketika menjalankannya secara tempatan. Pada permulaan fail kami, kami akan menambah sekeping kod berikut
./ Lambdas/Mylambda/Src/Lambda_Function.py
python3.12 -m venv venv source venv/bin/activate
Sekarang, kami memanggil fungsi (sekali lagi, dari jalan di mana fungsi itu):
(venv) usar@MacBookPro my-lambda-project
dan sekarang anda sudah bersedia untuk debug lapisan tempatan dan lambdas anda!
Atas ialah kandungan terperinci Buat, debug, dan gunakan kod anda sebagai lapisan AWS Lambda yang boleh diguna semula. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas











Python sesuai untuk sains data, pembangunan web dan tugas automasi, manakala C sesuai untuk pengaturcaraan sistem, pembangunan permainan dan sistem tertanam. Python terkenal dengan kesederhanaan dan ekosistem yang kuat, manakala C dikenali dengan keupayaan kawalan dan keupayaan kawalan yang mendasari.

Python cemerlang dalam permainan dan pembangunan GUI. 1) Pembangunan permainan menggunakan pygame, menyediakan lukisan, audio dan fungsi lain, yang sesuai untuk membuat permainan 2D. 2) Pembangunan GUI boleh memilih tkinter atau pyqt. TKInter adalah mudah dan mudah digunakan, PYQT mempunyai fungsi yang kaya dan sesuai untuk pembangunan profesional.

Anda boleh mempelajari konsep pengaturcaraan asas dan kemahiran Python dalam masa 2 jam. 1. Belajar Pembolehubah dan Jenis Data, 2.

Python lebih mudah dipelajari dan digunakan, manakala C lebih kuat tetapi kompleks. 1. Sintaks Python adalah ringkas dan sesuai untuk pemula. Penaipan dinamik dan pengurusan memori automatik menjadikannya mudah digunakan, tetapi boleh menyebabkan kesilapan runtime. 2.C menyediakan kawalan peringkat rendah dan ciri-ciri canggih, sesuai untuk aplikasi berprestasi tinggi, tetapi mempunyai ambang pembelajaran yang tinggi dan memerlukan memori manual dan pengurusan keselamatan jenis.

Anda boleh mempelajari asas -asas Python dalam masa dua jam. 1. Belajar pembolehubah dan jenis data, 2. Struktur kawalan induk seperti jika pernyataan dan gelung, 3 memahami definisi dan penggunaan fungsi. Ini akan membantu anda mula menulis program python mudah.

Untuk memaksimumkan kecekapan pembelajaran Python dalam masa yang terhad, anda boleh menggunakan modul, masa, dan modul Python. 1. Modul DateTime digunakan untuk merakam dan merancang masa pembelajaran. 2. Modul Masa membantu menetapkan kajian dan masa rehat. 3. Modul Jadual secara automatik mengatur tugas pembelajaran mingguan.

Python cemerlang dalam automasi, skrip, dan pengurusan tugas. 1) Automasi: Sandaran fail direalisasikan melalui perpustakaan standard seperti OS dan Shutil. 2) Penulisan Skrip: Gunakan Perpustakaan Psutil untuk memantau sumber sistem. 3) Pengurusan Tugas: Gunakan perpustakaan jadual untuk menjadualkan tugas. Kemudahan penggunaan Python dan sokongan perpustakaan yang kaya menjadikannya alat pilihan di kawasan ini.

Python digunakan secara meluas dalam bidang pembangunan web, sains data, pembelajaran mesin, automasi dan skrip. 1) Dalam pembangunan web, kerangka Django dan Flask memudahkan proses pembangunan. 2) Dalam bidang sains data dan pembelajaran mesin, numpy, panda, scikit-learn dan perpustakaan tensorflow memberikan sokongan yang kuat. 3) Dari segi automasi dan skrip, Python sesuai untuk tugas -tugas seperti ujian automatik dan pengurusan sistem.
