[アップデート] CloudFront の定額料金プランが API・CLI・CloudFormation から操作できるようになりました
いわさです。
CloudFront には、CDN や WAF などをまとめて月額固定料金で使える定額料金プランがあります。
あまり意識したことなくて知らなかったのですが、これまで定額プランのサブスクライブはマネジメントコンソールからしかできませんでした。
なので、これまでは IaC でディストリビューションを作る場合は、一旦従量課金で作成してから、手動でコンソールを開いてプランを変更する必要があったらしいです。
これが今朝のアップデートで、この定額プランを AWS API・CLI・SDK・CloudFormation から操作できるようになったとアナウンスありました。
今回こちらを確認してみたので紹介します。
料金を発生させたくないので、$0/月の Free プランで試します。
AWS CLI でサブスクライブしてみる
調べてみたところ API 名前空間は pricing-plan-manager で、実は AWS CLI v2 には 2.36.12(2026 年 7 月 30 日)の時点で追加されているようでした。
今回はアナウンス時点の最新である 2.36.39(2026 年 9 月 3 日)で確認しています。
オペレーションは CreateSubscription・GetSubscription・ListSubscriptions・CancelSubscription・ApprovePaidSubscription など 9 つです。この記事ではサブスクライブとキャンセルを試します。
早速 CLI から Free プランをサブスクライブしてみます。
CloudFront プランでは、サブスクライブ対象にディストリビューション 1 つと WAF web ACL 1 つを指定します。
まず WAF web ACL を作成します。CloudFront 用なので CLOUDFRONT スコープです。
aws wafv2 create-web-acl \
--name hoge-cf-plan-webacl \
--scope CLOUDFRONT \
--region us-east-1 \
--default-action Allow={} \
--visibility-config SampledRequestsEnabled=true,CloudWatchMetricsEnabled=true,MetricName=hogeCfPlanWebacl \
--profile hoge
次に検証用のディストリビューションを作成します。オリジンはダミーで、キャッシュポリシーだけ指定した最小構成です。
作成したディストリビューションと web ACL の ARN を指定して、create-subscription を実行します。plan-tier は FREE です。
aws pricing-plan-manager create-subscription \
--plan-family CloudFront \
--plan-tier FREE \
--usage-level DEFAULT \
--resource-arns \
"arn:aws:cloudfront::123456789012:distribution/EXAMPLE1234567" \
"arn:aws:wafv2:us-east-1:123456789012:global/webacl/hoge-cf-plan-webacl/aca05f57-xxxx" \
--profile hoge
ところが、最初はこのエラーで弾かれました。
An error occurred (ValidationException) when calling the CreateSubscription operation:
The following resources are not eligible for this subscription tier:
arn:aws:cloudfront::123456789012:distribution/EXAMPLE1234567.
このディストリビューションは対象外だと言われます。デプロイ完了を待っても同じでした。
調べてみたところ、原因は、web ACL を作っただけでディストリビューションに関連付けていなかったことでした。
定額プランを使うには、ディストリビューションに WAF web ACL が関連付けられている必要があるっぽいです。
You must have a AWS WAF Web ACL associated with your distribution if you're using a pricing plan.
サブスクライブ対象に web ACL を渡すだけでなく、ディストリビューションの WebACLId にも設定しておく必要があるようで、関連付けてから再実行してみるといけました。
{
"eTag": "0",
"subscription": {
"arn": "arn:aws:pricingplanmanager::123456789012:subscription:sub_xxxxxxxx",
"planFamily": "CloudFront",
"planTier": "FREE",
"status": "SYNC_IN_PROGRESS",
"resourceArns": [
"arn:aws:cloudfront::123456789012:distribution/EXAMPLE1234567",
"arn:aws:wafv2:us-east-1:123456789012:global/webacl/hoge-cf-plan-webacl/aca05f57-xxxx"
],
"createdAt": "2026-09-03T21:39:37.011945+00:00",
"updatedAt": "2026-09-03T21:39:37.011945+00:00"
}
}
作成直後の status は SYNC_IN_PROGRESS で、少し待って list-subscriptions で何度確認してみるとそのうち ACTIVE になります。
aws pricing-plan-manager list-subscriptions --profile hoge
{
"subscriptionSummaries": [
{
"arn": "arn:aws:pricingplanmanager::123456789012:subscription:sub_xxxxxxxx",
"planFamily": "CloudFront",
"planTier": "FREE",
"status": "ACTIVE",
"resourceArns": [
"arn:aws:cloudfront::123456789012:distribution/EXAMPLE1234567",
"arn:aws:wafv2:us-east-1:123456789012:global/webacl/hoge-cf-plan-webacl/aca05f57-xxxx"
],
"createdAt": "2026-09-03T21:39:37.011945+00:00",
"updatedAt": "2026-09-03T21:39:49.852444+00:00",
"eTag": "2"
}
]
}
Free プランは承認モードを指定しなくても、そのままアクティブになります。
approval-mode が承認モードの指定なのですが Free では IMMEDIATE のみです。
有料プランは作成しただけでは課金されない
有料プランの approval-mode は MANUAL がデフォルトで、create-subscription した時点では PENDING_APPROVAL で止まり、approve-paid-subscription を呼ぶまで課金は始まりません。
作成だけなら課金されないので、PRO プランで試してみました。
aws pricing-plan-manager create-subscription \
--plan-family CloudFront \
--plan-tier PRO \
--usage-level DEFAULT \
--approval-mode MANUAL \
--resource-arns \
"arn:aws:cloudfront::123456789012:distribution/EXAMPLE1234567" \
"arn:aws:wafv2:us-east-1:123456789012:global/webacl/hoge-cf-plan-webacl/aca05f57-xxxx" \
--profile hoge
{
"eTag": "0",
"subscription": {
"arn": "arn:aws:pricingplanmanager::123456789012:subscription:sub_zzzzzzzz",
"planFamily": "CloudFront",
"planTier": "PRO",
"status": "PENDING_APPROVAL",
"resourceArns": [
"arn:aws:cloudfront::123456789012:distribution/EXAMPLE1234567",
"arn:aws:wafv2:us-east-1:123456789012:global/webacl/hoge-cf-plan-webacl/aca05f57-xxxx"
],
"createdAt": "2026-09-03T21:58:41.362811+00:00",
"updatedAt": "2026-09-03T21:58:41.362811+00:00"
}
}
承認するまで課金されないことはドキュメントにも明記されています。
PENDING_APPROVAL means a paid-tier subscription has been created but is not yet active and incurs no charges until it is approved out of band via a separate ApprovePaidSubscription call.
今回は承認せずキャンセルしました。PENDING_APPROVAL のサブスクリプションは即座に削除され、課金は発生しません。作成と承認が分かれているので、IaC やエージェントに作成を任せても課金の開始は承認で握れます。
CloudFormation でもやってみる
CloudFormation でも試します。
リソースタイプは AWS::PricingPlanManager::Subscription です。
こちらも同じで web ACL・ディストリビューション・サブスクリプションをまとめて定義する必要があります。
Resources:
WebAcl:
Type: AWS::WAFv2::WebACL
Properties:
Name: hoge-cfn-cf-plan-webacl
Scope: CLOUDFRONT
DefaultAction:
Allow: {}
VisibilityConfig:
SampledRequestsEnabled: true
CloudWatchMetricsEnabled: true
MetricName: hogeCfnCfPlanWebacl
Distribution:
Type: AWS::CloudFront::Distribution
Properties:
DistributionConfig:
Enabled: true
WebACLId: !GetAtt WebAcl.Arn
Origins:
- Id: hoge-origin
DomainName: example.com
CustomOriginConfig:
HTTPPort: 80
HTTPSPort: 443
OriginProtocolPolicy: https-only
OriginSSLProtocols:
- TLSv1.2
DefaultCacheBehavior:
TargetOriginId: hoge-origin
ViewerProtocolPolicy: redirect-to-https
CachePolicyId: 658327ea-f89d-4fab-a63d-7e88639e58f6
FreePlanSubscription:
Type: AWS::PricingPlanManager::Subscription
Properties:
PlanFamily: CloudFront
PlanTier: FREE
UsageLevel: DEFAULT
ResourceArns:
- !Sub "arn:aws:cloudfront::${AWS::AccountId}:distribution/${Distribution.Id}"
- !GetAtt WebAcl.Arn
Outputs:
SubscriptionArn:
Value: !GetAtt FreePlanSubscription.Arn
SubscriptionStatus:
Value: !GetAtt FreePlanSubscription.Status
aws cloudformation create-stack \
--stack-name hoge-cf-free-plan \
--template-body file://cfn-cloudfront-free-plan.yaml \
--region us-east-1 \
--profile hoge
なお有料プランをテンプレートで書いても、CloudFormation は PENDING_APPROVAL で止めるだけで承認まではしません。承認は CLI などで別途行う必要があります。
削除時の挙動はリソース定義にも書かれています。
Deleting an activated subscription does not terminate it immediately; it schedules a cancellation that takes effect at the end of the current billing period.
アクティブなサブスクリプションはスタックを削除しても即座には止まらず、請求サイクルの末に解約がスケジュールされます。
有料プランならそれまで課金が続きます。Free プランは即時解約でした。
さいごに
本日は CloudFront の定額料金プランが API・CLI・CloudFormation から操作できるようになったので確認してみました。
ディストリビューションの作成からプランの申し込みまでを 1 つのテンプレートで完結できるのが便利ですね。
WAF web ACL の関連付けを忘れるとサブスクライブできないので、そこだけ気をつけたいです。







