💲

AWSのRI/SP買い方メモ

2022/02/05に公開

なにこれ

仕事でリザーブドインスタンス(RI)やSavings Plans(SP)等々を買ったので、
来年再利用できるように参考になった資料とコマンドを備忘メモ✍

DynamoDBやRedshiftなどに対する説明がないのは、単に今回購入しなかったからになります
RI購入初心者なので、なにか間違っている部分があればコメント頂けますとありがたいです🍧

購入にあたってのTODO

結構やることが多いので事前に準備した方がよさそう

  • どのサービスがRI/SPを購入可能か調査する
    • 例えばSageMakerは 2021年からSavings Plansが利用可能 になったが、AWS公式でどこに全サービスの情報がまとまっているのかよくわかってない…
    • 購入前に調べるとよさそう
  • ①現時点で、どのサービスに対してどの程度のRI/SPを購入しているか
  • ②現時点で、どのサービスをどの程度利用しているか
    • 後述のコマンドを使ってインスタンス一覧を取得し、インスタンスタイプや台数等をスプシなどに集計する
      • 特に、 RI/SPが適用可能なインスタンス がどの程度あるか
        • 例えばEC2であれば、スポットインスタンスでないインスタンス数の総数…など
      • Savings Plansのコミットメント時間の計算根拠や、購入時のインスタンスタイプの一覧を残しておくと、来年対応する人が楽になるのでちゃんとやりましょう👹
  • ①と②を比較して、購入の検討をおこなう
    • 買い方の一例
      • 失効する契約に関して、同じ程度のRI/SPを購入する
      • 前年中に新しく増えたインスタンスなどに対して買い増す
      • インスタンスサイズの変更などをおこなったことで追加の購入が必要になったものも買い増す
    • 購入対象のサービスによってローカルルールがあるので注意すること
      • 例えばEC2 Compute Savings Plansはインスタンスファミリーやサイズを変更しても適用対象になるが、ElasticacheのRIはインスタンスサイズを変えると適用されなくなる…など
      • 3年購入するか1年購入するかは、そのサービスをどの程度利用する可能性があるかで考えたほうがよい
        • 割引率を見るとわかるが、3年購入した上で2年で他サービスに切り替え…みたいな使い方だと 1年購入 * 3 と比べてトントンくらいになる
  • 実際に買う
    • 1人でやると絶対に間違えるのでモブで作業しよう
      • 2022時点では、例えばEC2のRIは買い物かご的な機能を使って変えるが、Elasticacheはだいぶ古めで購入時に緊張感がある…
  • 適用状況を確認する
    • 購入後数日立つとダッシュボードで適用状況が確認できるようになるので、改めて確認
  • 来年以降困らないよう、失効タイミングを通知するように設定する

サービス別お役立ち情報

EC2 / Fargate

勉強

RIやSPなにもわからん…という人は、まずはこちらのスライドを読むのがお勧めです
こちらでカバーできるのはEC2およびFargateに関する部分のみですが、基本的な考え方が大変わかりやすく解説されておりありがたかったです

https://dev.classmethod.jp/articles/ec2-reserved-instances-savings-plans-comparison-seminar/

https://dev.classmethod.jp/articles/ec2-reserved-instances-savings-plans-comparison/

EC2は購入オプションが沢山あり、それぞれの使い分けのイメージについてはこちらが参考になりました

https://pages.awscloud.com/rs/112-TZM-766/images/20210603-EC2-Cost-optimization.pdf

より詳細なFAQはこちら

https://blog.serverworks.co.jp/savings-plan-faq

作業

※今回全量Savings Plansで購入したため、その説明のみしています

リソース一覧の取得方法

aws ec2 describe-instances | jq -r '.Reservations[].Instances[] | [.InstanceId, .InstanceType, .Placement.AvailabilityZone, .State.Name, .Platform, .Placement.Tenancy, .InstanceLifecycle, (.Tags[]| select(.Key == "Name").Value)] | @tsv' | sort

料金はこちらでコミットメント額を調べた上で、

https://aws.amazon.com/jp/savingsplans/compute-pricing/

Webコンソールで実際に入力して試算

https://console.aws.amazon.com/cost-management/home#/savings-plans/purchase

RDS

EC2のRIの概念をざっくり理解した上で、こちらのドキュメントで差分を理解するとわかりやすかったです
https://blog.serverworks.co.jp/rds-ri-faq

作業

リソース一覧の取得方法

aws rds describe-db-instances | jq -r '.DBInstances[] | [.DBInstanceIdentifier, .Engine, .DBInstanceClass, .MultiAZ, .AvailabilityZone, (.TagList[]| select(.Key == "Name").Value)] | @tsv' | sort

料金は公式ページでも確認できますが、Webコンソールで実際に入力して試算したほうが早いです

https://ap-northeast-1.console.aws.amazon.com/rds/home?region=ap-northeast-1#reserved-instances:

Elasticache

勉強

インスタンスタイプによって細かな区分値が変わり相当分かりづらいですが、こちらを読むと安心できると思います
https://dev.classmethod.jp/articles/elasticache-reserved-node-matome/

2022年2月時点の注意として、EC2やRDSと比較して購入後のノードタイプ変更ができない(柔軟性は提供されていない)のでサイズ変更などの可能性がある場合は1年で買うなども検討するとよさそうです

作業

リソース一覧の取得方法

aws elasticache describe-cache-clusters | jq -r '.CacheClusters[] | [.CacheClusterId, .CacheNodeType, .Engine, .EngineVersion, .NumCacheNodes, .PreferredAvailabilityZone] | @tsv' | sort

料金は公式ページでも確認できますが、Webコンソールで実際に入力して試算したほうが早いです

https://ap-northeast-1.console.aws.amazon.com/elasticache/home?region=ap-northeast-1#reserved-cache-nodes:

OpenSearch

あまり情報が見つけられなかったので、公式ページの リザーブドインスタンスの料金 を読みました
https://aws.amazon.com/jp/opensearch-service/pricing/

こちらのFAQも参考になりました
https://aws.amazon.com/jp/elasticsearch-service/resources/faqs/

作業

リソース一覧の取得方法

aws es describe-elasticsearch-domains --domain-names $(aws es list-domain-names | jq -r '.DomainNames[].DomainName' | xargs) | jq -r '.DomainStatusList[] | [.DomainName, .ElasticsearchVersion, .ElasticsearchClusterConfig.InstanceType, .ElasticsearchClusterConfig.InstanceCount, .ElasticsearchClusterConfig.DedicatedMasterType, .ElasticsearchClusterConfig.DedicatedMasterCount] | @tsv' | sort

SageMaker

2021年から利用可能になったためかあまり情報がありませんが、基本的にEC2のSavings Plansと同じ方法で購入すれば十分でした

https://aws.amazon.com/jp/about-aws/whats-new/2021/04/amazon-sagemaker-announces-a-price-reduction-in-instances-and-sagemaker-savings-plan/

作業

料金はこちらで確認

https://aws.amazon.com/jp/savingsplans/ml-pricing/

Webコンソールで実際に入力して試算

https://console.aws.amazon.com/cost-management/home#/savings-plans/purchase

CostExplorer

プリセットのグラフや推奨事項の確認方法などまで含め網羅的に解説されています

https://d1.awsstatic.com/webinars/jp/pdf/services/20200129_BlackBelt_CostExplorer.pdf

使用情報レポート

購入したSavings Plansをどのくらい使い切れているか確認できます

  • 100%だと使い切っているの意。ただしそれ異常の利用が発生している場合はこのグラフには表現されていないので後述のカバレッジレポートを確認する必要がある
  • 100%未満の場合は未使用となっているSavings Plansがある
    • 未使用分は基本的に浪費している状態になっているのでマシンスペックを上げたり利用台数を上げると使用率があがり、購入した割引率が適用されるようになる
      • が、基本的に 追加購入分が無料になるわけではない ことは注意しておくこと
    • 3年一括前払いでも大体50%くらいの割引率なので、通常の50%OFFで購入できる権利を無駄にしている…と考えるのがよさそう?

https://console.aws.amazon.com/cost-management/home#/savings-plans/utilization

カバレッジレポート

購入したSavings Plansのコミットメントが、システム全体のオンデマンド利用率に対してどの程度をカバーしているか確認できます

  • 100%である場合、発生しているオンデマンド費用がSavings Plansで購入しているコミットメントの範囲に収まっている…の意になる
    • 100%ちょうどだと理想だが、過剰購入になっている可能性があるのでそれについては使用状況レポートを確認すること
  • 100%未満である場合、Savings Plansを追加購入したほうがよい可能性がある
    • ただし、想定していないオンデマンドインスタンスの起動等が起きている場合にもカバレッジは下がるので、まず ムダなシステム利用をおこなっていないか を先にチェックすることをお勧めします

https://console.aws.amazon.com/cost-management/home#/savings-plans/coverage

参考資料

コマンドの作成にあたってはこちらも参考にさせて頂きました

Discussion