はじめに
AWSの個人学習でEC2を停止しても、料金が完全に止まるとは限りません。
EC2本体のコンピューティング料金は止まっても、EBS、Elastic IP、ALB、NAT Gateway、RDSなどが残っていると、別の料金が続くことがあります。
この記事では、EC2自動停止の記事と重複しないように、 学習後に消し忘れやすい課金リソースの確認方法 に絞って整理します。
この記事で分かること
- EC2停止後も残るリソース
- ALBとNAT Gatewayを消し忘れやすい理由
- EBS、Elastic IP、RDSで確認するポイント
- AWS CLIで棚卸しする最小コマンド
- 学習後に使える片付けチェックリスト
先に結論
個人学習用のAWS環境では、学習後に次を確認します。
最初に見るのは リージョン です。
東京リージョンだけで作業したつもりでも、バージニア北部や大阪リージョンに検証リソースが残っていることがあります。
| リソース | 学習後の判断 |
|---|---|
| EC2 | 再利用するなら停止。不要なら終了 |
| EBSボリューム | 不要なら削除。必要ならサイズとアタッチ状態を確認 |
| EBSスナップショット | 不要な古いスナップショットを削除 |
| Elastic IP | 固定IPが不要なら解放 |
| ALB | 停止できないため、不要なら削除。ターゲットグループも確認 |
| NAT Gateway | 停止できないため、不要なら削除。関連するElastic IPとルートも確認 |
| RDS | 短期なら停止。長期不要ならスナップショット取得後に削除を検討 |
コンソールで見る場合は、まず画面右上のリージョンを切り替えながら確認します。
東京リージョン: ap-northeast-1
大阪リージョン: ap-northeast-3
バージニア北部: us-east-1
削除系の操作は元に戻せないことがあります。
本番環境や共有アカウントでは、必ず管理者、バックアップ、影響範囲を確認してから行ってください。
この記事は、自分のAWSアカウントで行うハンズオン学習を前提にしています。
前提
- 対象読者: 自分のAWSアカウントでEC2、VPC、ALB、RDSなどを試す人
- 使う環境: AWSマネジメントコンソール、AWS CLI
- 仕様確認日: 2026-09-09
- 扱う範囲: 個人学習環境の片付けと料金確認
- 扱わない範囲: 会社の本番環境、複数アカウント統制、正確な料金計算
この記事のCLI例では、学習用リソースに Purpose=Study というタグを付けている前提にしています。
タグを付けていない場合は、フィルターなしで一覧を確認し、対象リソースを目視で判断してください。
CLIを実行する前に、学習用のプロファイル、アカウント、リージョンを確認します。
# 自分の学習用プロファイルと確認対象リージョンに置き換える
export AWS_PROFILE="study"
export AWS_REGION="ap-northeast-1"
printf 'AWS_PROFILE=%s AWS_REGION=%s\n' "$AWS_PROFILE" "$AWS_REGION"
aws sts get-caller-identity \
--query "{Account:Account,Arn:Arn}" \
--output table
以降のCLI例は AWS_REGION で指定した1リージョンだけを確認します。
使った可能性があるリージョンごとに値を切り替え、同じ確認を繰り返します。
用語の短い説明
| 用語 | 短い説明 |
|---|---|
| タグ | AWSリソースに付ける目印。Purpose=Study のように用途を書くと棚卸ししやすい |
| EBS | EC2に接続するブロックストレージ。EC2を止めてもデータは残る |
| Elastic IP | AWSアカウントに確保する固定のパブリックIPv4アドレス |
| ALB | Application Load Balancer。HTTP/HTTPSの入口として使うロードバランサー |
| NAT Gateway | private subnetからインターネットへ出るためのマネージドNAT |
| RDS | AWSのマネージドリレーショナルデータベース |
学習用リソースにはタグを付けておく
片付けを楽にするには、作る段階でタグを付けておきます。
| タグキー | 値の例 | 使い道 |
|---|---|---|
Purpose |
Study |
学習用リソースだけを探す |
Owner |
your-name |
誰が作ったか分かるようにする |
DeleteAfter |
2026-09-30 |
消す目安の日付を残す |
AWSコンソールで作成するときは、多くのサービスで Tags または タグ の入力欄があります。
CLIで作る場合も、できるだけ作成時にタグを付けます。
# 既存EC2に学習用タグを付ける。対象IDは自分のEC2に置き換える
aws ec2 create-tags \
--resources i-0123456789abcdef0 \
--tags Key=Purpose,Value=Study Key=DeleteAfter,Value=2026-09-30
タグは料金を止めたり、DeleteAfter の日付に自動削除したりする機能ではありません。
ただし、後から「何を消せばいいか」を探しやすくするため、個人学習でもかなり効きます。
EC2停止だけでは終わらない
EC2を停止すると、EC2インスタンス本体のコンピューティング料金は止まります。
一方で、EBSボリュームは残り、Elastic IPが関連付いている場合は料金対象になります。
AWS公式ドキュメントでも、停止したEC2ではEBSボリュームの保存料金が残ること、Elastic IPが関連付いたままだと課金されることが説明されています。
まずはEC2の状態を見ます。
コンソールでは次を開きます。
EC2
-> Instances
# Purpose=Study のタグが付いたEC2だけを一覧にする
aws ec2 describe-instances \
--filters "Name=tag:Purpose,Values=Study" \
--query "Reservations[].Instances[].{Id:InstanceId,State:State.Name,Type:InstanceType,Name:Tags[?Key=='Name']|[0].Value}" \
--output table
stopped ならEC2本体は止まっています。
ただし、次のEBSやElastic IPを続けて確認します。
EBSボリュームとスナップショットを確認する
EBSボリュームはEC2のディスクです。
EC2を停止してもデータを保持するため、不要になったものは削除します。
EBSは in-use だけでなく、プロビジョニングされた available ボリュームにも保存料金がかかります。
コンソールでは次を開きます。
EC2
-> Volumes
# Purpose=Study のタグが付いたEBSボリュームを確認する
aws ec2 describe-volumes \
--filters "Name=tag:Purpose,Values=Study" \
--query "Volumes[].{Id:VolumeId,State:State,SizeGiB:Size,AttachedInstance:Attachments[0].InstanceId}" \
--output table
見るポイントは次です。
| 状態 | 判断 |
|---|---|
in-use |
EC2に接続中。消す前にEC2側の必要性を確認 |
available |
未接続。学習で不要なら削除候補 |
スナップショットも確認します。
EC2
-> Snapshots
# 自分のアカウントが所有するStudyタグ付きスナップショットを確認する
aws ec2 describe-snapshots \
--owner-ids self \
--filters "Name=tag:Purpose,Values=Study" \
--query "Snapshots[].{Id:SnapshotId,Started:StartTime,SizeGiB:VolumeSize,State:State}" \
--output table
スナップショットは差分バックアップですが、保存データ量に応じた料金が発生します。
古い検証用スナップショットを残し続けないようにします。
また、EBSスナップショットは差分で管理されるため、1つ削除しても料金が期待どおり減らないことがあります。
他のスナップショットから参照されているデータは保持されるためです。
学習用に何度もスナップショットを作った場合は、古いものから機械的に消すのではなく、復元に必要なものだけを残します。
登録中のAMIが使うルートスナップショットは、AMIを登録解除するまで削除できません。
AWS Backup管理のスナップショットはAWS Backup側から削除します。
また、EBS Recycle Binのルールがあると、削除後も保持期間中は料金が発生するため確認が必要です。
Elastic IPを確認する
Elastic IPは固定のパブリックIPv4アドレスです。
AWSのElastic IP公式ドキュメントでは、Elastic IPは使用中でも未使用でも料金対象と説明されています。
また、Elastic IP以外のパブリックIPv4アドレスも料金対象になります。
つまり、EC2を止めただけでは固定IPまわりの料金確認は終わりません。
コンソールでは次を開きます。
EC2
-> Elastic IP addresses
# Elastic IPの関連付け状態を確認する
aws ec2 describe-addresses \
--query "Addresses[].{PublicIp:PublicIp,AllocationId:AllocationId,AssociationId:AssociationId,InstanceId:InstanceId}" \
--output table
AssociationId が空なら、どのリソースにも関連付いていないElastic IPです。
Elastic IPは、関連付けを外しただけではAWSアカウントに確保されたままです。
不要なら解放します。
# 不要なElastic IPを解放する。実行前にAllocationIdを必ず確認する
aws ec2 release-address \
--allocation-id eipalloc-0123456789abcdef0
Elastic IPを解放すると、同じIPアドレスを再取得できるとは限りません。
DNS、許可リスト、外部連携で使っていないか確認してから解放します。
ALBは停止できないので削除する
ALBにはEC2のような stopped 状態がありません。
不要になった場合は削除します。
AWS公式ドキュメントでは、ロードバランサーの稼働中は1時間または1時間未満の単位で課金され、削除するとALBの課金が止まると説明されています。
ただし、削除保護が有効なALBは削除できません。
また、ALBを削除しても、登録先のEC2やターゲットグループは自動では削除されません。
コンソールでは次を開きます。
EC2
-> Load Balancers
# ALB/NLBなどのロードバランサーを一覧にする
aws elbv2 describe-load-balancers \
--query "LoadBalancers[].{Name:LoadBalancerName,Type:Type,State:State.Code,Arn:LoadBalancerArn}" \
--output table
削除する場合は、先にDNSの向き先を切り替え、TTLが切れるまで待ってから、ターゲットグループへの影響も確認します。
# 不要なロードバランサーを削除する。ARNは一覧で確認した値へ置き換える
aws elbv2 delete-load-balancer \
--load-balancer-arn arn:aws:elasticloadbalancing:ap-northeast-1:123456789012:loadbalancer/app/study-alb/0123456789abcdef
ALBを消したあとも、学習用のターゲットグループが残っていないか確認します。
# ターゲットグループを一覧にする
aws elbv2 describe-target-groups \
--query "TargetGroups[].{Name:TargetGroupName,Protocol:Protocol,Port:Port,Arn:TargetGroupArn}" \
--output table
使い終わったターゲットグループは、登録先やCloudFormation/Terraformの管理有無を確認してから削除します。
CloudFormationやTerraformで作った場合は、個別削除よりスタックや構成管理ツール側で削除する方が安全です。
# Terraformで作った学習環境なら、削除前に差分を確認する
terraform plan -destroy
# 確認後、学習環境をまとめて削除する
terraform destroy
CloudFormationなら次の流れです。
# 削除対象のスタックを確認する
aws cloudformation describe-stacks \
--stack-name study-network \
--query "Stacks[0].{Name:StackName,Status:StackStatus}"
# 学習用スタックを削除する
aws cloudformation delete-stack \
--stack-name study-network
NAT Gatewayは特に消し忘れに注意する
個人学習で意外と効きやすいのがNAT Gatewayです。
NAT Gatewayは、作成されている時間と処理したデータ量に応じて課金されます。
EC2を停止しても、NAT Gatewayが available のままなら時間料金が続きます。
AWSサービスへの通信が多い検証では、VPCエンドポイントを使うとNAT Gatewayのデータ処理料金を減らせる場合があります。
現在のNAT Gatewayには、1つのAvailability Zoneで動く従来のゾーン型と、ワークロードに合わせて複数AZへ展開・縮小するRegional NAT Gatewayがあります。
Regional NAT Gatewayは展開中のAZごとに時間料金が発生します。
本節のElastic IPとサブネットの説明は、主にゾーン型のPublic NAT Gatewayを対象にしています。RegionalのAutomatic modeではAWSがIPアドレスを管理します。
コンソールでは次を開きます。
VPC
-> NAT Gateways
# 利用中または作成中のNAT Gatewayを確認する
aws ec2 describe-nat-gateways \
--filter "Name=state,Values=available,pending" \
--query "NatGateways[].{Id:NatGatewayId,State:State,SubnetId:SubnetId,VpcId:VpcId}" \
--output table
不要なら削除します。
# 不要なNAT Gatewayを削除する。ルートテーブルへの影響も確認する
aws ec2 delete-nat-gateway \
--nat-gateway-id nat-0123456789abcdef0
削除後も、NAT Gatewayを向いていたルートは自動削除されず blackhole になります。関連するルートテーブルを削除または更新します。
# NAT Gatewayを向いているルートを探す
aws ec2 describe-route-tables \
--filters "Name=route.nat-gateway-id,Values=nat-0123456789abcdef0" \
--query "RouteTables[].{RouteTableId:RouteTableId,Routes:Routes[?NatGatewayId=='nat-0123456789abcdef0']}" \
--output json
ゾーン型のPublic NAT GatewayではElastic IPを使います。
NAT Gatewayを削除してもElastic IPは関連付けが外れるだけで、AWSアカウントからは解放されません。不要なElastic IPを別途解放します。
private subnetのEC2やLambdaが外部へ通信する構成では、NAT Gatewayを削除すると通信できなくなることがあります。
学習後の削除は問題なくても、検証を続ける場合はルートテーブルと通信要件を確認します。
RDSは停止しても7日後に自動起動する
RDSは一時的に停止できます。
ただし、通常のRDS DBインスタンスは停止できる期間に上限があり、7日間停止したままだと自動的に起動します。
また、停止中はDBインスタンス時間の料金はかかりませんが、プロビジョニング済みストレージ、Provisioned IOPS、保存対象のバックアップには課金されます。パブリックアクセス可能なDBでは、パブリックIPv4アドレスの料金も続きます。
停止にかかる時間は構成や状態によって変わります。再開にはインスタンス復旧が必要なため、AWS公式のRDS停止ドキュメントでは数分から数時間かかる場合があると説明されています。
さらに、すべての構成で停止できるわけではありません。
たとえば、リードレプリカ、リードレプリカを持つDBインスタンス、RDS for SQL ServerのMulti-AZ構成などは停止に制限があります。
コンソールでは次を開きます。
RDS
-> Databases
# RDS DBインスタンスの状態を確認する
aws rds describe-db-instances \
--query "DBInstances[].{Id:DBInstanceIdentifier,Status:DBInstanceStatus,Engine:Engine,Public:PubliclyAccessible}" \
--output table
短期間の学習なら停止、長期間使わないならスナップショットを取得して削除を検討します。
# 検証用RDSを一時停止する
aws rds stop-db-instance \
--db-instance-identifier study-db
本当に不要なら、先にスナップショット要否を判断します。
削除コマンドは取り返しがつきにくいため、ここでは流れだけに留めます。
1. アプリから接続していないことを確認する
2. 必要なら最終スナップショットを取得する
3. DBインスタンスを削除する
4. 翌日以降、BillsまたはCost Explorerで料金が止まったか確認する
Cost Explorerは少なくとも24時間に1回データを更新しますが、24時間より遅れるデータもあります。
削除直後の表示だけで判断せず、日をまたいでサービス別、リージョン別に確認します。
学習後の片付けチェックリスト
-
EC2が
stoppedまたは不要ならterminatedになっている -
EBSの
availableボリュームを確認した - 不要なEBSスナップショットを確認した
- Elastic IPの未関連付けを確認した
- ALBを使い終わったら削除した
- ALB削除後に不要なターゲットグループを確認した
-
NAT Gatewayが
availableのまま残っていない - NAT Gateway削除後にElastic IPとルートテーブルを確認した
- RDSの停止期間とストレージ料金を確認した
- RDSが停止できる構成か、7日後の自動起動を確認した
- 使ったリージョンをすべて確認した
- 翌日以降にBillsまたはCost Explorerを確認した
試験で意識する観点
AWS認定試験では、サービスの停止と課金停止を同じ意味で覚えない方が安全です。
| 観点 | 覚え方 |
|---|---|
| EC2 | 停止するとインスタンス料金は止まるが、EBSやElastic IPは別 |
| ALB | 停止ではなく削除で止める |
| NAT Gateway | 時間料金とデータ処理料金を見る |
| RDS | 停止中もストレージやバックアップは残る。7日後の自動起動に注意 |
| Cost Explorer | 実績確認の画面として使う |
関連記事
- AWS EC2を毎日18時に自動停止する EventBridge Scheduler設定手順
- AWS CloudTrailでEC2停止と削除履歴を確認する手順
- AWS VPCエンドポイント入門 5種類とPrivateLinkの関係を整理する
- AWSネットワークのGateway 11種類を整理する Internet・NAT・VPN・Transit・Direct Connect
- AWS EC2ストレージ入門 EBS・IOPS・スナップショットを整理する(今後公開予定)
参考・確認先
- How EC2 instance stop and start works
- Amazon EBS pricing
- Delete an Amazon EBS snapshot
- Delete an Application Load Balancer
- Pricing for NAT gateways
- Work with NAT gateways
- Regional NAT gateways for automatic multi-AZ expansion
- Amazon VPC pricing
- Elastic IP addresses
- Stopping an Amazon RDS DB instance temporarily
- What is AWS Cost Explorer?
- 仕様確認日: 2026-09-09
まとめ
- EC2停止だけでは、AWS学習環境の料金確認は終わらない
- ALBとNAT Gatewayは停止ではなく削除を考える
- EBS、Elastic IP、RDS、スナップショットは残りやすい
- 最後はBillsまたはCost Explorerで、サービス別、リージョン別に見る
おわりに
AWS学習環境は、作る手順と同じくらい片付け手順が大事です。
Wealthy Designでは、クラウド構成やWebシステムを小さく検証し、運用まで見据えて改善する開発に取り組んでいます。
会社の取り組みは、会社サイトにまとめています。

