Slide 1

Slide 1 text

Azureコストは水道代 イオンスマートテクノロジー株式会社 第47回 Tokyo Jazug Night 2024年3月21日

Slide 2

Slide 2 text

Agenda • 自己紹介 • 会社紹介 • イオンスマートテクノロジーとAzureの歴史 • Azureコストとの闘い • なぜAzureコストは水道代なのか • まとめ

Slide 3

Slide 3 text

自己紹介

Slide 4

Slide 4 text

自己紹介 CTO室SREチーム所属 岩崎 隆至 プログラマーを経てインフラエンジニアで キャリアを重ねる Azureを本格的に使い始めたのは3年前から Azureマネーは好きではないがマネーは好き だ。Azureマネーは難しい

Slide 5

Slide 5 text

会社紹介

Slide 6

Slide 6 text

会社紹介

Slide 7

Slide 7 text

会社紹介

Slide 8

Slide 8 text

iAEONアプリについて 膨大なIDと購買データを集約したアプリ「iAEON」 iAEONはイオングループが提供する決済機能やポイントプログラムを1つにまとめたアプリです。 イオングループ内の多数の事業会社がもつ顧客IDを一つのアプリに統合しています。 提供開始から約3年で、iAEONは500万人以上の会員を抱え、独自のコード決済サービス「イオンペイ」は836万人(23年5月時点)が利用しています。

Slide 9

Slide 9 text

イオンスマートテクノロジーとAzureの歴史

Slide 10

Slide 10 text

イオンスマートテクノロジーとAzureの歴史 2020/10 設立 2021/2 Azure利用開 始 2021/9 iAEONアプリ ローンチ 2022/5 システム追加 2023/8 システム追加 NOW 月のコストは 1年後は2倍 2年後は5倍 3年後は8倍 驚異の天井知らず! コストの推移

Slide 11

Slide 11 text

Azureの環境 サブスクリプション数 43 システム数 9 環境 4

Slide 12

Slide 12 text

Azureコストとの闘い

Slide 13

Slide 13 text

闘う前(構築期間中) • 構築中はコスト削減まで手がまわらない • 余裕なリソースでコストが高くても、すぐ障害は避けたい為、そのままリリースをする • 毎月の合計コストは経理に報告する必要があり、サブスク毎のコストはエクセルで管理 していたので、システムと環境毎のコストは見れる状況になっている コストの仕組みはわからないのでなぜこんだけかかってい るかもよくわからず

Slide 14

Slide 14 text

闘いの始まり(リリース直前、そしてリリース後) えらい人 • どのシステムが高いの? • システムの何が高いの? • なんでコスト増えたの? コストマネジメント画面でどのサービスが高いのか どのシステムが高いのか手探りでしらべてみる

Slide 15

Slide 15 text

Advisorという便利な機能 • Advisorの意見を聞いてみる • その中でシステムに影響出さずに、手っ取り早くコストを削減できる方法を模索する ワタシは「Advisor」 色々コスト削減できそう ・予約を購入 ・節約プランを購入 ・ライトサイジング(リソース最適化) 本番運用に影響のでない施策を実 施しようかな

Slide 16

Slide 16 text

予約の購入 • リソース最適化は後回しで予約を購入する →3年で○○千万のコスト削減 参考ですが最初は「共有」にして無駄なく予約を使用するようにしましたが、共有だと 色々なサブスクに使用されコスト変動が起き管理しずらいので「単一のサブスクリプ ション」に落ち着く • LogAnalyticsの1日のログ量の事前購入をする。100G/日から事前購入あり ○○千万の買い物はドキドキするな 失敗は許されません 3年買って良いのか、このシステム3年使うよな ※返金の上限が年間 5万ドルとなっているから買いすぎ注意

Slide 17

Slide 17 text

ログ量の削減 • アプリの不要な出力ログの停止 • 最初はなんでもかんでもとりあえずLogAnalyticsに保存から、必要なログを保存するよ うに修正 → ○百万/月の削減 最初はとりあえず、全部保存しちゃえ(雑な設計) 少ないより多い方がよいだろ なんでもとっておけば、問題ないだろ

Slide 18

Slide 18 text

停止運用 • 検証環境の夜間休日のリソースの停止 →○万/月削減 • 実施するにあたり開発チームには夜間土日も使いたい時は柔軟に対応しますと伝えて、 停止運用の同意を得やすいように始める • 気を付けた方が良いのは依頼をもとに停止運用を中断した後、再開せずにそのままと なってしまう事があるので、定期的に再開してよいかの確認が必要

Slide 19

Slide 19 text

コストとの闘いの歴史 2020/10 会社設立 2021/2 Azure利用 開始 2021/8 予約購入 2021/9 iAEONアプ リローンチ 2021/10 ログ削減 2022/3 停止運用 開始 2023/3 予約購入 2023/4 価格改定 2023/11 予約購入 2024/1 ログ削減 NOW 色々実施してきましたが、リソースの最適化は実施する事はできませんでした 着手して進めているとリソース不足による本番障害が発生し、最適化の話は保留になる 忙しい時期はコスト削減は後回しになりがち(2022年3月~2023年3月空白の1年間)

Slide 20

Slide 20 text

なぜAzureコストは水道代なのか

Slide 21

Slide 21 text

Azureコストは水道代 • 一通りコストとの闘いが終わると次の闘いの始まり • それはコストの変化に気づく闘い • Azureコストの請求金額を毎月見てコストの変化に気づくのは、毎月の水道料金の請求 書の金額をみて変化に気づく水道代に似ている ※タイトル回収 • 知らないところでコストが変化している状況はまるで水漏れのよう

Slide 22

Slide 22 text

変更に気づかない理由 • 開発優先でコストは優先度が低いので気にせず開発している • 本番影響回避の為に一時的にリソース増強して、そのままとなっている • コストが増える事の連絡はわざわざしない

Slide 23

Slide 23 text

変更を知る方法 • 変更したら、連絡するようにお願いする • Azureポータルのコスト管理画面を毎日チェックする 等が考えられるが • 連絡をお願いしても、忘れそうなのでこの案は却下 • SREチームが毎日確認するのは大変(地獄の所業)なので各システム担当者が自分達で チェックするようにお願いする

Slide 24

Slide 24 text

システム担当者にチェックしてもらえない課題 • Azureコスト管理画面はサブスク名を指定するフィルタリングなのでサブスクの命名規 則が浸透していないと担当するシステムのサブスクを見つけづらい • Azureコスト管理画面でフィルター機能や表示機能を上手く使いこなせず確認したい情 報まで辿りつけない

Slide 25

Slide 25 text

各システム担当者にチェックしてもらう施策 • 分かり易いようにシステム毎のview名のviewを作成 • 対象のサブスクでフィルタリング • 日々のコスト変化を確認しやすくする為に細分性を日単位 • グループ化はService nameにして、DBやVM単位で表示 • Reservation(予約)を表示しないように工夫(値なしを選択) ※次ページでイメージ • 下段の円グラフは必要な情報を表示 • 各システム毎のコスト担当者をアサインしてもらい、担当者に見方をレクチャー • Slackのスケジュールで毎週火曜に見てねと自動チャット、見たらリアクションしてね

Slide 26

Slide 26 text

VIEWの参考例 VIEW名 金額 金額 金額 金額 スコープ名 スコープ名 VIEW名 Reservationを表示しないようにフィルタ サービス毎のコストの変化が比較的分か り易いやすい ※実際のコストの金額は予約を抜いた金 額なので注意 Reservationを表示すると 毎月払いで予約(Reservation)を購入した 日でコストが積み上がり、全体的に縮小さ れてコストの変化が見づらい

Slide 27

Slide 27 text

その結果 • 反応が薄い・・・ • コストより開発が優先 (勝手な想像) • コストは暇な人がみてくれ (勝手な想像)

Slide 28

Slide 28 text

次なる施策 • 毎週Slackの自動通知でわすれないようにしても、毎日チェックするのは大変 • コスト変化がなければ、チェックした時間は無駄になる • そこでAzureの自動検知を活用して、コストの変化あった時のみチェックする • リソースのメトリクスの定点観測会でコストViewの確認を実施

Slide 29

Slide 29 text

コスト変動(異常アラート)を検知 • サブスク毎に異常アラートを作成する • 異常アラートを受け取り、viewで変化した箇所を確認 Cost Alert Subscription メールより頻繁にみるSlackを活用 スラックのチャネルにメールを持たせて、 CostAlertを受け取れるようにする 通知方法はメー ル送付のみ https://learn.microsoft.com/ja-jp/azure/cost-management-billing/understand/analyze-unexpected-charges#create-an-anomaly-alert

Slide 30

Slide 30 text

コストアラートとSlackチャネル • 1システムの全環境のコストアラートを1システムアラートチャネル Cost Alert Subscription Aシステムコストアラートチャネル Aシステムコストアラートチャネル 本番Aシステム 本番Aシステム Cost Alert Subscription STG Aシステム STG Aシステム Cost Alert Subscription 検証 Aシステム 検証 Aシステム Cost Alert Subscription Bシステムコストアラートチャネル Bシステムコストアラートチャネル 本番Bシステム 本番Bシステム Cost Alert Subscription STG Bシステム STG Bシステム Cost Alert Subscription 検証 Bシステム 検証 Bシステム Cost Alert Subscription Cシステムコストアラートチャネル Cシステムコストアラートチャネル 本番Cシステム 本番Cシステム Cost Alert Subscription STG Cシステム STG Cシステム Cost Alert Subscription 検証 Cシステム 検証 Cシステム

Slide 31

Slide 31 text

半年の異常アラートの件数 • 半年で開発環境のサブスクスクリプションで最も多い10件の異常アラート サブスク名 サブスク名 リソースグループ名 リソースグループ名 どのリソースがいくら変化したか はわからないのでリソース探しに はノウハウの蓄積が必要 何時、サブスク名のコストに変化 があったか確認できる

Slide 32

Slide 32 text

Azureポータルで作成したviewで1/4の変化を確認 • 1/4で水色のグラフが増えている事が確認できる • 1/4にリソースの作成作業をした グループ化(Group by):Service name 細分性(Granularity):日単位(Daily) 列(グループ化)(Column(grouped))

Slide 33

Slide 33 text

Azureポータルで作成したviewで1/4の変化を確認 おまけ • 1/4で水色のグラフが増えている事が確認できる • 1/4にリソースの作成作業をした グループ化(Group by):Service name 細分性(Granularity):日単位(Daily) 列(積み上げ)(Column(stacked))

Slide 34

Slide 34 text

予算のオーバーを検知 • システム毎に予算アラートを作成 • 予算超過に対応できる時間を確保する為、閾値を低め(70%)に設定 Subscription Aシステムコストアラートチャネル Aシステムコストアラートチャネル 本番Aシステム 本番Aシステム Subscription STG Aシステム STG Aシステム Subscription 検証 Aシステム 検証 Aシステム Budgets alert Subscription Bシステムコストアラートチャネル Bシステムコストアラートチャネル 本番Bシステム 本番Bシステム Subscription STG Bシステム STG Bシステム Subscription 検証 Bシステム 検証 Bシステム Budgets alert https://learn.microsoft.com/ja-jp/azure/cost-management-billing/costs/cost-mgt-alerts-monitor-usage-spending#budget-alerts

Slide 35

Slide 35 text

予約が使用されていないか検知 • 予約使用率アラートを作成 • 予約適用率は高めに設定して、早目に検知 Reserved Utilization Alert インフラシステムコストアラートチャネル インフラシステムコストアラートチャネル https://learn.microsoft.com/ja-jp/azure/cost-management-billing/costs/reservation-utilization-alerts

Slide 36

Slide 36 text

参考 予約アラートの通知内容 予約名 予約名 予約ID 予約ID 2件発生した例ですが、予約名や使 用率が表示されるので分かり易い

Slide 37

Slide 37 text

まとめ

Slide 38

Slide 38 text

まとめ • 予約購入、ログの削減、検証環境の停止運用等一通り実施 • 見えていないコストの変化に気づける事も大事 • 異常コストアラート、予算アラート、予約使用率アラートを活用して時間を有効活用 • Azureのコストを見れるだけでSREチームが確認していたがviewを活用しシステム担当 側で確認できるようにした

Slide 39

Slide 39 text

告知

Slide 40

Slide 40 text

告知 https://aeon.connpass.com/event/308120/

Slide 41

Slide 41 text

告知 https://aeon.connpass.com/event/310105/

Slide 42

Slide 42 text

募集しています!