2:ローカルでの開発環境構築こんにちは。R&Dグループの高橋寛治です。Lambdaを利用したAPI開発の際の開発環境構築について紹介します。Lambdaのおさらい前回の記事で触れましたが、環境構築に必要な知識について簡単におさらいします。Linuxが動作しているインスタンスに任意のコードをアップロードして動作させます。動作の制約は、タイムアウトがあることと使用メモリーの設定により動作時間が変化することです。Lambda関数の発火は、対象となるイベントが発生した際にイベントの内容がjsonで引数として渡され、実行されます。Linuxと同じもしくはほぼ同等であること、タイムアウトや使用メモリー量について考慮できること、イベントを受け取って処理することです。Linuxにインストールされていない任意のモジュールやバイナリーの動作が困難になります。どんな方法があるか環境構築は、2つに大きく別れると思います。環境構築の方法は、大きく2つに別れると思います。同等の環境を準備する方法と、LambdaのWebサービス上で開発する方法です。同等の環境を準備するには、以下の方法が挙げられます。Linuxを準備jsonで記述されたイベントを受け取り実行することをシミュレートするものも必要です。Linuxの入ったEC2インスタンスがあったため、python-lambda-localとEC2インスタンスを用いて開発を行いました。Modelが、サンプルを見たところ、便利で開発からデプロイまでできそうです。一つの方法である、LambdaのWebサービス上での開発ですが、エディターがリッチになってきたため、標準モジュールを用いて簡単なアプリケーションを作成する分には、それで事が足りてしまいます。これらを実際に試してみて、また結果を記事として書ければと思います。次に、python-lambda-localとEC2インスタンスを用いた開発環境の一例を紹介したいと思います。AMIのEC2インスタンスを用意します。インスタンスタイプは、Lambda関数の実行環境ということで小さくて構いません(私はt2.smallを使っています)。EC2インスタンスで作業するために、Lambdaに付与したいIAMロールをEC2インスタンスに割り当てて、同等の権限で作業できます。次に、python-lambda-localをEC2インスタンスに導入します。Python環境の構築ですが、プロジェクトのディレクトリーにVirtualenvなどを用いてPython3.6の環境を構築することをお勧めします。python-lambda-localは、pipでインストールできます。event.jsonをイベントとして投げる例です。10これを実行するとターミナルにログが吐かれます。Lambda上で実行した際にCloudWatchで閲覧できるログと同等です。Lambdaと同じとは限らないため、あくまでも目安となります。LambdaのCPU性能は、メモリー割り当て量を増やせば増やすほど、高速になるようです(参考)。ある構成ですが、EC2インスタンスとpython-lambda-localを用いた私の開発体制を紹介します。コーディングは、ローカルのPyCharmのリモート機能を用いて行います。EC2インスタンス上のPython環境を読み込み自動で補完してくれます。Upload機能により更新したファイルは、自動でEC2にアップロードしてくれます。次に、Lambda関数の実行についてですが、以下のような記述のrun.pyというスクリプトを作成します。shell=True)PyCharmの設定によりEC2インスタンス上でrun.pyを実行することで、PyCharmから手軽にリモートで動作確認を行うことができます。便利な環境で開発を効率良く開発を進める上で、同等の環境で開発することやデバッグが行いやすいことは重要です。新しいツールを使うためには、学習コストもそれなりに要するため、開発規模やそのときに取れる工数によって、何を選ぶか決めています。LinuxのEC2インスタンスとpython-lambda-localを組み合わせた例の紹介を行いました。次回の記事では、エラー処理について紹介したいと思います。自然言語処理の研究に取り組み、解析ツールの開発や機械翻訳に関連する研究を行う。大学院を卒業後、2017年にSansan株式会社に入社。現在はキーワード抽出など自然言語処理を生かした研究に取り組んでいる。Members誰も思いつかないやり方を考え抜く。Sansanエンジニアであることの面白さ。