やーまんぶろぐ

気が向いた時にだけ書くブログ

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」から構築しましょう。

f:id:yamano3201:20171205182037p:plain

ここでは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ボタンを押してローカル実行します。
f:id:yamano3201:20171205184425p:plain

サードパーティ製のライブラリを使用する

最初から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ファンクションを選択して↑ボタンを押すとデプロイが始まります。
f:id:yamano3201:20171205183907p:plain

Remote functionsに追加されます。(最初からあったかも)

コンソールからLambdaファンクション確認したら中身が更新されてました。

リモート実行

Lambda(remote)を選択してRunボタンを押します。
f:id:yamano3201:20171205184523p:plain

ここで権限まわりの確認ができます。S3のアクセス権がないのでエラーが出ると思います。
Lambdaファンクション作成時に作成されたIAMロールがあるので、それにS3のアクセス権を追加します。

pytestでテスト

$ sudo /usr/bin/pip-3.6 install pytest -t .

pytestをインストールします。pytestでテストを書いておしまいです。

最後に

けっこう良さそう。これでAWS Cloud9で開発する準備が整った気がします。