はじめに
数年前、AWS の知見を持つ人がほとんどいない職場で、DX 化を進めるプロジェクトに携わる機会がありました。
その中で「AWSって結局どれくらい料金がかかるのか?」という質問を聞かれました。
EC2 や S3 という名前は知っていても、「結局どれくらい料金がかかるのか」は利用方法によって大きく変わります。
そのため、その場ですぐ答えられないケースも少なくありませんでした。
AWS Pricing Calculator という公式ツールもありますが、入力項目が多く、AWS に慣れている自分でも「このケースはどこへ入力するんだろう」と迷うことがあります。
そこで当時、入力項目を最小限に絞り、入力例や説明を付けた「ざっくり料金目安」を計算できる社内向けツールを作成しました。
今回、そのときの経験を活かして、個人開発している CloudFormationをGUIで作成できるツール にも簡易料金試算機能を追加しました。
この記事では、その機能を紹介したいと思います。
なぜ追加したか
社内向けツールは、社内規定の都合で外部 API が利用できず、料金データや為替も手動で管理する必要がありました。
「もっと制約のない環境で作るなら、AWS の料金情報を自動取得できるはず」と考えたのが、今回の機能の出発点です。
また、せっかく作り直すのであれば単独の料金計算ツールではなく、CloudFormation のテンプレートを作成しながら料金も確認できるツールの方が便利ではないかと考えました。
そこで先に CloudFormation を GUI で作成できる IaCraftStudio を開発し、その後この料金試算機能を追加しました。
重要な前提として、これは 正式見積もりではなく参考値 です。後述のとおり、無料枠・税・割引などは含めていません。
できること(現状)
対象は、テンプレート生成に対応している 5 サービスです。
| サービス | 試算の例 |
|---|---|
| Amazon S3 | ストレージ容量、PUT/GET リクエスト、データ転送 OUT |
| Amazon CloudFront | データ転送、HTTP/HTTPS リクエスト |
| Amazon API Gateway | REST / HTTP API のリクエスト、WebSocket メッセージ |
| AWS Lambda | リクエスト数、実行時間、メモリ |
| Amazon DynamoDB | オンデマンドまたはプロビジョンドの読み書き |
各サービスの編集画面に 「料金試算」タブ があり、次の 3 ブロックで構成しています。
- 月額目安 … 円表示の合計と内訳(USD も併記)
- 試算条件 … 利用量の入力欄(GB、回数/月など)
- 単価データ … リージョン、為替、データ更新日時
テンプレートには出力しない
試算用の利用量は CloudFormation YAML には出力しません。
テンプレートの設定(バケット名、暗号化、ルーティングなど)と、料金試算の利用量入力は意図的に分けています。YAML をそのまま AWS にデプロイしても、試算欄の数値はテンプレートに混ざりません。
使い方(おおよそ 2 分)
- IaCraftStudio を開く(S3 はログイン不要)
- 対象サービス画面でリソースを 1 件追加する(例: S3 バケット)
- 編集タブの 「料金試算」 を開く
- 試算条件(ストレージ GB、リクエスト数など)を入力する
- 月額目安と内訳を確認する
S3 の例では、次のような入力項目があります。
| 項目 | 単位の例 |
|---|---|
| 平均ストレージ容量 | GB/月 |
| PUT / COPY / POST / LIST | 回/月 |
| GET / SELECT | 回/月 |
| データ転送 OUT | GB/月 |
入力を変えると、月額目安がその場で更新されます。
画面イメージ
料金試算タブ(S3)
※ 投稿前に S3 の「料金試算」タブのスクリーンショットを取得し、下記パスに配置してください。
ざっくりした仕組み
フロントエンドだけで AWS Pricing API を直接叩くのではなく、日次バッチで単価 JSON を用意し、ブラウザはそれを読んで計算する 構成にしています。
EventBridge(毎日 03:00 JST)
└ Lambda(PricingSync)
├ AWS Price List API … 東京リージョン等の単価取得
├ Frankfurter API … USD→JPY 為替
└ S3(main-bucket)… config/pricing/*.json を更新
CloudFront
└ React アプリ
├ /config/pricing/s3.json 等を fetch
└ ユーザー入力 × 単価 → 月額目安を表示
単価データ
サービスごとに JSON を分けています(例: config/pricing/s3.json)。
{
"schemaVersion": 1,
"service": "s3",
"region": "ap-northeast-1",
"fx": {
"usdJpy": 161.65,
"sourceName": "frankfurter"
},
"rates": {
"storage": { "STANDARD": { "pricePerGbMonthUsd": 0.025 } },
"requests": { "putCopyPostListPer1000Usd": 0.0047 },
"dataTransfer": { "outToInternetPerGbUsd": 0.114 }
}
}
(実際のファイルは項目がより多く、更新日時なども含みます)
為替
USD 単価を円換算するため、Frankfurter のレートを利用しています。取得に失敗した場合は、前回同期時の JSON やフォールバック値へ退避するようにしています。
リージョン
現状は ap-northeast-1(東京) を前提にしています。他リージョンの単価差は今後の拡張候補です。
「参考値」である理由
画面にも注記していますが、次は 含めていません。
- AWS 無料利用枠
- 税金
- エンタープライズ割引
- サービス横断の付帯料金(例: S3 の KMS、CloudFront の Shield / WAF など)
そのためこの機能で計算できる料金はあくまで目安となります。
個人開発や学習の段階では、「ストレージ 100GB・転送 50GB くらい使ったら月数千円オーダーか」といった 感覚を掴む用途 を想定しています。正式な見積もりは AWS Pricing Calculator や請求レポートを参照してください。
実装で意識したこと
1. テンプレートと試算の分離
料金試算は学習補助であり、IaC の正本ではない、という位置づけです。YAML に試算パラメータを混ぜないことで、テンプレートの見通しを悪くしないようにしました。
2. Pricing API のスロットリング
Price List API はレート制限があり、複数サービス・複数 SKU を一気に取ると失敗しやすいです。リトライ、逐次取得、サービス別 JSON への分割などで安定化しています。
3. 東京リージョンの usage type
S3 などは、ドキュメント上の名前と Pricing API の usageType が一致しないことがあり、最初は単価が 0 円になる不具合がありました。実データを見ながら SKU 取得ロジックを調整しました。
4. 暫定リリースとしての割り切り
UI や試算精度は今後も改善予定です。ただし、誤解を招かない免責表示と、単価未取得時にクラッシュしないことはリリース前に確認しました。
今後の改善候補
利用状況を見ながら、次を検討しています。
- リソース未追加時でも料金試算への導線を分かりやすくする
- 試算結果の直上にも短い注意書きを置く
- ストレージクラスやリージョンの選択肢拡張
- 試算条件のプリセット(個人ブログ、小規模 API など)
関連記事
同じ IaCraftStudio / CloudFormation 学習の文脈で、次の記事もあります。
- 【個人開発】CloudFormationのYAMLをフォーム入力で生成できるツールを作った(S3はログイン不要)
- CloudFormationでS3バケットを作る最小構成と、初学者がつまずきやすい設定
- 個人開発のAWS運用監視を最小構成で整えた話(CLI・Athena・週次レポート)
まとめ
IaCraftStudio に 5 サービス対応の簡易料金試算 を追加しました。
- テンプレート設計と並行して、利用量を入れて 月額目安(参考) を確認できる
- 単価は 日次同期した JSON を参照し、フロントで計算する
- YAML には出力しない・正式請求ではない ことを画面で明示している
個人開発や CloudFormation 学習で「だいたいいくらか」を感覚掴みしたいときに使ってもらえれば嬉しいです。
使ってみた感想や、「このサービスも試算してほしい」などがあれば、コメントで教えてください。

