aws lambda層は、異なるラムダとコードを再利用できる良い方法です。既存のPIPパッケージのレイヤーを作成する方法に関する多くのチュートリアルを見てきましたが、自分のコードでそれを行う方法を説明し、Lambdaと一緒にデバッグできるようにすることはできません。私のシナリオでは、このレイヤーを使用してレイヤーといくつかのラムダを使用して、AWS環境をシミュレートするlambdasと層のコードをデバッグできます。そのテンプレート.ymlで作成されたラムダ関数が既にあると思います。そうでない場合は、Lambda https://docs.aws.amazon.com/lambda/latest/dg/getting-started.htmlの作成方法について次の記事を確認してください。作成後、zipファイルとしてダウンロードして、そこからコードとテンプレートを抽出できます。
レイヤーを準備します
まず、レイヤーのフォルダー構造をセットアップする必要があります。レイヤーと呼ばれるフォルダーを作成するのが好きで、レイヤーごとに独自のフォルダーを作成します。 AWS Lambdaには、各レイヤーのコードがPython/フォルダーにあるレイヤーの特定のフォルダー構造が必要です。これの詳細については、次のリンクを参照してください。 https://docs.aws.amazon.com/lambda/latest/dg/packaging-layers.html
レイヤーはlayer_utilsと呼ばれます。次に、Pythonフォルダー内にフォルダーlayer_utilsを配置し、内部では、コードを使用してファイルrequest_handler.pyとprocessor.pyを作成します。また、Pythonがこれをパッケージとして認識するために必要なinit.py空のファイルも必要です。これは、ツリー構造が
のように見えるようにする方法です
layers/ └── layer_utils/ └── python/ ├── layer_utils/ │ ├── __init__.py │ └── request_handler.py │ └── processor.py
request_handler.pyはURLを使用してリクエストを受信し、ライブラリリクエストを使用してデータを取得して返すプロセッサに電話します。
./ layers/layer_utils/python/layer_utils/processor.py
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)}"
./ layers/layer_utils/python/layer_utils/request_handler.py
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}ここでは、プロセッサのインポートProcess_Dataからのみではなく、layer_utils.processorインポートProcess_dataから呼び出すことにより、プロセッサ関数をインポートする方法に注意することが重要です。絶対パスを使用すると、後でインポートエラーを回避できます
レイヤーのパッケージ
さて、レイヤーコードが作成されました。しかし、私たちはまだそれで完了していません。これをPIPで編集可能なパッケージを作成して、これをLambdaコードで使用できるようにする必要があります。 PEP 660スタイルに従ってください。 compoestion.txtとpyproject.tomlの2つのファイルを作成する必要があります。最初のものには、このレイヤーに必要なすべての外部ライブラリが含まれます。この場合は、この場合はリクエストです。 2つ目は、PIPを使用して編集可能なパッケージを作成し、すべての依存関係がインストールされていることを確認するために必要なファイルです。これにより、レイヤーコードを絶えず再パッケージ化する必要なく編集できます(デバッグする必要があります)。
これは、木がどのように見えるかです
Pyproject.TOMLは、PIPで使用され、レイヤーでパッケージを作成します。
./ layers/layer_utils/python/pyproject.toml
layers/ └── layer_utils/ └── python/ ├── layer_utils/ │ ├── __init__.py │ └── request_handler.py │ └── processor.pyこのファイルでは、Packageの作成にはSetuptoolsパッケージが必要であり、ホイールパッケージはコードを配布可能な形式にパッケージ化するために使用されます。
要件。txtは、レイヤーが必要とするすべての外部モジュールを示します。この場合、リクエストモジュールのみが必要ですが、必要なだけ追加することができます。
./ layers/layer_utils/python/compoestion.txt
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)}")。
仮想環境のセットアップ
次に、仮想環境を作成しましょう。これは必要ありませんが、依存性を分離し、Python環境がラムダが使用する環境と一致することを保証するため、推奨されます。これを行うには、プロジェクト監督のコンソールで、入力
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}2番目は、仮想環境アクティベーションスクリプトを実行する組み込みコマンドソースを呼び出すことにより、仮想環境をアクティブにします。 Visual Studioコードを使用している場合は、仮想環境に切り替えるように求められる場合があります。はいと言います。
この後、あなたはあなたのシェルにこのようなものを見る必要があります。
最初の(venv)は、仮想環境にいることを示しています。
└── layer_utils └── python ├── layer_utils │ ├── __init__.py │ ├── processor.py │ └── request_handler.py ├── pyproject.toml └── requirements.txt
これは、SAMツールなしでローカルで直接デバッグするためにのみ必要です。そのため、これを行う予定がない場合は、この手順をスキップできます。
レイヤーをパッケージ化する必要があるので、ラムダはレイヤーをPythonパッケージとして見つけることができます。
[project] name = "layer_utils" version = "0.1.0" [build-system] requires = ["setuptools", "wheel"] build-backend = "setuptools.build_meta"
-eフラグは、これが編集可能なパッケージであることを示します。パスは、pyproject.tomlファイルがどこにあるかを指します。これを実行すると、新しいフォルダーlayer_utils.egg-infoが作成されます。そこに何もすることはありません、ただそれを残してください。
デバッグ
わかりました、今、これをどのようにデバッグするか見てみましょう。これは、レイヤーとラムダを備えた私のフォルダー構造です。
layers/ └── layer_utils/ └── python/ ├── layer_utils/ │ ├── __init__.py │ └── request_handler.py │ └── processor.py
これは私のlambdaのコードです
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)}"
ファイルを実行でき、エラーなしで有効な結果が得られるはずです。
PILANCEでVisual Studioコードを使用している場合、コードが機能していてもレイヤーのインポートが解決しないことがわかります。
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}今、パイランスはこの罰金を解決する必要があります。
スタックにレイヤーを追加します
ここで、lambdas template.ymlにレイヤーを設定する必要があります。リソース内に次のものを追加する必要があります。セクション(プロジェクトに従ってコンテンツを調整します)./ lambdas/mylambda/template.yml
└── 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"サムとのデバッグ
これをテストしましょう。最初に構築しましょう。テンプレートには、ソースコードがどこにあるかについての兆候があるため、テンプレートを別のパスから構築することに問題がありました。これを避けるために、テンプレートファイルのパスから直接構築することをお勧めします。
これにより、必要なすべての依存関係が構築されます。
requests==2.32.2./ lambdas/mylambda/events/event.json
デバッグのためにファイルを呼び出すことができます。 Dockerがインストールされて実行される必要があることを忘れないでください。繰り返しますが、テンプレートファイルがある場所からこれを呼び出すことを忘れないでください。
python3.12 -m venv venv source venv/bin/activateこれにより、template.ymlの関数が呼び出されます。 -dフラグは、デバッグポートが5678であることを示します。-eフラグは、ラムダに提出されるイベントファイルがどこにあるかを示します。
あなたのラムダとレイヤーをAWSに展開します
ここで、これを完成させて、コードをAWSに展開します。
layers/ └── layer_utils/ └── python/ ├── layer_utils/ │ ├── __init__.py │ └── request_handler.py │ └── processor.py
ラムダをまだ展開していない場合は、照らされたフラグを初めて使用できます。これを行った後、AWSコンソールにアクセスしてレイヤーを見つけることができます。これで、レイヤーのARNを使用して、他のラムダとレイヤーを使用できます。
vscodeを設定してデバッグします
vscodeを使用してデバッグ、ブレークポイントの設定などを行う場合は、追加の手順を実行する必要があります。
デバッグ構成を追加する必要があります。これを行うには、Control/Command Shift Pを実行し、Debugを入力します。構成を追加....これにより、launch.jsonファイルが開きます。そこに構成を追加する必要があります。
./。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)}"
SAMローカルの呼び出しに取り付けられるDebugpyを使用しています。ここでは、-Dフラグで呼び出したときに見たポート5678をセットアップします。 LocalRootがLambdaコードがあるディレクトリを指していることを確認してください。より多くの構成がある場合は、構成内の部分をリストに追加します。
デバッグするにはデバッグライブラリが必要になります。まず、lambdaの要件に追加しましょう
./ lambdas/mylambda/compoestion.txt
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}
PIP
でインストールしましょう
└── layer_utils └── python ├── layer_utils │ ├── __init__.py │ ├── processor.py │ └── request_handler.py ├── pyproject.toml └── requirements.txt
または要件を介してインストールすることもできます。txtファイル
[project] name = "layer_utils" version = "0.1.0" [build-system] requires = ["setuptools", "wheel"] build-backend = "setuptools.build_meta"
環境ファイルを作成する必要があります。ここでは、ローカルで実行されていることをレイヤーに伝えるAWS_SAM_LOCAL環境変数を定義できます。ワークスペースフォルダーにファイル.ENVを作成します。
./。env
requests==2.32.2
ここでは、AWS_SAM_LOCOLを定義して、LambdaがAWS SAMを介してローカルに実行されていることを知っています。
また、環境ファイルから環境変数を使用する必要があることをPython環境に伝える必要があります。これは、のように見えるべき方法です
./。vscode/settings.json
python3.12 -m venv venv source venv/bin/activateそして最後に、ラムダコードを変更する必要があります。これにより、ローカルで実行するときにデバッガーに接続する必要があることがわかります。ファイルの最初に、次のコードを追加します
./ lambdas/mylambda/src/lambda_function.py
(venv) usar@MacBookPro my-lambda-projectさて、関数を呼び出します(再び、関数がある経路から):
pip3 install -r ./layers/layer_utils/python/requirements.txtデバッガーが添付されるのを待っているコンソールが表示されるとき、F5を押すか、Pythonデバッガーを選択します。
そして今、あなたはあなたのローカルレイヤーとラムダをデバッグする準備ができています!
以上が再利用可能なAWSラムダ層としてコードを作成、デバッグ、展開の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

AlaySaregenerallymorememory-effictient forstring forstring inumericaldataduetotheirfixed-sizenature anddirectmoryaccess.1)AraysstoreElementsinaCourowlock、Reducingoverheadfrompointertersormetadata.2)リスト

ToconvertaPythonlisttoanarray,usethearraymodule:1)Importthearraymodule,2)Createalist,3)Usearray(typecode,list)toconvertit,specifyingthetypecodelike'i'forintegers.Thisconversionoptimizesmemoryusageforhomogeneousdata,enhancingperformanceinnumericalcomp

Pythonリストは、さまざまな種類のデータを保存できます。サンプルリストには、整数、文字列、フローティングポイント番号、ブール膜、ネストされたリスト、辞書が含まれています。リストの柔軟性は、データ処理とプロトタイピングにおいて価値がありますが、コードの読みやすさと保守性を確保するためには注意して使用する必要があります。

Pythondoesnothavebuiltinarays; usethearmoduleformemory-efficienthogeneousdatastorage、while-lelistSareversatileformixeddatypes.Arraysareeffientive for forlardatedateSetsetype、wheneasofferistofibuliestibuliestuseduseerieartusedoersorerdatatess。

sostCommonlylysedModule forcreatinginpythonisnumpy.1)numProvidesefficientToolsForArrayoperations、理想的なfornumericaldata.2)arrayscanbecreatedusingnp.array()for1dand2dstructures.3)

toAppendElementStoapyThonList、usetheappend()methodforsingleelements、extend()formultipleElements、andinsert()forspecificopsitions.1)useappend()foraddingoneElementatheend.2)useextend()toaddmultipleelementseffictience.3)

To CreateapythonList、usesquareBrackets []およびSeparateItemswithcommas.1)listsaredynamicandcanholdmixdatatypes.2)useappend()、remaid()、andslicingformanipulation.3)listcompreheNsionsionsionsionsionsionsionsionsionsionsionsionsionsionsionsionsionsientionforcreating.4)

金融、科学研究、医療、およびAIの分野では、数値データを効率的に保存および処理することが重要です。 1)財務では、メモリマッピングされたファイルとnumpyライブラリを使用すると、データ処理速度が大幅に向上する可能性があります。 2)科学研究の分野では、HDF5ファイルはデータストレージと取得用に最適化されています。 3)医療では、インデックス作成やパーティション化などのデータベース最適化テクノロジーがデータのパフォーマンスを向上させます。 4)AIでは、データシャーディングと分散トレーニングがモデルトレーニングを加速します。システムのパフォーマンスとスケーラビリティは、適切なツールとテクノロジーを選択し、ストレージと処理速度の間のトレードオフを検討することにより、大幅に改善できます。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

メモ帳++7.3.1
使いやすく無料のコードエディター

Dreamweaver Mac版
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!
