免責事項
このライブラリは進行中の作業であり、概念実証であるため、フィードバックは大歓迎です。
最近、 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 # , , # echo.create() if __name__ == '__main__': import getpass echo(msg='Hello, {user}!'.format(user=getpass.getuser()))
これで、 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の新しい外観を読者と共有することでした。 これがこのプロジェクトの発展の原動力となることを願っています。
参照: