この記事は 『CRESCO Advent Calendar 2017』 18日目の記事です。
先端技術事業部のどこかの部署に所属しているisaです。
最近はモバイルアプリよりバックエンド(主にAPI)開発を担当することが増えてきました。
最初はXcode9にビルトインされたXcode Serverを利用したCIについて書こうと思いましたが、
最近モバイルアプリ開発していないので、AWS re:Inventネタ(AWSのCloud9)にすることにしました!
なお、利用するまでの流れや利用方法は色々なところに記事が上がっているので、
今回の記事では、実際に利用してみてどう感じたかを中心にまとめています。
Cloud9とは、クラウド環境で利用できるIDE(統合開発環境)です。
2016年にAWSが買収していましたが、去年のre:Inventでサービスとして提供することを発表していなかったため、
正直提供することはしないのでは?と思っていました。
それがなんと、今年のre:InventでAWSがサービスとして提供することを発表したため、早速利用してみました。
書こうと思いましたが、12/5の記事で十分な気がするのでリンクで済ませます!
私の場合は、既存のEC2に割り当てるのではなく、新規で立ち上げることにしました。
標準ではAmazon Linux環境で構築されるようです。
Cloud9を利用していない時に環境を自動的に停止する設定が存在しており、
コストを意識したオプションが最初から用意されていました。
よかった点
- AWSが提供するサービスと親和性が高い
- マシンを選ばずに開発ができる
主にLambda Functionの開発における感想です。
Lambdaとはサービス的には分離していますが、Lambda Functionを開発する上での必要な要素は一通り揃っていると感じました。
具体的に、
- Lambda Functionのテンプレート(BluePrint)がそのまま読み出せる
- ローカルデバッグが用意されている(裏でSAM Localでも動いているのか…?)
- 作成したLambda Functionのデプロイをサポートしている
という点が開発スピードを上げてくれるのではと思いました。
デプロイ用にSAMテンプレートを生成してくれるため、それをベースに色々と細かい設定ができそうでした。
[デバッグの様子]
これ、前はSAM Localで実施してたな…
[デプロイ後]
ちゃんとデプロイされてました。
いまいちな点
- 作成時にLambda Functionのトリガが標準でAPI Gatewayしか選択できない
- 新規作成した’ファイル’は標準でLambda Functionとして認識されない
- EC2コスト
Lambdaといえば、様々なトリガでLambda Functionが実行できますが、残念ながらAPI Gatewayしか選択できませんでした。
デバッグが実行しにくいということが要因かもしれませんが、せめてトリガくらい選択できて、それのSAMテンプレートくらい作ってくれても良いと思いました。
どうやらSAMテンプレートを用意しないとLambda Function扱いにならないようです。
Lambda Function扱いにならないと、デプロイができず、非常に面倒でした。
なお、Cloud9で最初からLambda Functionを作成するならば、SAMのテンプレートが自動で生成されるため、こういった状況にはなりません。
新規のEC2インスタンスを作成してCloud9を動かす場合、別途EC2+EBSのコストが発生します。
(それをある程度抑えるオプションがあるとはいえ…)
[EC2分のコスト]
どれくらい利用するかによりますが、環境構築にかける時間を取るか、EC2のコストのどちらを取るかになりますが、無料で使えるわけではないというのに注意が必要です。
なお、無料枠が残っていれば、ある程度は無料で利用することも可能です。
業務で使えるのか考えるため、下記でお試しAPIを開発してみました。
ソースコード管理 : git(CodeCommit)
デプロイ : SAM(API GatewayはインラインSwagger形式 / Cloud9経由でデプロイ)
開発 : Cloud9(ランタイム > Node.js / テスト > Mocha + Chai + rewire)
実行環境 : Lambda
[イメージ]
そこそこ利用できると思います。
新規で開発環境を構築する必要がある場合、それに必要な時間は大幅に短縮できました。
これならば、新規で参画するメンバーがいたとしても、割と早く作業に取りかかれると感じました。
また、プロジェクトの環境情報を開発者のマシンと分離できるため、環境の整理が非常に楽でした。
ちなみに、開発環境を全く整備していないWindowsマシンを用意して試しましたが、途中で環境の準備が面倒になってやめてしまいました..
デプロイ操作も単純だったので、運用面も楽かもしれません。
(実業務だとCIツール使うことの方が多いかもしれませんが)
今回は試してませんが、きっとIAMでデプロイできるユーザを絞ることもできるでしょう。
コストはきっと、会社が持ってくれるので、気にせずに済みそうなのも良いです。人数増えて利用時間が増えると高くなるかもしれないけど。
IDE単体としては、利用できるプラグインに制約があったり、多少癖はありそうですが、AWSのサービスと組み合わせるとかなり使い勝手が良いように思えました。
大規模ではもう少し運用を考えた方がよさそうですが、どこかで試したいものです。