AWS
cloud9
lambda

AWS Cloud9でLambdaアプリの開発をしたり共同編集をしてみた

この記事はAmazon Web Services Advent Calendar 2017の9日目の記事になります。

結構気になっていたAWS re:Invent 2017での発表があります。

AWS Cloud9

です。実際どの程度便利なのか、使ってみました。

環境作成

利用開始をしようとすると、環境作成のページに飛ばされました。まずはAWS Cloud9が動く環境を準備する必要があるんですね。(そういえばオリジナルのCloud9もそうだったような。。。)

スクリーンショット 2017-12-05 19.31.16.png

とりあえずテスト環境を作成します。
テスト環境なので、設定はデフォルトで。30分以上放置してたら作成したインスタンスを止めてくれるとか、気が利いてますね!

スクリーンショット 2017-12-05 19.48.41.png

環境作成の直前に推奨の設定やらが案内されましたが、とりあえず無視します。

スクリーンショット 2017-12-05 19.52.29.png

環境が作成されるまでしばし待ち。。。(しかし画面かっこいいな)

スクリーンショット 2017-12-05 19.53.49.png

コーディングしてみる

環境が整えばいよいよコーディングです。が、色々と便利そうなビューになってます。
タブでファイルが分割できたり、

スクリーンショット 2017-12-05 20.29.42.png

ターミナルがあったり。これもうVisual Studio Codeと変わらないな。

スクリーンショット 2017-12-05 20.30.45.png

ちなみに実態はEC2インスタンスなので、上記のようにコマンドでライブラリをインストールすることができます。実際にインストールすると、左側のフォルダツリーにリアルタイムに構成が反映されます。

スクリーンショット 2017-12-05 20.30.58.png

で、コーディングはエディタのキャプチャの通り書いてみました。GoogleにRequestを飛ばす一般的な処理です。

実行してみる

もちろんこのままだとファイルパスがマッチせずに実行時にインポートエラーが発生するので

スクリーンショット 2017-12-05 20.30.31.png

こんな感じでライブラリをインストールするようにして、

$ mkdir lib
$ pip install requests -t ./testrequests/testrequests/lib/

ソースと同じディレクトリにライブラリをインストールするようにします。

スクリーンショット 2017-12-06 7.30.06.png

コードも少し修正しました。

import sys
import os

sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)), 'lib'))

import requests

def lambda_handler(event, context):
    res = requests.get("http://www.google.co.jp/")
    return res.status_code

これでうまく動きそうです。

もう一回実行してみる

スクリーンショット 2017-12-06 7.30.36.png

きちんと結果が得られました。無事動いたようです。
ただ、1点気をつけないといけないのは、あくまでこれはEC2インスタンス上のエディタで実行した、というだけなので、実際のLambdaには何も保存されていません。

ちなみに今回はPythonを使ったのでデバッグはサポートされていませんが、Node.jsやPHP、Goであればデバッグ実行もできるようです。これは便利。

スクリーンショット 2017-12-07 1.05.31.png

最初にファンクションを作成時、Lambdaは登録されるのですが、デプロイするまでは中身は初期化されたままになっています。(当然ではあるのですが、忘れやすいかもこれ)

スクリーンショット 2017-12-07 1.13.48.png

Lambdaでファンクションを選択しても、先ほど書いたコードは存在していません。デプロイをするとLambdaに実際に反映されるようになります。

デプロイをしてLambdaに更新を反映する

Cloud9上からLambdaへのデプロイを行います。やり方はとても簡単で、ファンクションリストから該当のファンクションを右クリックして「Deploy」を選択するだけ。正直Serverless Frameworkなどを使うよりずっと簡単です。

スクリーンショット 2017-12-07 1.16.42.png

これだけの操作でLambdaが更新されます。

共同編集をしてみる

他にアカウントを作成して、共同編集を試してみました。テスト用に「test」というアカウントを作成します。画面右上の「Share」より共有設定を開きます。

スクリーンショット 2017-12-07 1.22.19_dec.png

するとこんな感じの共有用URLが表示されますので、これを別アカウントのブラウザで開いてみます。が、共有の設定をしないともちろんアクセスできません。400で怒られます。

スクリーンショット 2017-12-07 1.23.02_dec.png

共有設定で自分以外に共有したいIAMユーザーのアカウントを追加すれば設定は完了です。

スクリーンショット 2017-12-07 1.23.21.png

testユーザーでアクセスすると、共有設定画面のユーザーのステータスがOfflineからOnlineに変更になります。

スクリーンショット 2017-12-07 1.23.47.png

あとはお互いに編集しているポイントがリアルタイムに反映されていくので、とても便利ですね。キャプチャだけだとなんのことかわかりづらいですが、自アカウントで編集したものがリアルタイムでtestユーザーの画面にも反映されます。

スクリーンショット 2017-12-07 1.24.44.png

スクリーンショット 2017-12-07 1.25.00.png
※キャプチャ右上のアカウントの並びが異なるので、それぞれ異なるユーザーの画面だということは見てわかるかな(^^;。

実際にAWS Cloud9を使ってみての感想

思った以上にできることが多いので、かなり可能性を感じました。自分は今仕事の関係上ミャンマーにいるのですが、多少ネットが遅くてもリアルタイムにインターネットにアクセスできれば、開発していて不便だと感じることはありませんでした。実際に開発したパッケージをデプロイしようとした際には、ローカル10MBなどの重いファイルをアップロードするために何分も待たされる、というのもCloud9ならなさそうですし、ありがたい新サービスです。