ラムダ関数の場合、Python の相対インポートは扱いにくい場合があります。 3年前にこれについてブログを書きました。しかし最近、Docker 化されたラムダ関数で同じ問題に遭遇しました。それで、新しいブログを書く時期が来たと思いました!
手順に従うことも、GitHub で結果を直接確認することもできます。
プロジェクトのセットアップ
AWS CDK cli がインストールされていることを確認してください。
brew install aws-cdk
プロジェクトを初期化します:
cdk init app --language=typescript
ラムダのセットアップ
まず、ファイルとフォルダーの構造を作成する必要があります。
mkdir -p lib/functions/hello-world/hello_world touch lib/functions/hello-world/hello_world/__init__.py touch lib/functions/hello-world/requirements.txt touch lib/functions/hello-world/Dockerfile
次に、次のように Dockerfile を埋める必要があります:
FROM public.ecr.aws/lambda/python:3.12 COPY requirements.txt . COPY hello_world ${LAMBDA_TASK_ROOT}/hello_world RUN pip install --no-cache-dir -r requirements.txt CMD ["hello_world.handler"]
Python 3.12 に基づく Python ベース イメージを使用しています。次に、requirements.txt ファイルとソース コードをコピーします。 requirements.txt ファイルにリストされているすべての依存関係をインストールし、ハンドラー メソッドが CMD として設定されていることを確認します。
次に、Python ファイルにコードを入力する必要があります。 __init__.py ファイルには、次のコンテンツを配置できます:
from typing import Dict, Any def handler(event: Dict[str, Any], context: Any) -> Dict[str, str]: name = event.get("name", "World") return { "Name": name, "Message": f"Hello {name}!", } __all__ = [ "handler" ]
注: ここで使用されているコードでは、相対インポートを使用することができます。別パッケージだからできることです。この例では、__init__.py ファイル内のコードのみを示します。ただし、ここで複数のファイルを使用して、プロジェクトの保守性を向上させることができます。
この例では、依存関係は必要ないので、requirements.txt ファイルを空のままにしておきます。依存関係も含める方法を説明するために、この例にこれを含めました。
IaC を使用して Lambda 関数を作成する
フォルダーとファイルが配置されたので、CDK 構造に Lambda 関数を追加します。次のように追加するだけです:
new lambda.Function(this, 'Function', { functionName: "hello-world", code: lambda.Code.fromAssetImage("lib/functions/hello-world", { platform: ecr_assets.Platform.LINUX_ARM64, }), runtime: lambda.Runtime.FROM_IMAGE, handler: lambda.Handler.FROM_IMAGE, architecture: lambda.Architecture.ARM_64, timeout: cdk.Duration.seconds(15), memorySize: 128, });
これが機能するには、次のインポートも必要です:
import * as lambda from 'aws-cdk-lib/aws-lambda'; import * as ecr_assets from 'aws-cdk-lib/aws-ecr-assets';
コード ディレクトリが Dockerfile を含むディレクトリを指していること、およびコードと関数自体の両方に ARM プラットフォームを選択していることに注意してください。
ラムダ関数をローカルでテストする
迅速なフィードバックが重要であるため、コンテナをローカルで実行する必要がある場合があります。このためには、まずコンテナを構築する必要があります:
docker build --platform linux/arm64 \ -t hello-world:latest \ -f ./lib/functions/hello-world/Dockerfile \ ./lib/functions/hello-world
このコマンドはプロジェクトのルートから実行できることに注意してください。次に、呼び出す前に実行中であることを確認する必要があります:
docker run --platform linux/arm64 -p 9000:8080 hello-world:latest
その後、次のように関数を呼び出すことができます:
curl http://localhost:9000/2015-03-31/functions/function/invocations -d '{"name": "Joris"}'
結論
相対インポートは難しい場合があります。コードをパッケージに配置する必要があります。これにより、独自のパッケージ内で相対インポートを行うことができます。これにより、責任を複数のファイルに分割できるため、よりクリーンなコードが可能になり、管理と保守が容易になります。
写真提供: Kaique Rocha
以上がDocker化されたラムダ関数での相対Pythonインポートの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

forhandlinglaredataSetsinpython、usenumpyArrays forbetterperformance.1)numpyarraysarememory-effictientandfasterfornumericaloperations.2)nusinnnnedarytypeconversions.3)レバレッジベクトル化は、測定済みのマネージメーシェイメージーウェイズデイタイです

inpython、listsusedynamicmemoryallocation with allocation、whilenumpyArraysalocatefixedmemory.1)listsallocatemorememorythanneededededinitivative.2)numpyArrayasallocateexactmemoryforements、rededicablebutlessflexibilityを提供します。

inpython、youcanspecthedatatypeyfelemeremodelernspant.1)usenpynernrump.1)usenpynerp.dloatp.ploatm64、フォーマーpreciscontrolatatypes。

numpyisessentialfornumericalcomputinginpythonduetoitsspeed、memory efficiency、andcomprehensivematicalfunctions.1)それは、performsoperations.2)numpyArraysaremoremory-efficientthanpythonlists.3)Itofderangeofmathematicaloperty

contiguousMemoryAllocationisucial forArraysは、ForeffienceAndfastelementAccess.1)iteenablesConstantTimeAccess、O(1)、DuetodirectAddresscalculation.2)itemprovesefficiencyByAllowingMultiblementFechesperCacheLine.3)itimplifieMememm

slicingapythonlistisdoneusingtheyntaxlist [start:stop:step] .hore'showitworks:1)startisthe indexofthefirstelementtoinclude.2)spotisthe indexofthefirmenttoeexclude.3)staptistheincrementbetbetinelements

numpyallows forvariousoperationsonarrays:1)basicarithmeticlikeaddition、減算、乗算、および分割; 2)AdvancedperationssuchasmatrixMultiplication;

Arraysinpython、特にnumpyandpandas、aresentialfordataanalysis、offeringspeedandeficiency.1)numpyarraysenable numpyarraysenable handling forlaredatasents andcomplexoperationslikemoverages.2)Pandasextendsnumpy'scapabivitieswithdataframesfortruc


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

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

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

ホットトピック









