AWS Innovate Online Conference 「試験対策セッション4：コスト最適化アーキテクチャを設計する」をまとめてみた

# 参考文献
[AWS Innovate Online Conference](https://aws.amazon.com/jp/about-aws/events/aws-innovate/) 
AWS 認定 - 試験対策 「ソリューションアーキテクト - アソシエイト」
セッション4：コスト最適化アーキテクチャを設計する
を視聴して、まとめた内容を記載しています。

## コストを最適化したストレージの設計方法を決定する

従量課金制が基本
一部のサービスでは予約により値引きすることができ、時間単位で大幅な割引があるリザーブドキャパシティを利用可能
ストレージとデータ転送の料金設定は階層化
使用量の増加に応じて GBあたりの料金が低くなる

リージョンから外に出る送信に関して料金
リージョンの外からの受信データや同一リージョン内AWSサービス間の送受信データについては料金が発生しない
EC2, S3, RDS, SQS, SNS, VPCからの送信データは集約され、送信データ転送のレートで課金される
この料金はAWS DATA transfer outという項目で記載される。

## Amazon EC2の使用コストの見積もりにおける検討事項

- サーバーの実働時間
    - Amazon Linux、Ubuntuは秒課金、それ以外の OS は1時間単位の課金
- マシン構成
    - 選択するインスタンスタイプによって料金が変動
- マシン購入タイプ
    - オンデマンドインスタンス、リザーブドインスタンス、スポットインスタンスにより料金が変動
- インスタンス数
- ロードバランシング
    - ELBを利用するELBの料金がかかる
- 詳細モニタリング
    - デフォルトでは5分間隔でクラウドウォッチにメトリクスが収集
    - 詳細モニタリングを利用すると1分単位でメトリックスが収集されるが、追加料金が発生する
- Auto Scaling
    - Auto Scalingそのものに料金は発生しない
    - 自動的に起動したEC2インスタンスに対して課金される
- Elastic IPアドレス
    - Elastic IPは**利用していないと発生する**
    - アタッチしていても、EC2を停止している場合に料金が発生
- OSとソフトウェアパッケージ
    - 利用する料金によって決まる

EC2インスタンスのサイズタイプファミリーを検討する時ワークロードと完了するまでにかかる時間を考慮することが重要
小さなインスタンスを長時間実行するよりも大きいインスタンスでバッチジョブを素早く完了させる方が安価になる場合がある

## コンピューティングの違い

デフォルトは共有テナンシー
コンプライアンスやライセンス的に共有テナンシーが適用できない場合がある
その場合は、専用テナンシーを利用
専用テナンシーには追加料金

料金オプションは、オンデマンド、リザーブド、スポットから選択できる
選択するインスタンスタイプによってはインスタンスストレージが利用可能
インスタンスストレージはインスタンス利用料金に含まれており無料で利用可能

## EC2のコスト削減

- 最適なインスタンスファミリーを選択すること
- 使用していないインスタンスは停止もしくは終了しておくこと
- 最適な料金オプションを選択すること

- オンデマンドインスタンスの最大の特徴は使ったぶんだけ課金となり事前契約などは不要
    - 非常に柔軟性の高い利用が可能
    - インスタンスを削除したら料金は発生しない

- 起動し続けておく必要のあるインスタンスをより安く利用できる料金オプションとしてリザーブドインスタンス
    - システムには24時間365日ずっと起動している必要になるサーバーに役立つ
    - スタンダードとコンバーティブルの違いは事前の購入条件の後から変更可能な柔軟性の違い
    - スタンダードではインスタンスファミリーや OS などは後から条件の変更ができない
    - コンバーティブルでは変更が可能
    - スタンダードよりもコンバーティブルの方が割引率が低い
    - スケジュールされたリザーブドインスタンスは特定の時間帯に対するキャパシティをあらかじめ予約しておく方式
    - 例えば毎週金曜日の夜中に実施するバッチ処理があるなど予測可能で定期的なスケジュールに対するキャパシティの予約に適している
- スポットインスタンスは AWS が管理しているハードウェアの中で利用していないコンピューティングリソースを低価格で利用できるようにした料金オプション
    - オンデマンド料金と比べて大幅な割引価格で利用可能
    - 空いているコンピューティングリソースは需要と供給により増減
    - 空きリソースがなくなるとお客様が起動したスポットインスタンスが強制的に中断させられる可能性がある
    - 中断される場合は2分前に通知
    - スポットインスタンスの中断時には休止／停止／終了のいずれかの動作を指定
    - 休止を選択すると OS に吸収を実行するように合図が送られメモリー上のデータはEBSルートボリュームに保存

- スタンダードで変更できないもの(コンバーチブルで変更できるもの)
    - インスタンスファミリー
    - OS
    - テナンシー
    - 支払オプション

[よくある質問 - AWS と Microsoft  | AWS](https://aws.amazon.com/jp/windows/faq/)

## S3のストレージ

- S3標準
- S3標準低頻度アクセス
- S3 1ゾーン低頻度アクセス
- S3 Glacier

下にいくほど利用しているデータサイズに対して安くなる。
ただし、下にいくほどデータを取り出す料金が高くなる。

データアクセス頻度より、最適なストレージクラスを選択することで、S3の利用料金を抑えることができる。

## Amazon EBS

- ボリュームサイズ
- ボリュームタイプ
- IOPS(1秒あたりの入出力オペレーション回数)
- どれくらいの感覚でスナップショットをとり、どれくらいの期間保持するか
- リージョンをまたいだスナップショットのコピーをする場合のデータ転送

HDDよりSSDタイプのほうがIOPSが高い
HDDはSSDよりシーケンシャルのファイル処理などスループット性能は高い

ボリュームタイプの選択は、システムに必要な性能特性がIOPS性能重視か、スループット性能重視なのかにより選択できる。合わせてコストの観点も。

## コスト最適化のためのアーキテクチャ

### 1. サーバレスアーキテクチャ

システムを構築運用する際に、お客様自身が管理するサーバを持つ必要のないアーキテクチャを指す。

サーバレスを実現するサービス

- Lambda
    - AWSが用意したサーバ環境で、お客様が用意したコードが自動実行される仕組み
- S3
    - S3上のデータをエンドユーザーに配信できる
- DynamoDB
    - DBを動かすサーバをお客様が一切考慮する必要がない
- Amazon API Gateway
    - インターネットからアクセス可能なAPIを構築／運用できるサービス

サーバレスアーキテクチャを活用することで、
EC2インスタンスの利用料金を削減
システム運用に係るトータルのコストを削減

### 2. Amazon CloudFront

コンテンツデリバリーネットワーク（CDN）を実現することができるサービス
コンテンツがユーザーに、より近い拠点にキャッシュされ、ユーザーにすばやくコンテンツを配信することができる

コストの観点のメリット
キャッシュによりS3のリクエスト料金を削減できること
S3とCloudFront間でのデータ転送が無料のため、データ転送料金を削減できること

CloudFrontの使用コストを見積もる際の懸念事項としては、インターネットに対するデータ送信料とCloudFrontへのリクエスト数による料金がある

CloudFrontからリクエストを受付けるリージョンごとに決まっている
グローバルで世界中からデータを配信するのか、特定のリージョン内でデータを配信するかという観点で料金が変わる

CloudFrontのメリット
ClouｄFrontの料金は発生するが、キャッシュにより、エンドユーザーに対するパフォーマンスを向上させることができる
バックエンドの負荷を抑えることで、コスト最適化につながる


## まとめ

- 使用する予定であれば予約する
- 使用していないCPU時間はコストの浪費になる
    - 使用していない EC 2インスタンスは適宜止めるもしくは終了するなどのオンプレミスとは異なったコスト関係の運用が必要
- 最もコスト効率の良いデータストレージサービスとクラスを使用する
- 各ワークロードに対して最もコスト効率のよいEC2の料金モデルとインスタンスタイプを検討する