hero_picture
Cover Image for CloudFront 定額料金プラン(flat-rate pricing plans)フリープランへの道

CloudFront 定額料金プラン(flat-rate pricing plans)フリープランへの道

シーズ 原口です。

AWS re:Inventが近づくとさまざまなアップデートが発表され、これまでの構築のデファクトスタンダードが変わる楽しい時期です。

さて、今回は先日発表されたCloudFront定額料金プランについてです。

ざっくり言うとこれまでの従量課金(Pay-as-you-go)とは異なり、「CloudFront、WAF、Route 53などをセットにして、月額固定料金で提供するプラン」がAWSから発表されました。

中でも大きな注目を集めたのは50TBの転送までが定額となるという点。うまく使えば大きなコスト削減となるところにあります。

定額料金の詳細については公式と安定のクラメソさんのブログを参照していただくとして、、

CloudFront flat-rate pricing plans

https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/flat-rate-pricing-plan.html

定額プラン概要記事

https://dev.classmethod.jp/articles/aws-flat-rate-pricing-plans/

定額プランはむしろリクエスト数が重要という記事

https://dev.classmethod.jp/articles/amazon-cloudFronts-flat-rate-plan-should-focus-on-request-counts-and-features-rather-than-data-transfer-volume/

私はこの発表において「フリープラン」に着目しており、「フリプ活動家」としていくつかのCloudFrontをフリープランへ変更してきました。
今回は、実際に触ってみて分かったフリープランの深淵(仕様とハマりどころ)について深掘りします。

CloudFront 定額制プランのフリープランとは何か

定額制プランの中のフリープランとは、「通常なら有料である 転送料、WAF(ファイアウォール)や Route 53(DNS)が、小規模なら完全無料」というプランです。

毎月100GB未満の小規模サイトであれば、WAFもDNSもCDNもすべてコミコミでずっと無料で運用できるパッケージになります。

項目上限備考
データ転送量100 GB / 月サーバーからユーザーへの配信量
リクエスト数100万回 / 月ヒット数
S3 ストレージ5 GBAWSアカウント全体のS3料金から相殺
DNSクエリ100万回 / 月ALIASレコード(AWS内)へのアクセスは無制限
DNSレコード数50個ホストゾーン内のレコード上限

無料のプランなのに使うとS3ストレージ料金が下がるのが面白いですねw

AWS WAFも通常なら「Web ACL $5/月 + ルール $1/月」という金額がかかりますが、これも無料に含まれます。DNSレコードについては、CNAMEではなくエイリアスレコードで設定すればクエリ数にカウントされないようなので、必ずエイリアスレコードを活用しましょう。

超過した場合のリスク

もし上限を超過しても、勝手に追加料金(超過料金)は請求されないとされています。 その代わり、パフォーマンスが制限(スロットリング)されたり、上位プランへのアップグレードを促されたりする仕組みになっているため、プロダクション環境でギリギリのラインを攻める場合は注意が必要です。

DDoS攻撃での「クラウド破産」を防げる

これはフリープランに限りませんが、定額制プランに加入する最大のメリットは、「DDoS攻撃などの不正なトラフィックはカウントされず、追加請求も来ない」という点です。

サイトを運営していてDDoSアタックを受け、大量の転送量請求が来た……という防ぎようのないリスクを、定額制プランなら回避できます。保守運用している我々としては、定額プランに入るだけで安心感が段違いです。 WAFもつけられますし、80/443番ポートを公開するEC2などのサイトは、今後ますます「とりあえずCloudFrontを上位に据える」という構成が正解になっていきそうです。

フリープランの実際の操作

新規作成

ディストリビューション作成時に「Free Plan」を選択すればOKです。 ただし、一度フリープランで作ってからすぐに従量課金プランに戻すことは難しそうなので、もしフリープランで制限されている機能(後述)を使いたい場合は、最初から従量課金や上位プランを選択してください。

フリープランでは使える機能が制限されていますが、管理画面の各メニュー内で「その機能を使いたいならこのプランへ」とアップグレードを促される親切(?)設計になっています。

既存ディストリビューションをフリープランにする

既存ディストリビューションはSwitch to Plan を選択する事でフリープランに変更する画面に飛ぶ事ができます

この時、もしプランがグレーアウトして選択できない場合は、「現在の設定がフリープランの制限に引っかかっている」状態です。 ポインタを合わせると理由が表示されます。

たとえば、上記のCloudFrontディストリビューションでは

  • キャッシュポリシーが「レガシー」である
  • CloudFrontにアクセスログ設定を行なっている

これらを解消していくのが、フリプ活動家の主な仕事になります。

※フリープランのキャンセル (従量課金に戻す)

従来の従量課金に戻すにはディストリビューションの「Manage plan」から「Cancel plan」をクリックする事でPay-as-you-goに戻す事が可能です (わかりにくいw)

ただ、キャンセルにはスケジュールがあるようで、即時切り替わるわけではなさそうです。

既存CloudFrontのフリープランへの道

ここからが本題です。

現状のリクエスト数や転送量を把握する

まずは現状のディストリビューションのリクエスト数と転送量を把握しましょう

CloudFront > レポートと分析 > キャッシュ統計 から確認できます。

  • CloudFront > レポートと分析 > キャッシュ統計
  • 期間を「Last 30 Days」にして、1ヶ月の利用状況を確認。
  • リクエスト総数と、転送バイト数が上限(100GB/100万リクエスト)内かチェック。

範囲内であれば、次は「機能制限」との戦いです。

フリープランでは使えない機能一覧例

私がフリプ活動家として触っていて、特によく引っかかったものを赤字にしています。

※全ての使えない機能は公式に掲載されていますのでご参照ください

CloudFront関連

  • カスタムキャッシュルール
  • カスタムオリジンリクエストルール
  • カスタムレスポンスヘッダールール
  • キャッシュ動作(Behavior)の数は5つまで
  • CloudFront アクセスログ
  • レガシーキャッシュ設定(ForwardedValuesなど)
  • VPCオリジン
  • Lambda@Edge 関数
  • Origin Access Identity (OAI) ※OAC推奨

AWS WAF関連

  • WAFルールの数 5つまで
  • WordPress、PHP、SQLデータベースの保護(non-core Managed Rule)
  • WAFリクエストログ
  • AWS WAF Bot Control
  • 正規表現ベースの脅威フィルタリング
  • カスタムWAFレスポンス

※その他、マルチテナント機能やリアルタイムログなども利用不可です。 「キャッシュポリシーがレガシー」などは設定変更で対応可能ですが、ログ系やWAFの高度なルールを使っている場合は、フリープランを諦めるか構成を見直す必要があります。

分かりにくいエラー文とその意味

Freeプランに変更できない場合、以下のようなエラーが出ますが、パッと見で原因が特定しづらいことがあります。よくあるエラーの翻訳ガイドを置いておきます。

You're using configuration not available in this tier…

7 cache behaviors (limit 5)

意味: CloudFrontのビヘイビア(パスパターン設定)が5つを超えています。整理しましょう。

CloudFront access logs

意味: CloudFrontの標準アクセスログ設定がONになっています。OFFにしないと変更できません。

Private origins

意味: 先日発表されたVPCオリジン機能を利用しています。

Custom cache rules / Custom OriginRequest rules / Custom Response rules

意味: ビヘイビア設定で「カスタムポリシー」を使用しています。AWSマネージドポリシーのみ利用可能です。

legacy forwarded values, legacy minimum TTL, legacy maximum TTL

意味: キャッシュキーとオリジンリクエスト設定で「レガシー(Legacy)」な設定が残っています。ポリシーベースの設定に移行してください。

non-core AMRs

意味: おそらく Amazon Managed Rule の略です。AWS WAFで「コアルール(Core rule set)」以外のマネージドルール(WordPress、PHP、SQL保護など)を使っていると出るエラーです。

  • 対策: フリープランのWAFで使えるのは基本的に以下の3つです。
    • Amazon IP reputation list
    • Core rule set
    • Known bad inputs

Historical usage exceeds limits for this tier

意味: 現在の転送量やリクエスト数の利用状況がプランの上限を超えています

まとめ

以上、フリプ活動家によるフリープランへの道のりでした。

フリープランに限らず、定額プランへの加入は「DDoS攻撃等によるクラウド破産」という、防御のしようのない金銭的リスクに対するAWSからの強力な回答だと捉えています。

Publicに公開するサイトにおいては、もはやCloudFrontを前段に置かない理由はなくなってきています。WAFもセットでついてくるこのプラン、積極的に提案していきたいですね。