目次
次に、仮想環境を作成しましょう。これは必要ありませんが、依存性を分離し、Python環境がラムダが使用する環境と一致することを保証するため、推奨されます。これを行うには、プロジェクト監督のコンソールで、入力
ホームページ バックエンド開発 Python チュートリアル 再利用可能なAWSラムダ層としてコードを作成、デバッグ、展開

再利用可能なAWSラムダ層としてコードを作成、デバッグ、展開

Jan 30, 2025 am 12:23 AM

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


使用しているパッケージのバージョンを追跡することが重要だと思います。AWSLambdaレイヤーリソースをAWSから直接呼び出すことで外部パッケージがインポートされるためです。 Sam Local InvokeまたはSam Local Start-APIを使用する代わりに、Python環境からLambdaをPython環境から直接実行してシステムに直接デバッグする場合は、PIPでインストールされているローカルパッケージが展開と同じであることを確認する必要があります。レイヤーのパッケージ。そのための多くの優れたチュートリアルがあるので、外部レイヤーの作成方法は説明しません(たとえば、このhttps://www.keyq.cloud/en/blog/creating-an-aws-lambda-layer-for-- python-requests-module
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環境がラムダが使用する環境と一致することを保証するため、推奨されます。これを行うには、プロジェクト監督のコンソールで、入力


最初のPythonは、-m venvを使用してVenvモジュールを実行し、Venvと呼ばれる仮想環境を作成します。
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)は、仮想環境にいることを示しています。

時々、SAMツールではなくPythonファイルを直接実行するのが好きです(より速いため)。これを行うには、仮想環境にすべての外部パッケージをインストールして、開発とデバッグにローカルに使用できるようにします。
└── 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コードを使用している場合、コードが機能していてもレイヤーのインポートが解決しないことがわかります。

Pylance complaining on VSCode

これを解決するために、ワークスペースのsettings.jsonを編集できます。コントロール/コマンドシフトPを実行し、設定を入力します。ワークスペース設定(JSON)を開き、ブラケット内に次のものを追加します(さらに外部がある場合は、パスを追加するだけです)


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


contenturiでは、レイヤーコードがある相対パスをどのように指すかを見ることができます。 AWS SAMシステムがPythonフォルダーを探しているため、Pythonフォルダーを指し示していない方法をご覧ください。ランタイムが仮想環境とLamnbdaで使用しているものと一致することを確認してください。
└── layer_utils
    └── python
        ├── layer_utils
        │   ├── __init__.py
        │   ├── processor.py
        │   └── request_handler.py
        ├── pyproject.toml
        └── requirements.txt
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
また、ファイルのラムダセクションのレイヤーを参照する必要があります



テンプレートファイルのレイヤーセクションには、すでにAWSにあるリクエストレイヤーもあることに注意してください。これにより、レイヤーがローカルに作成されるため、サムはそれを読む必要があることを知っています。また、AWS Deployを呼び出すときはいつでもこのレイヤーをAWSに展開します。
[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を使用して、他のラムダとレイヤーを使用できます。

The lambda layer on the AWS Console

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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Python vs. C:比較されたアプリケーションとユースケース Python vs. C:比較されたアプリケーションとユースケース Apr 12, 2025 am 12:01 AM

Pythonは、データサイエンス、Web開発、自動化タスクに適していますが、Cはシステムプログラミング、ゲーム開発、組み込みシステムに適しています。 Pythonは、そのシンプルさと強力なエコシステムで知られていますが、Cは高性能および基礎となる制御機能で知られています。

2時間でどのくらいのPythonを学ぶことができますか? 2時間でどのくらいのPythonを学ぶことができますか? Apr 09, 2025 pm 04:33 PM

2時間以内にPythonの基本を学ぶことができます。 1。変数とデータ型を学習します。2。ステートメントやループの場合などのマスター制御構造、3。関数の定義と使用を理解します。これらは、簡単なPythonプログラムの作成を開始するのに役立ちます。

Python:ゲーム、GUIなど Python:ゲーム、GUIなど Apr 13, 2025 am 12:14 AM

PythonはゲームとGUI開発に優れています。 1)ゲーム開発は、2Dゲームの作成に適した図面、オーディオ、その他の機能を提供し、Pygameを使用します。 2)GUI開発は、TKINTERまたはPYQTを選択できます。 TKINTERはシンプルで使いやすく、PYQTは豊富な機能を備えており、専門能力開発に適しています。

2時間のPython計画:現実的なアプローチ 2時間のPython計画:現実的なアプローチ Apr 11, 2025 am 12:04 AM

2時間以内にPythonの基本的なプログラミングの概念とスキルを学ぶことができます。 1.変数とデータ型、2。マスターコントロールフロー(条件付きステートメントとループ)、3。機能の定義と使用を理解する4。

Python vs. C:曲線と使いやすさの学習 Python vs. C:曲線と使いやすさの学習 Apr 19, 2025 am 12:20 AM

Pythonは学習と使用が簡単ですが、Cはより強力ですが複雑です。 1。Python構文は簡潔で初心者に適しています。動的なタイピングと自動メモリ管理により、使いやすくなりますが、ランタイムエラーを引き起こす可能性があります。 2.Cは、高性能アプリケーションに適した低レベルの制御と高度な機能を提供しますが、学習しきい値が高く、手動メモリとタイプの安全管理が必要です。

Python:主要なアプリケーションの調査 Python:主要なアプリケーションの調査 Apr 10, 2025 am 09:41 AM

Pythonは、Web開発、データサイエンス、機械学習、自動化、スクリプトの分野で広く使用されています。 1)Web開発では、DjangoおよびFlask Frameworksが開発プロセスを簡素化します。 2)データサイエンスと機械学習の分野では、Numpy、Pandas、Scikit-Learn、Tensorflowライブラリが強力なサポートを提供します。 3)自動化とスクリプトの観点から、Pythonは自動テストやシステム管理などのタスクに適しています。

Pythonと時間:勉強時間を最大限に活用する Pythonと時間:勉強時間を最大限に活用する Apr 14, 2025 am 12:02 AM

限られた時間でPythonの学習効率を最大化するには、PythonのDateTime、時間、およびスケジュールモジュールを使用できます。 1. DateTimeモジュールは、学習時間を記録および計画するために使用されます。 2。時間モジュールは、勉強と休息の時間を設定するのに役立ちます。 3.スケジュールモジュールは、毎週の学習タスクを自動的に配置します。

Python:自動化、スクリプト、およびタスク管理 Python:自動化、スクリプト、およびタスク管理 Apr 16, 2025 am 12:14 AM

Pythonは、自動化、スクリプト、およびタスク管理に優れています。 1)自動化:OSやShutilなどの標準ライブラリを介してファイルバックアップが実現されます。 2)スクリプトの書き込み:Psutilライブラリを使用してシステムリソースを監視します。 3)タスク管理:スケジュールライブラリを使用してタスクをスケジュールします。 Pythonの使いやすさと豊富なライブラリサポートにより、これらの分野で優先ツールになります。

See all articles