AWS LambdaがPython3.6に対応したので使ってみた

AmazonLambda

こんにちは、LambdaとPythonが大好きな臼田です。

LambdaがPython3系に対応しました。

AWS Lambda Supports Python 3.6

早速使ってみましょう。

なお、macでのPython3.6環境の構築は下記を参照して下さい。

AWS LambdaがPython3.6に対応したのでpyenvとpyenv-virtualenvで環境構築してみた

コンソールの状態

2017/04/19現在では下図のようになっています。

170419_lambda_create

Pythonは既存の2.7に加えて3.6が選択できるようになっています。

選べるテンプレート(blue print)は6種類あります。

170419_lambda3_6_blueprint

ただ、せっかくPython3.6に対応しているので、Python3.6で新しく実装された機能を利用してみようと思います。

Python3.6のスクリプト実装

使ってみる機能

Python3.6で新しく実装された機能の中に、f-stringというものがありました。

f-stringはstr.format()と同じような利用ケースで、str.format()よりも冗長的でない書き方が出来ます。

Python3.6 から追加された文法機能

上記が参考になります。

作成したスクリプト

from datetime import datetime

def lambda_handler(event, context):
 input_date = datetime.today()
 yukari = '田村ゆかり'
 birth = datetime(1976, 2, 27)
 month_17 = ((input_date.year - birth.year) - 17) * 12 + (input_date.month - birth.month)
 if input_date.day < birth.day: month_17 -= 1
 print(f"{input_date.strftime('%Y年%m月%d日')}の{yukari}は17歳と{month_17}ヶ月")

これは田村ゆかりさんの年齢を確認して出力するスクリプトです。

私の好きなアーティストである田村ゆかりさんが今何歳なのかがわかります。

f-stringで直接関数の評価などを行っています。

下記のブログにインスパイアされました。

Python 3.6の新機能f-strings(フォーマット文字列リテラル)について

では実装してみましょう。

実装

ブランク関数からLambda関数を作成します。

170419_lambda3_6_blueprint_a

トリガは必要ないのでそのまま次へ進みます。

170419_lambda_trigger

名前を適当に、ランタイムはPython3.6を選択します。

170419_lambda_runtime

上記のスクリプトをインラインで記載します。

その下のロールの設定は、任意で大丈夫ですが、今回はロールを「テンプレートから新しいロールを作成」として作成しています。ポリシーテンプレートは特に必要なポリシーもないので空欄で次へ進みます。

170419_lambda_role

作成するLambdaの確認画面です。「関数の作成」へ進みます。

170419_lambda_check

作成が完了しました。「テスト」を押します。

170419_lambda_compleete

今回のスクリプトは入力値を無視するので、デフォルトのHello Worldのまま「保存してテスト」で実行します。

170419_lambda_test

ログの表示から、f-stringが適切に評価されていることが確認できました。

170419_lambda_log

これで、AWS LambdaでPython3.6のスクリプトが動作していることが確認できました。

おまけに田村ゆかりさんが17歳であることも確認できました。

最後に

Python コミュニティとしては PEP 373 でPython2.7のサポートを2020年までとしているようなので、少し先ですが終りが見えています。

今はPython3系を使われる方も非常に多いのではないでしょうか?

私はこれまでPython2系を利用してきましたが、これを機会にPython3系を勉強していこうと思います。