Global Azure 2024 に登壇してコスト最適化のトレードオフについてお話ししました

# はじめに

2024/4/20 (土) に開催された Global Azure 2024 で登壇してきました。

https://jazug.connpass.com/event/311408/

なお、今回は、社会人 2 年目の若者とふたりで登壇しました。
いろんな意味でレベルアップしていることを期待したい!!:muscle:

ところで筆者は社会人...:rolling_eyes:...:sweat_smile:...:scream:...計算できません。


# Global Azure とは

https://globalazure.net/

Global Azure とは、世界中の Azure コミュニティが一斉に開催する Microsoft Azure のコミュニティイベントです。世界中の誰もが Azure について学ぶことができます。
今年は、4/18 ～ 20 の 3 日間にわたり、世界 70 以上のコミュニティがイベントを催し、日本では同じ日 (4/20) に東京、福岡、札幌で開催されました。

私たちは、先月の [#47 Tokyo Jazug Night](https://jazug.connpass.com/event/307679/) で開催された **Azure コストコン** の (勝手に) 延長戦として **「Azure のコスト最適化のトレードオフ」** についてお話ししました。


# コストの最適化とは

コスト最適化は、コスト削減とは限らず、目標を達成するには、優先順位付け、継続的な監視、最適化に重点を置いた反復可能なプロセスを備えた戦略を作成する必要があります。

また、コスト最適化する必要がある以下の分野でのトレードオフが必要です。

- 信頼性
- セキュリティ
- 運用のしやすさ
- パフォーマンス

https://learn.microsoft.com/ja-jp/azure/well-architected/cost-optimization/principles?wt.mc_id=AZ-MVP-5003113

はいそうですかとやってみると、一方を優先すれば、もう一方は満足できません。このギャップを埋めようにも、失われるものは完全にゼロにはなりません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/b00307fd-0534-0ac0-68ea-1b801a4ec1c8.png)

それでは、どのようにトレードオフを行えば良いのでしょう。


# コスト最適化のトレードオフ

トレードオフを行うには、まず以下のものが必要です。

- 財務上の制約の下で投資収益率 (ROI) を最大化するためには、明確な機能要件と非機能要件の定義が必要
- 効率的な作業と労力の優先順位付けには、財務的責任を理解し、利用できる技術と課金モデルを深く把握するチームが不可欠

そして、以下のように進めていきます。

- このワークロードの ROI を把握した後、[コスト最適化の設計原則](https://learn.microsoft.com/ja-jp/azure/well-architected/cost-optimization/principles?wt.mc_id=AZ-MVP-5003113)と[設計レビューチェックリスト](https://learn.microsoft.com/ja-jp/azure/well-architected/cost-optimization/checklist?wt.mc_id=AZ-MVP-5003113)に基づいて改善を進める
    - **より安価なソリューションに重点を置かないこと**
    - **Azure Well-Architected Framework の他の柱とのバランスを考慮すること**

https://learn.microsoft.com/ja-jp/azure/well-architected/cost-optimization/tradeoffs?wt.mc_id=AZ-MVP-5003113

**「Azure Well-Architected Framework の他の柱とのバランスを考慮すること」** と、これだけを見ると分かったような分からないような、ちょっとモヤモヤします。ここは、この文章を分かりやすくかみ砕き、そしてそれぞれの柱の守備範囲 (サポートしている部分) をちゃんと理解したほうが良いでしょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/569201d4-cb4e-c66f-34b9-8405f7ff85fb.png)

ここまでで、コスト最適化のトレードオフはどのように進めれば良いか理解はできたものの、実際やってみるとなかなか難しいことです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/8cc23c05-8986-c71e-aa5b-ce700f5d7d65.png)

なにか、手助けとなるツールが...あります!!


# コスト最適化の設計レビューチェックリスト

このチェックリストには、コスト最適化に関する一連の推奨事項が載っています。これらの情報は無料で閲覧できるので、これを有効に活用しないわけにはいきません!!

https://learn.microsoft.com/ja-jp/azure/well-architected/cost-optimization/checklist?wt.mc_id=AZ-MVP-5003113

では、どのようにこのチェックリストを活用すれば良いかと言うと、コスト最適化する上で、下図のような工程を踏んでいくと思います。
これらの各工程でチェックリスト (推奨事項) の見かたを変えることによって、それぞれの場面で活用できると思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/62abb34d-574e-666f-c38d-548b736edf26.png)

たとえば、このようなかんじに。

| 工程 | チェックリストの見かた |
|:-|:-|
| 現状分析 | どこに着目するか |
| コスト削減策を検討 | どの最適化手法が当てはまるか |
| コスト削減策を検証 | ちゃんと考慮されているか、納得できる理由付けはされているか |
| コスト削減策を提案・レビュー | トレードオフは適切か、納得できる理由付けはされているか |
| 実施 | (採用したコスト削減策を実施) |

なお、記載されているそれぞれの最適化手法には、検討すべきことは何か、どのように行動すれば良いか、どのようなリスクがあるか、など有効な情報が記載されています。

とはいえ、コスト最適化の設計レビューチェックリストはとても膨大なドキュメントです。いきなりこの情報量を目の当たりにすると、目を背けたくなるのは筆者だけではないと思います、ですよね？

そして、これらすべてが Azure に直結したコスト最適化の推奨事項というわけでもありません。

なので、これらのコスト最適化の推奨事項を下図のように筆者なりにカテゴライズしてみました。これで、ちょっとは読みやすくなった (コスト最適化欲が高まった) と思います、そうあって欲しいです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/fc935668-2345-e4c9-3d8b-e586930a10fc.png)

- **コスト最適化を取り組むための環境づくりに対する推奨事項**
    - 予算とコストを共有、スキル開発、オープンなコミュニケーション、担当者の生産性と効率を最大化、など
    - [MS 真壁さんのスライド](https://speakerdeck.com/torumakabe/kosutozui-shi-hua-by-onasitupu-an-tatihaquick-windeman-zu-sinai) (後半あたり) が参考になると思います
- **コスト最適化を取り組むための下準備に対する推奨事項**
    - コストモデルの作成・管理、予算の設定
    - コストデータの収集・グループ化・所有者の割り当て・確認、など
    - Azure 環境にあらかじめ施すこと (タグ付け義務、アクセス制御、リソース制限、コストアラート、など)
- **Azure リソースや環境 (サブスクリプション) に対する推奨事項**
    - Azure に直結すること
- **アプリのコードやフローに対する推奨事項**
    - Azure 上にデプロイしたアプリのコードやフロー

<details><summary> <b>※推奨事項へのリンク集</b> (クリックすると展開します)</summary>

- **コスト最適化を取り組むための環境づくりに対する推奨事項**
    - [CO:01 財務責任の文化を作り出す](https://learn.microsoft.com/ja-jp/azure/well-architected/cost-optimization/create-culture-financial-responsibility?wt.mc_id=AZ-MVP-5003113)
    - [CO:13 担当者の時間を最適化する](https://learn.microsoft.com/ja-jp/azure/well-architected/cost-optimization/optimize-personnel-time?wt.mc_id=AZ-MVP-5003113)
- **コスト最適化を取り組むための下準備に対する推奨事項**
    - [CO:02 コストモデルを作成して管理する](https://learn.microsoft.com/ja-jp/azure/well-architected/cost-optimization/cost-model?wt.mc_id=AZ-MVP-5003113)
    - [CO:03 コストデータを収集して確認する](https://learn.microsoft.com/ja-jp/azure/well-architected/cost-optimization/collect-review-cost-data?wt.mc_id=AZ-MVP-5003113)
    - [CO:04 支出ガードレールを設定する](https://learn.microsoft.com/ja-jp/azure/well-architected/cost-optimization/set-spending-guardrails?wt.mc_id=AZ-MVP-5003113)
- **Azure リソースや環境 (サブスクリプション) に対する推奨事項**
    - [CO:05 プロバイダーから最適な料金を取得する](https://learn.microsoft.com/ja-jp/azure/well-architected/cost-optimization/get-best-rates?wt.mc_id=AZ-MVP-5003113)
    - [CO:06 使用量を課金単位に合わせる](https://learn.microsoft.com/ja-jp/azure/well-architected/cost-optimization/align-usage-to-billing-increments?wt.mc_id=AZ-MVP-5003113)
    - [CO:07 コンポーネントコストを最適化する](https://learn.microsoft.com/ja-jp/azure/well-architected/cost-optimization/optimize-component-costs?wt.mc_id=AZ-MVP-5003113)
    - [CO:08 環境コストを最適化する](https://learn.microsoft.com/ja-jp/azure/well-architected/cost-optimization/optimize-environment-costs?wt.mc_id=AZ-MVP-5003113)
    - [CO:10 データコストを最適化する](https://learn.microsoft.com/ja-jp/azure/well-architected/cost-optimization/optimize-data-costs?wt.mc_id=AZ-MVP-5003113)
    - [CO:12 スケーリングコストを最適化する](https://learn.microsoft.com/ja-jp/azure/well-architected/cost-optimization/optimize-scaling-costs?wt.mc_id=AZ-MVP-5003113)
    - [CO:14 リソースと責任を統合する](https://learn.microsoft.com/ja-jp/azure/well-architected/cost-optimization/consolidation?wt.mc_id=AZ-MVP-5003113)
- **アプリのコードやフローに対する推奨事項**
    - [CO:09 フローコストを最適化する](https://learn.microsoft.com/ja-jp/azure/well-architected/cost-optimization/optimize-flow-costs?wt.mc_id=AZ-MVP-5003113)
    - [CO:11 コードコストを最適化する](https://learn.microsoft.com/ja-jp/azure/well-architected/cost-optimization/optimize-code-costs?wt.mc_id=AZ-MVP-5003113)

</details>

# 例題

当日のセッションでは、上記までで説明したことを踏まえた例をいくつか紹介しました。
それらについては、以下のスライドをご覧ください。
※ここは若者の力作

https://speakerdeck.com/tetsuyaooooo/dousurukosutozui-shi-hua-notoredoohu

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/a96a48bc-99dc-bb84-f284-9f1ced4d9a1d.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/9d15d31b-54f2-0f7b-3ebb-d458a71ed21a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/ec333ccf-89bd-63c6-48e1-35419d14c41d.png)

ここで一言付け加えると、選べるコスト最適化手法はひとつだけとは限りませんし、トレードオフする内容によっては例題で挙げたものとは異なるものになるかもしれません。

なので、あくまでひとつの例として捉えていただければと思います。


# さいごに

だんだんオンライン時代のネガティブな気持ちが薄れてきたなと実感しました。とても楽しくお話しすることができました。ホントにありがとうございました。