AWS Cloud9を使ったLambdaの開発環境を整える(Python3.6)
こないだのre Inventで発表のあったAWS Cloud9。クラウドベースのIDEでLambdaの開発が行えるというものです。
さっそくAWS Cloud9を構築してLambdaの開発環境を整えてみました。
AWS Cloud9構築
構築は簡単でした。以下のリンクの手順に沿っていけば迷うことないと思います。
dev.classmethod.jp
Lambda関数作成
最初のコードはblueprintから簡単に構築できます。welcomeタブの「Create Lambda function」から構築しましょう。
ここではPython 3.6のs3-get-object-python3を作成しました。
ローカル実行
トリガーに選択できるのはAPI GatewayのみでS3はありませんでした。
payloadが指定できるので、事前にS3にファイルを配置して直接JSONを指定します。
docs.aws.amazon.com
{ "Records":[ { "eventVersion":"2.0", "eventSource":"aws:s3", "awsRegion":"us-east-1", "eventTime":"1970-01-01T00:00:00.000Z", "eventName":"ObjectCreated:Put", "userIdentity":{ "principalId":"AIDAJDPLRKLG7UEXAMPLE" }, "requestParameters":{ "sourceIPAddress":"127.0.0.1" }, "responseElements":{ "x-amz-request-id":"C3D13FE58DE4C810", "x-amz-id-2":"FMyUVURIY8/IgAtTv8xRjskZQpcIZ9KG4V5Wp6S7S/JRWeUWerMUE5JgHvANOjpD" }, "s3":{ "s3SchemaVersion":"1.0", "configurationId":"testConfigRule", "bucket":{ "name":"XXXXXXXXXXXXXXXXXXXXX", "ownerIdentity":{ "principalId":"A3NL1KOZZKExample" }, "arn":"arn:aws:s3:::XXXXXXXXXXXXXXXXXXXXX" }, "object":{ "key":"YYYYYYYYYYYYYY.yml", "size":1024, "eTag":"d41d8cd98f00b204e9800998ecf8427e", "versionId":"096fKKXTRTtl3on89fVO.nfljtsv6qko" } } } ] }
Lambda(local)を選択してRunボタンを押してローカル実行します。
サードパーティ製のライブラリを使用する
最初からpython3は使用できました。python2であればpipも入っていたのですが、python3には入っていなかったのでまずはpipのインストールから。
bashのコマンドプロンプトがあるので環境は好きに構築できました。
docs.aws.amazon.com
インストールするときはLambdaファンクションの作業ディレクトリのローカルにインストールします。
qiita.com
$ curl -O https://bootstrap.pypa.io/get-pip.py $ sudo python3 get-pip.py $ cd function_name $ sudo /usr/bin/pip-3.6 install pyyaml -t .
※よくみたらpip3は最初からあったかも。PATHが通ってなかっただけかも。
デプロイ
Local FunctionsのLambdaファンクションを選択して↑ボタンを押すとデプロイが始まります。
Remote functionsに追加されます。(最初からあったかも)
コンソールからLambdaファンクション確認したら中身が更新されてました。
リモート実行
Lambda(remote)を選択してRunボタンを押します。
ここで権限まわりの確認ができます。S3のアクセス権がないのでエラーが出ると思います。
Lambdaファンクション作成時に作成されたIAMロールがあるので、それにS3のアクセス権を追加します。
pytestでテスト
$ sudo /usr/bin/pip-3.6 install pytest -t .
pytestをインストールします。pytestでテストを書いておしまいです。
最後に
けっこう良さそう。これでAWS Cloud9で開発する準備が整った気がします。