こんにちは!好きなラーメンは二郎系!
AWS認定講師の久保玉井です。
皆さんAWSを使っている際に「コストもっと最適化したいな」って思ったことないですか?
今回は、私がAWS公式トレーニングを行う際に利用しているEC2で動作するチャットシステム「RocketChat環境」のコスト削減についてのお話です。
これまでCloudFormationで構築・運用していたのですが、毎月のAWS利用料(特にIPv4等)がじわじわと圧迫していました…。
「しゃーない!やるか!」と重い腰を上げ、IPv6対応な環境へ移行することで、コスト削減を実現しました。今回はその内容をご紹介します!
目次
事前説明
なぜ今回の作業をやる必要があるのか?事前説明です。
結論:IPv6化で固定費をカット!
まず結論から申し上げますと、IPv6を利用することで、以下の「維持するだけでかかるコスト」を排除することにしました。
❌ Elastic IP: IPv4パブリックアドレスの固定費用
これらを削除し、「EC2インスタンスにはIPv6アドレスのみ割り当てる」という構成に切り替えることで、個人運用でも持続可能な(お財布に優しい)環境を手に入れました。
ちなみに今回の構成にする前はすでにNAT GatewayやELBなどは忘却の彼方へと葬り去っていました(撤去済み)
だってCloudFrontが優秀すぎるんですもの♪
背景と課題
これまで運用していたRocketChat環境では、CloudFrontがオリジンを参照する Elastic IP が必須でした。
企業での運用なら必要経費として割り切れますが、個人の検証用環境としては、チャットするだけで数千円飛んでいくのは精神衛生上よくありません(ラーメン何杯食べられるんだ…と考えてしまいます)。
そこで、「モダンな構成に刷新しつつ、コストも下げよう!」と一念発起し、以下の技術スタックで再構築を行いました。
新しいアーキテクチャの概要
今回の移行で採用した構成は以下の通りです。
[ユーザー]
↓
[CloudFront (us-east-1)]
↓ (IPv6通信)
[EC2 RocketChat (ap-northeast-1)]
- IPv6アドレスのみ
- EIC Endpointで管理接続
東京リージョン (ap-northeast-1) のポイント
- Dual-Stack VPC: IPv4 (10.0.0.0/16) とIPv6の両対応ですが、EC2はパブリックIPv4アドレスを割り当てない構成(IPv6-primary / Dual-stack VPC内での運用。
- EC2 Instance Connect Endpoint (EIC): これが便利!パブリックIPv4アドレスがなくても、マネジメントコンソールやAWS CLIから安全にSSH接続が可能です。
- セキュリティグループ: CloudFrontのManaged Prefix List (IPv6) からのHTTP(3000)のみを許可し、セキュリティも強固に。
バージニアリージョン (us-east-1) のポイント
- CloudFront: HTTP/2, HTTP/3対応に加え、IPv6を有効化。カスタムオリジンとしてEC2のIPv6 DNS名 を指定しています。
- 夜間リダイレクト: CloudFront Functionを使い、日本時間の夜間(21:00〜07:00)はアクセスしてもリダイレクトページ(S3)へ飛ばすようにしました。働きすぎ防止です(笑)。夜間はEC2を停止する前提です!
AWS CDKによるIaC実装
今回は開発体験の向上も兼ねて、最新のPythonパッケージマネージャーである uv と AWS CDK v2 を組み合わせました。
技術スタック
- 言語: Python 3.13
- パッケージマネージャー: uv
- IaC: AWS CDK v2
- テスト: pytest + Hypothesis
プロジェクト構成
uv を使うと依存関係の管理が非常に高速で快適です。構成はシンプルに以下のようにしました。
ipv6-rocketchat/
├── app.py # CDKエントリポイント
├── cdk.json # CDK設定
├── pyproject.toml # Python依存関係
├── uv.lock # ロックファイル
├── stacks/
│ ├── tokyo_stack.py # メインのリソース群
│ └── virginia_stack.py # CloudFront周り
└── tests/ # 大事なテストコード
デプロイモードで安全に!
検証中に「本番のDNSを書き換えてしまった!」という事故を防ぐため、Contextを使ってデプロイモードを分けています。
stagingモード: CloudFrontにカスタムドメインを設定せず、Route53も触りません。
productionモード: 独自ドメイン のエイリアス設定やACM証明書の適用を行います。
# 検証時はこちら
$ uv run cdk deploy RocketChat-IPv6-Tokyo -c deploy_mode=staging
IPv6環境でのハマりポイントと工夫
IPv6オンリーの世界は非常にシンプルですが、いくつか工夫が必要な点もありました。
1.S3へのアクセス
EC2からS3へアクセスする際、通常のままだとIPv4でつなぎにいこうとして失敗します。RocketChatの設定でデュアルスタックエンドポイントを明示的に指定しました。
https://s3.dualstack.ap-northeast-1.amazonaws.com
2.API Gatewayへのアクセス
RocketChatにはボットが住み着いており外部にあるAPI Gatewayと連携をしています。よってAPI Gatewayもデュアルスタック化しました。
運用はどうするか?
実装が出来た後に運用面も考える必要があります。
今回は以下2つの対処をしました(実は前からすでに一つは実装済み)
1.運用コストのさらなる削減(平日のみ稼働)
EC2の利用料金そのものも節約したいので、EventBridge SchedulerとStep Functionsを組み合わせて「平日 08:00〜19:30 (JST) のみ稼働」という仕組みを入れています(厳密に言うとGoogleカレンダーの内容もチェックしてAWSトレーニングの日だけを対象としてます)
EC2に以下のタグをつけて制御しています。シンプルで分かりやすいですよね。
Name: [対象となるインスタンスの名前]
SF-START: START
SF-STOP: STOP
2.SSH接続はどうする?
IPv4アドレスがないので、従来のSSH接続はできません。そこで EC2 Instance Connect Endpoint (EIC) の出番です。
$ aws ec2-instance-connect ssh \
--instance-id i-xxxxxxxxxxxxxxxxx \
--region ap-northeast-1 \
--connection-type eice \
--os-user ubuntu
これでプライベートなIPv6環境にあるインスタンスにも、踏み台サーバーなしで安全に接続できます。本当に良い時代になりました…。
成果と気づき
本番環境を今回の構成に変えてみた後の気づきなどです。
コスト削減
冒頭でも触れましたが、EIPのコストが消滅したインパクトは大きいです。EC2インスタンス止めている際にアイドル状態だったIPv4利用料金も無くなりました(1日で$0.24 x 30日 = 1ヶ月あたり$7削減です)
浮いたコストで二郎系ラーメンのトッピングが増やせそうです🍜
技術的メリットと学び
今回の移行を通じて、以下の点が教育や実務にも活かせると感じました。
1. IaCの重要性: uv とCDKの組み合わせは再現性が高く、スクラップ&ビルドが容易です。体験が良すぎる!
2. テスト駆動インフラ: Hypothesis を使ったプロパティベーステスト(「コストのかかるリソースが含まれていないか」を機械的にチェックする等)は、品質保証の観点で非常に有用です。
3. IPv6の波: IPv4アドレスの枯渇や課金モデルの変更に伴い、今後は「IPv6ネイティブ」な設計が求められるシーンが増えてくるはずです。その先取りとして良い経験になりました。
私はまだ Cloud9を利用しているのですが、Kiro-cli が使えて今回本当にあっという間に出来上がり助かりました。
まとめ
IPv6を活用することで、固定費を削減しつつ、AWS CDKによるモダンな運用環境を手に入れることができました。
個人運用のサービスであっても、IaCとテストを組み合わせることで、本番環境との差分管理や安全なデプロイが実現できることを実証できたと思います。
皆さんもぜひ、ご自身の環境の「IPv6化」、検討してみてはいかがでしょうか?
トレノケートのAWS研修で、学びを実践力に変える
トレノケートの AWS認定トレーニング では、AWS社の厳格な基準を満たした認定講師が、体系的かつ実践的な学習をサポートします。
基礎から応用、そして認定資格取得まで。
目的やレベルに応じて最適なコースをお選びいただけます。
トレノケートのAWS認定トレーニング一覧
▼生成AIを詳しく学びたいなら Developing Generative AI Applications on AWS!
生成AIの基礎から応用まで包括的に学びたい上級者向けのコースです。
実際のプロジェクトで生成AIを活用したい方、生成AIのアーキテクチャパターンについて深く理解したい方にもオススメです
▼AWS初心者の方は、 AWS Cloud Practitioner Essentials から!
座学中心の研修で、AWSを初めて学ぶ方や、営業などで提案に関わる方におすすめです。
「AWS Certified Cloud Practitioner」資格取得を目指す方の基礎知識修得にも最適です。
▼実践スキルを磨くなら、AWS Technical Essentials で !
実機演習が中心の研修です。仕事で構築作業を行う方や、シナリオベースの演習を通じて、実際に手を動かしながら各サービスの特徴を学びたい方におすすめのAWS研修です。
いきなり有償コースに抵抗がある方や雰囲気を知りたい方には、トレノケート主催の無料セミナーもおすすめです。
AWSの基本を知りたい方や、AWSについて詳しく知りたいという 方は、弊社のAWS認定インストラクターが解説するこちらの記事がおすすめです。
▶「 AWSとは?AWS認定講師が解説」 を確認する
体系的な学びを通じて、AWSを“理解する”から“使いこなす”へ。
トレノケートは、皆さまのクラウドスキル成長を全力でサポートします。