Amazon Ec2

リザーブドインスタンスをCLIから予約購入してみた

こんにちは、逸般の誤家庭にあるRTX1200とAWS間をサイト間VPNで接続しているディーネットの山田です。

DDNSのDNS名を使って、IPアドレスが変わってもLambdaで定期的にチェックして、カスタマーゲートウェイを作り直す関数を実装してあるので何か機会があればご紹介できればと思っています。

さて、AWSをここまでがっつりと個人利用させていただいているとどうしても常時起動のEC2がいくつかいるので、費用を抑えたくなってきます。

その為、Amazon EC2 リザーブドインスタンス(RI)を購入しているのですが、有効期限が本日までだったのでCLIで予約購入してみたという記事になります。

リザーブドインスタンスとは

数年前に弊社の小林が投稿していた記事がございますので、詳細はこちらをご覧いただくとして、簡潔にまとめますと
” 電車の定期券のように利用期間に応じてオンデマンド料金に比べ大幅な割引価格が適用されるものです”

https://blog.denet.co.jp/awsreservedinstances/

購入前に今回購入しようとしているインスタンスタイプの料金について調べてみる

今回購入しようと思うリザーブドインスタンス

インスタンスタイプ クラス スコープ 期間 支払いオプション
t3.nano スタンダード リージョン 1年 前払いなし

オンデマンドとリザーブドインスタンスの料金比較

インスタンスタイプ オンデマンド リザーブドインスタンス(前払いなし/スタンダード1年) 差額
t3.nano 0.0068USD/時間 0.004USD/時間 0.0028USD/時間(2.1USD/月)
  • t3.nanoですら、ひと月に2.1USD節約できるので、複数購入している方やさらに上位のインスタンスタイプを使っている場合はさらなる費用節約が見込めますね

CLIで実際に購入を進めてみる

  • IAMロールやアクセスキーとかは事前設定済みである想定です

現在購入済みのリザーブドインスタンスを調べる

  • 購入済みで、現在有効な"t3.nano"のリザーブドインスタンスについて情報を取得する
aws ec2 describe-reserved-instances \
>     --filters Name=state,Values=active \
>               Name=instance-type,Values=t3.nano
{
    "ReservedInstances": [
        {
            "ReservedInstancesId": "xxxxxxxx-yyyy-zzzz-SSSS-AAAAAAAAAAAA", 
            "OfferingType": "No Upfront", 
            "FixedPrice": 0.0, 
            "End": "2020-07-31T13:52:40.000Z", 
            "Scope": "Region", 
            "UsagePrice": 0.0, 
            "RecurringCharges": [
                {
                    "Amount": 0.0046, 
                    "Frequency": "Hourly"
                }
            ], 
            "OfferingClass": "standard", 
            "Start": "2020-02-12T15:00:00.000Z", 
            "State": "active", 
            "ProductDescription": "Linux/UNIX", 
            "CurrencyCode": "USD", 
            "Duration": 31536000, 
            "InstanceTenancy": "default", 
            "InstanceType": "t3.nano", 
            "InstanceCount": 1
        }
    ]
}

End : 有効期限が"2020-07-31T13:52:40.000Z"までであることが分かる

欲しい条件のリザーブドインスタンスを調べる

  • 購入したい目的のリザーブドインスタンスを検索して"ReservedInstancesOfferingId"を取得する
  • 実際の購入には、"ReservedInstancesOfferingId"を使用します
aws ec2 describe-reserved-instances-offerings \
>     --instance-type t3.nano \
>     --offering-class standard \
>     --product-description "Linux/UNIX" \
>     --instance-tenancy default \
>     --filters Name=duration,Values=31536000 \
>               Name=scope,Values=Region \
>               Name=fixed-price,Values=0.0
{
    "ReservedInstancesOfferings": [
        {
            "OfferingClass": "standard", 
            "Marketplace": false, 
            "FixedPrice": 0.0, 
            "CurrencyCode": "USD", 
            "PricingDetails": [], 
            "UsagePrice": 0.0, 
            "RecurringCharges": [
                {
                    "Amount": 0.0043, 
                    "Frequency": "Hourly"
                }
            ], 
            "OfferingType": "No Upfront", 
            "ProductDescription": "Linux/UNIX", 
            "Scope": "Region", 
            "Duration": 31536000, 
            "InstanceTenancy": "default", 
            "ReservedInstancesOfferingId": "qqqqqqqq-dddd-ssss-EEEE-BBBBBBBBBBBB", 
            "InstanceType": "t3.nano"
        }
    ]
}

では実際に購入処理を行う

  • 先ほど検索した"ReservedInstancesOfferingId"を指定して購入する
  • 現在、購入済みのものの期限切れに合わせて購入したいので、”purchase-time” オプションを使って予約購入を行う
aws ec2 purchase-reserved-instances-offering \
>     --reserved-instances-offering-id "qqqqqqqq-dddd-ssss-EEEE-BBBBBBBBBBBB" \
>     --purchase-time "2020-07-31T13:52:40.000Z" \
>     --instance-count 1
{
    "ReservedInstancesId": "eeeeeeee-ffff-uuuu-PPPP-LLLLLLLLLLLL"
}

AWS マネジメントコンソールからキューに入ったリザーブドインスタンスを確認する

このときに間違って購入していたら予約日時まではキャンセルすること可能です

まとめ

  • 今までは期限切れてから購入したり、ギリギリを狙って購入していましたが、予約購入は便利ですね。
  • AWS マネジメントコンソールからは日付指定で購入できますが、時間までは指定できないので時間指定で購入したい場合は、CLIでの購入のみとなります。

参考サイト

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/WindowsGuide/ri-market-concepts-buying.html#ri-buying-standard