この記事では、本当の意味で
AWS Lambaと
pythonを友達にしようとすることについて説明します。 本当の意味では、Pythonから直接サービスと対話する(ラムダ関数を作成、更新、呼び出す)能力を理解しています。 AWS Lambdaとpythonに興味がある場合は、
lambdifyライブラリの概念実証を
提示します。
免責事項このライブラリは進行中の作業であり、概念実証であるため、フィードバックは大歓迎です。
最近、
AWS Lambdaなどのサービスが非常に人気があります。 それが何で、何が一緒に食べられるかは、すでに
ここに書かれてい
ます 。 この点で、Lambdaを操作するための多くのツールが登場しました。たとえば、
Zappa 、
python-lambdaなど、Pythonで書かれたツールが含まれます。 しかし、それらはすべて、ラムダ関数を動的に作成する機能の欠如によって統一されています。 何らかの方法で、ユーザーは、ラムダハンドラーコードを含むファイルを間接的に操作する必要があります。これにより、プログラムで使用することができなくなります。
同様に、
lambdifyはこの制限をバイパスし、数行のコードを記述して、機能するラムダ関数を取得できるようにします。
設置pip install awscli aws configure pip install lambdify
これで、5行のコードでラムダ関数を作成できます。
from lambdify import Lambda @Lambda.f(name='echo') def echo(*args, **kwargs): return args, kwargs
これで、
AWSコンソールに移動すると、まったく新しいエコーラムダ関数が表示されます。 機能の1つは、元の関数の署名がドキュメント
http://docs.aws.amazon.com/lambda/latest/dg/python-programming-model-handler-types.htmlで定義されている署名に自動的に削減されることです。
上記の例があまり説得力がないと思われる場合は、次のスニペットを考えてみてください。
@Lambda.f(name='meta') def meta(name=None): @Lambda.f(name=name or 'foo') def foo(*args): return 42 return foo.get()
...はい、はい、これは新しいラムダを作成するラムダです...

...そしてそれはすべてクラウドで起こります。 確かに、このためにはAmazonの役割とポリシーを操作する必要がありますが、これはこの記事の範囲には含まれません。
現実の世界に戻りましょう。
Celeryや
RQなどのタスクキュー(以下OZ)の使用に遭遇したユーザーは、インターフェイスとの類似性に気付くかもしれません。 そして、彼らは正しいでしょう:lambdifyの目標の1つは、OZを使用してシステムをスケーリングする便利さと、AWS Lambdaが提供する利点、特にワーカーを管理し、スケーラビリティを提供する必要性の欠如(従来のOZとは異なります)を組み合わせることです。 おそらく将来、このツールはOZの使用からAWS Lambdaへの移行を支援します。
もちろん、ライブラリがアルファ版であることは注目に値します。インプラント、新機能、バグ修正などについては多くの計画があります。
この記事の目的は、Pythonのメタプログラミングとイントロスペクションの観点から、Lambdaの新しい外観を読者と共有することでした。 これがこのプロジェクトの発展の原動力となることを願っています。参照: