71
39

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AWS LambdaとGlue、どっちを選ぶ?

Posted at

はじめに

こんにちは、情報戦略テクノロジーの小林と申します。
今回は初めて記事を書くということで、私が最も実務で触れているバッチ処理におけるlambdaとglueについてまとめることにしました。
ちょっとだけAWSを触ったことがある方に向けて、このふたつの違いを説明し、「じゃあどっちを使えばいいの?」に答えたいと思います。
前提条件として、どちらも時間起動でpythonコードを動かしているものとしています。

根本的にlambdaとは、glueとはなにかを知りたい方は以下のリンクをご参照ください。
https://aws.amazon.com/jp/lambda/
https://aws.amazon.com/jp/glue/

というだけだと寂しいので、キャラクターに見立てて一言書いていきます。
せっかくなので、この子たちはこの後も説明に登場させようと思います。
ちなみにこれらはラノベツクールMVというソフトと、サンプルでもともと入っているデータを使用して作っています。
興味がある方は検索してみてください。

Lambdaちゃん
スクリーンショット (29).png
CloudWatch EventsやS3など連携サービスが多いため選ばれがちなLambda

Glueちゃん
スクリーンショット (42).png
ETL処理を得意とするが、あまり注目されないGlue

結論

モノを説明するときはまず結論から。と言われて育ってきたのでいきなり結論ですが、
バッチ処理では基本的にglueを使おう!簡単なものはlambdaでもオッケー!
で良いかと思います。
理由を以下に書いていきます。

理由そのいち

制限時間(タイムアウトまでの時間)

最初にタイムアウトまでの時間で比較をしたいと思います。
まずlambdaですが、こちらには15分の制限時間があります。
AWSの思想的にもlambdaに大きなデータを扱うような時間がかかる処理を任せることは考えていないということですね。

一方glueはタイムアウトまでの時間が2880分(48時間!)です。
元々ETLに使うことを想定しているサービスということもあり、大量データの処理はこっち!とAWSも思っているようです。

図1.1 15分以上の仕事は断られてしまう
イラスト2.png

図1.2 二日間タイムアウトしないGlue
ichi.png

理由そのに

コスト

それぞれ10分間動かしたときの料金は以下の通りです。
Glue:$0.15
Lambda(メモリ128):$0.1248
Lambda(メモリ3008):$2.9382
※こちら料金を古いもので見てます。最新の料金は公式ページをご確認ください。

Lambdaは計算方法が結構あいまいで、メモリによって料金が大幅に変わるのですがご覧の通りメモリ最大で動かそうとすると大変なことになってしまいます。
ただし、Glueは最低でも10分の料金からでLambdaはミリ秒で計算、しかも無料時間があるためキチンと調整したらLambdaのほうが安くなるということもあります。
例えばメモリ128のLambdaで3秒かかる処理をしたときの料金は上記のものより格段に安いですが、Glueで同じことをやっても料金が変わりません。

図2.1 すぐ終わる仕事はコストも少ないLambda
kosuto1.png

図2.2 簡単な仕事でも高コストなGlue
kosuto3.png

図2.3 時間がかかる処理はものすごく高コストになってしまうLambda
kosuto2.png

図2.4 10分で終わる処理ならコストが変わらないGlue
kosuto4.png

理由そのさん

そもそもどっちでもやりたいことはできる

これを言ってしまうと元も子もない気がしないでもないですが、lambdaでもglueでも指定のプログラムを動かしている箱にすぎないので、やろうと思えばどちらでも同じことはできます。
ですので、システム構成やテーブルの作りにあわせて柔軟にサービスを選ぶのが良いと思います。
例えば大きい機能を分割することでタイムアウトさせることなくLambdaを実行させたり、逆に小さい機能をまとめてGlueに任せるのも手段のひとつです。

図3.1 Lambdaをふたつに分割することでタイムアウトを防ぐ
san.png

図3.2 いっぺんに仕事を任せることでコストダウンさせる
san2.png

おわりに

以上の理由で結論に至ります。

バッチ処理では基本的にglueを使おう!簡単なものはlambdaでもオッケー!
メジャーすぎてなにかと使われがちなLambdaですが、GlueなどAWSには他にも便利なサービスがありますので、ぜひシステムを作るときに検討してみてください。
スクリーンショット (55).png

71
39
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
71
39

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?