検索
特集/連載

クラウドでまさかの「高額請求」を招く意外な“設定ミス”の正体AWSのサーバレスで節約する【後編】

サーバレスコンピューティングはアプリケーション開発を効率化する手法として人気を集めている。しかし、設定を間違えると思わぬコストを生み出すことになる。

Share
Tweet
LINE
Hatena

 サーバレスコンピューティングには複数のメリットがある。プロビジョニングやサーバの管理が不要になり、アプリケーション開発を効率化できる。しかし、クラウドサービスでサーバレスコンピューティングを利用すると思わぬコストにつながる可能性がある。どのようなミスがあるのか。

サーバレスで思わぬ“高額請求”につながるミスの正体

 思わぬコストにつながってしまいやすい設定ミスの例が、CPUやメモリのリソースを過剰に確保する「オーバープロビジョニング」だ。Amazon Web Services(AWS)のコンテナ管理サービス「AWS Fargate」や、サーバレスデータベースサービス「Amazon Aurora Serverless」などのサービスは、オーバープロビジョニングを招きやすい。

 AWS FargateでOS「Linux」をデプロイしたvCPU(仮想CPU)割り当ては月額約29ドルで、メモリ1GB当たりの料金は月額3.20ドルだ。AWS Fargateは、最大120GBのメモリ割り当てと、最大16のvCPUを利用できる。だが、これらのパラメーターやコンテナを必要以上に利用してしまうと、何百ドルもの不要コストが毎月発生する可能性がある。

 Amazon Aurora Serverlessには「Aurora Capacity Unit」(ACU)というパラメーターがあり、このパラメーターによってAmazon Aurora ServerlessのvCPUの数とメモリ割り当てが定義される。ACUの最小値はデータベースごとに構成される。各ACUが月額約86ドルであることを踏まえれば、このパラメーターの不適切なオーバープロビジョニングによっても何百、何千ドル単位の不要コストが発生する可能性がある。

ログの使用を抑える

 ログ記録も不要コストの発生源になる可能性がある。例えば、AWSのサーバレスコンピューティングサービス「AWS Lambda」で用いる関数(イベントを処理するためのコード)はログ一元管理ツールの「Amazon CloudWatch Logs」にログデータを自動的に書き込む。しかし、特定の関数がコード実装の一環としてデータをログに記録すると、コストが跳ね上がる恐れがある。

 ここで前述の毎月260万回実行される関数について考える。この関数が1回の実行で毎回100KBのログデータを書き込むと、毎月259GBのログデータ取り込みが発生することになる。CloudWatch Logsは、1GBのデータを取り込むたびに0.50ドル請求する。つまり、この関数のログデータの取り込みには月額約130ドルかかる計算になる。

 複数の関数を同様のパターンでデプロイすれば、不要なログの取り込み料金と保存料金によって、費用が数千ドルにも及ぶ可能性がある。ログの保持期間が満了しないよう設定していると、保存料金が月額約8ドル増え、結果として1年後には1つの関数につき年額約96ドルを支払う計算になる。

コールドスタートのコスト

 サーバレスコンピューティングには、特定の関数を実行するコンテナのインスタンスが稼働していない場合、それを新たに立ち上げるのに時間がかかる「コールドスタート」という問題がある。

 関数が一定期間呼び出されないとコールドスタートが発生する。コールドスタートが発生すると、通常よりも呼び出しの待ち時間が長くなり、ユーザーエクスペリエンス(UX)に悪影響をもたらす。コールドスタートを軽減するため、AWSは「プロビジョニング済み(関数の)同時実行」という項目を設定できる。この設定により、Lambda関数の実行環境を予め待機させておき、コールドスタートによる待ち時間が生じないようにすることができる。

 ただし、この機能は関数に割り当て済みのGB数、同時実行のリクエスト件数、機能が有効になっている時間に基づいて課金される。つまり、アプリケーションのニーズによっては不要なコストが発生する可能性がある。

TechTarget発 世界のインサイト&ベストプラクティス

米国TechTargetの豊富な記事の中から、さまざまな業種や職種に関する動向やビジネスノウハウなどを厳選してお届けします。

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る