データ活用

APIを使ったデータ取得・加工処理をしたときSnowflake/AWSどちらのコストが安い?

えび

本記事では、コンピューティングからテーブル格納までをSnowflake上で全て行った場合と、前者をAWSへ寄せて、テーブル格納のみをSnowflakeで行う2つのパターンでどちらがコストを抑えることができるかを紹介します。

処理フローの違い

Snowflakeで処理

  1. SnowflakeのNotebookもしくはWorksheet上にPythonコードを記述した関数を作成
  2. INSERT INTO SELECT文もしくはMERGE文でテーブルへデータ挿入

こちらの処理の流れについては下記の記事にて紹介しています。

あわせて読みたい
Snowflake上でPythonを実行して外部サービス(Instagram)からデータを取得する
Snowflake上でPythonを実行して外部サービス(Instagram)からデータを取得する

AWS

  1. Lambda上にPythonコードを記述。取得したデータをS3へCSVとして格納。
  2. COPY INTO文を使ってテーブルへデータをインポート

こちらの手法については下記の記事にて紹介しています。

あわせて読みたい
【AWS】外部サービスのデータをLambdaから取得→結果をS3へ格納しSnowflakeとの低コストな連携を実現する
【AWS】外部サービスのデータをLambdaから取得→結果をS3へ格納しSnowflakeとの低コストな連携を実現する
あわせて読みたい
【S3←Snowflake】S3にあるCSVをSnowflakeから定期インポートする
【S3←Snowflake】S3にあるCSVをSnowflakeから定期インポートする

コスト計算

本記事ではコンピューティング(Pythonの実行時間)のコストに焦点を当ててみます。

下記はInstagramの場合を例に、取得するデータごとのPythonの実行時間を記録したものです。あまり件数自体も多くなく、数分で終わっている点はご了承ください。

取得データデータ取得・加工処理時間クレジット消費
アカウントのプロファイル情報5.1秒1 x 1/60 = 1/60
投稿情報90.1秒2 x 1/60 = 2/60
投稿へのコメント113.1秒2 x 1/60 = 2/60
エンゲージメント(REEL)16.5秒1 x 1/60 = 1/60
エンゲージメント(FEED)124.7秒3 x 1/60 = 3/60

ウェアハウスはX-Small、Standardタイプとしています。こちらを日次バッチで毎日実行した場合、コンピューティングについてひと月(30日)でどの程度かかるか試算してみます。

Snowflakeで処理

Snowflakeは最低でも1分単位のクレジット課金です。仮に10秒で終わる処理も1分として、X-Smallであれば1/60クレジット消費されます。

表の右の列を合計すると、およそ9/60クレジット消費しています。本記事の投稿時点では1クレジットあたり$2.85なので、こちらの処理を一度実行するたび、$2.85 × 9/60 = $0.4275かかります。したがって、ひと月あたり下記の程度かかります。

$0.4275 × 30日 = $12.825/月

こちらにINSERT INTO SELECTによる挿入処理の時間分加算されますが、今回は無視して話を進めちゃいます。

AWS

LambdaでのPython処理およびS3への格納という構成になります。1日一回実行なので、リクエスト数は30、実行時間は表から合計350秒程度、メモリは512MB(0.5GB)となっています。

これが意味するところは、Lambdaは無料枠で全然収まるということです。他はS3への保管料金になります。

こちらはAWSのコンソール画面での紹介で少々粗い計算ですが、月で$1前後になるかと思います。

SnowflakeではS3からのインポートにCOPY INTO文をそれぞれ実行します。現状の件数では、60秒以上かかることはないため、データ取得の数5つ分 x 1/60 × $2.85 = $0.2375が一回の実行にかかります。よって、ひと月(30日)実行すると下記のようになります。

$0.2375 × 30 = $7.125/月

ここにAWSの料金($1)を足して下記になります。

$7.125 + $1 = $8.125/月

結論

前章をまとめるとこのようになります。

  • Snowflake:$12.875 + [INSERT INTO SELECT処理でかかる従量料金]
  • AWS:$8.125

すなわち、コンピューティングをAWS側に寄せることですくなくとも$4/月以上のコスト削減が見込めます。INSERT INTO よりもCOPY INTOで代替することを推奨する点は、Snowflakeの公式ドキュメントでも紹介されているので、実際の効果についても確認できました。

AWSとSnowflakeでうまくコストを下げられるように、計算やデータ格納の役割分担を検討できると良いですね!

ABOUT ME
えび
えび
データエンジニア
記事を読んでいただいている皆さんが理解しやすくかつ手軽に試せることを意識して、データの蓄積、加工、分析・可視化のノウハウを発信していきます!Pythonを使ったデータ収集基盤作成及びそのノウハウ発表で登壇したりしています。
記事URLをコピーしました