スクレイピング 遅すぎる問題
- Node.jsのライブラリ「Puppeteer」でWEBスクレイピング
- Google Cloud Functionsに置いてJSONを返すHTTPトリガー化
- Google App Scriptで上記トリガーからJSON取得
- Spread Sheetに整形して貼り付け
という構成でスクレイピングデータを加工して利用しています。
が、スクレイピングスクリプトが重くてめちゃくちゃ時間がかかるので、どうにかならないかと思い、Google Cloud Functionsと同様のサーバーレス環境FirebaseとAWS Lambdaを比較しました。
Firebase(Cloud Functions for Firebase)
概要
Firebaseの中にあるCloud Functionsは、そもそもGoogle Cloud Functionsとほぼ同様のものでした。
Google Cloud Functions は、イベント駆動型アプリケーションを作成するための Google のサーバーレス コンピュート ソリューションです。Google Cloud Platform チームと Firebase チーム共同のプロダクトです。
https://cloud.google.com/functions/docs/concepts/functions-and-firebase?hl=ja
何が違うかというと、Firebaseという統合環境の中での連携が楽、という差のようなので、Google Cloud Functionsの上位互換、といったことではなさそうです。
ランタイム
- Node.js 6,8,10
- Python 3.7
- Go 1.11
料金
※2019/8/20現在
Cloud Functions | Spark プラン [ 無料 ] | Flame プラン [ $25/月] | Blaze プラン [ 従量制 ] |
---|---|---|---|
呼び出し | 12.5 万/月 | 200 万/月 | $0.40/百万 |
GB 秒 | 4 万/月 | 40 万/月 | $0.0025/千 |
CPU 秒 | 4 万/月 | 20 万/月 | $0.01/千 |
アウトバウンド ネットワーキング | Google サービス専用 | 5 GB/月 | $0.12/GB |
呼び出し料金は 1 回あたり $0.0000004 の単価制で、関数の結果や使用期間に関係なく請求されます。ただし、毎月最初の 200 万回までは無料です。
料金詳細
https://cloud.google.com/functions/pricing?hl=ja
料金も、Cloud Functions for FirebaseとGoogle Cloud Functionsでは差がなさそうです。
使ってみての感想
Cloud Functions for FirebaseはGoogle Cloud Functionsと同じなので、Google Cloud Functionsを触ってみての個人的感想ですが、非常にとっつきやすいです。特に元非エンジニアで駆け出しエンジニアの私のような存在には大変ありがたい!設定時の操作に迷うことはありませんでした。
さくさくと設定できて、HTTPトリガーがすぐに使えるので非エンジニアの方でも手を出しやすい印象です。
AWS Lambda
ランタイム
- Node.js 8.10, 10
- Python 2.7, 3.7, 3.6
- Ruby 2.5
- Java 8
- Go 1.x
- .Net Core 2.1
- .Net Core 1.0
Cloud Functionsよりも豊富ですね。
料金
※2019/8/20現在
AWS Lambda | 無料利用枠 | 以降 |
---|---|---|
呼び出し | 100万件/月 | リクエストあたり 0.0000002USD |
GB 秒 | 400 GB-秒 | GB-秒あたり 0.0000166667USD |
料金詳細
https://aws.amazon.com/jp/lambda/pricing/
Cloud Functionsは毎月最初の200万回が無料なので、Firebaseの方が無料で使える範囲が大きい様です。
使ってみての感想
スクリプトをデプロイしただけではHTTPトリガーにはならず、API Gatewayを利用してトリガー化する手間がありました。
設定も少々複雑で初学者にとってはとっつきにくい印象ですが、カスタマイズも豊富で、他のAWSサービスとの連携も取れるので、堅牢かつ柔軟性の高い環境を構築できそうです。
まとめ
Cloud Functions for Firebaseは非エンジニア、初学者向きで、本当に簡単なスクリプトを利用する際にはおすすめです。
AWS Lambdaはエンジニア向きで、詳細な要件に合わせて柔軟なシステムを構築したい場合はこちらがおすすめ。
と、現段階の理解レベルでは結論づけました。
語彙力のなさや理解度の浅さは当然あるかと思うので、ご意見大歓迎です。
理解が深まった時には、加筆修正、もしくは別記事をあげる等してきたいと思います。
今後のこと
元々の課題のスクレイピング遅すぎる問題は、AWS Lambdaでの構築時にはAPI Gatewayのタイムアウトでうまいこと移行ができず、そもそも組んでいるスクリプトがクソなのでは?という疑問が湧いてきたので、当面はCloud FunctionsとNode.jsの学習に取り組む所存です。