Elastic IP(EIP)は、AWSアカウントに確保して、EC2インスタンスやネットワークインターフェイスへ付け替えられる固定のパブリックIPv4アドレスです。この記事では、自動で割り当てられるパブリックIPとの違い、AWS CLIとTerraformでの割り当て手順、2024年2月から変わった料金を、東京リージョンの実額とコードで整理しました。いまは使用中のEIPにも毎時0.005ドルがかかるため、関連付けのない遊休EIPを洗い出すコマンド、誤ってリリースしたアドレスの回復条件、アカウント間の移管、逆引きDNSの注意点まで扱います。最後に、EIPを持たない構成へ置き換える判断基準も示します。
まとめ:Elastic IPを使う場面と月3.65ドルの課金を増やさない運用の要点
EIPが必要になるのは、取引先のファイアウォールに登録するIPや、DNSのAレコードに書くIPを変えられない場合です。自動割り当てのパブリックIPは、インスタンスを停止して起動し直すたびに別のアドレスへ変わります。停止しても同じIPを保ちたいならEIPを使います。
料金は、使用中でもアイドルでも1アドレスあたり毎時0.005ドルです。東京リージョンで1か月(730時間)持てば3.65ドルになります。2024年2月1日以降は「起動中のインスタンスに付けていれば無料」という説明は当てはまりません。
運用で最初にやるべきことは、関連付けのないEIPをCLIで一覧にしてリリースすることです。そのうえで、SSH接続のためだけのEIPはEC2 Instance Connect Endpointへ、外部への送信元IPの固定はNATゲートウェイのEIPへ集約します。こうすればパブリックIPv4の本数そのものを減らせます。
Elastic IPの仕組みと自動割り当てパブリックIPv4との違いを押さえる基礎
EC2のパブリックIPv4には、起動時にAWSのプールから自動で付く「パブリックIPアドレス」と、自分で確保する「Elastic IPアドレス」の2種類があります。両者はアドレスの持ち主と寿命が違います。
停止と起動でアドレスが変わる自動割り当てIPとEIPの挙動の違い
EC2インスタンスのIPアドレス指定の説明では、自動割り当てのパブリックIPは、インスタンスを停止・休止・終了した時点で解放されます。停止や休止から再び起動したときに割り当てられるのは、新しいアドレスです。同じページには、動的DNSで新しいIPへ切り替えると伝播に最大24時間かかることがあり、その対策としてEIPを使うよう書かれています。
| 比較項目 | 自動割り当てパブリックIP | Elastic IP |
|---|---|---|
| 持ち主 | インスタンス(AWSのプールから貸与) | AWSアカウント(リリースするまで保持) |
| 停止して起動したとき | 別のアドレスに変わる | 同じアドレスのまま |
| 別のインスタンスへの付け替え | できない | 関連付けを解除して付け替えられる |
| 料金(2024年2月以降) | 毎時0.005ドル | 使用中・アイドルとも毎時0.005ドル |
| IPv6 | 対象外 | 対象外(IPv4のみ) |
インスタンスにEIPを関連付けると、それまで付いていた自動割り当てのIPはAWSのプールへ返されます。Elastic IPアドレスの概要によれば、一度返したアドレスを再利用したり、EIPへ変換したりはできません。いま使っている自動割り当てのIPをそのまま固定したい、という要望は実現できないということです。取引先に登録済みのIPがある場合は、EIPを確保して新しいIPで登録し直す段取りが必要になります。インスタンス側の仕組みはAmazon EC2の仕組みとインスタンスタイプ・料金モデルで解説しています。
リージョンあたり5個の上限とネットワークボーダーグループの制約
EIPの既定の上限は、リージョンあたり5個です。上限はService Quotasのコンソールから引き上げを申請できます。BYOIP(自社で保有するIPアドレスの持ち込み)のプールから確保したEIPは、この上限に数えられません。
EIPはリージョン専用で、別のリージョンへは移せません。さらにネットワークボーダーグループ単位で確保されるため、EIPと関連付け先のリソースは同じボーダーグループに属している必要があります。指定を省くと、リージョン内の全アベイラビリティーゾーンを含むボーダーグループが自動で設定されます。Local Zonesを使わない通常の構成なら、この既定値のままで困ることはありません。
EC2にElastic IPを割り当てるAWS CLIとTerraformの設定手順
コンソールでは[ネットワーク&セキュリティ]→[Elastic IP]から確保と関連付けができます。ここでは、手順を記録に残せて再現もできるCLIとTerraformの書き方を示します。
allocate-address・associate-addressのCLI設定手順
確保はallocate-address、関連付けはassociate-addressで行います。確保と同時にNameタグを付けておくと、後で遊休EIPを洗い出すときに用途を判別できます。
# 1) 東京リージョンでEIPを確保し、用途が分かるNameタグを付ける
aws ec2 allocate-address \
--region ap-northeast-1 \
--domain vpc \
--tag-specifications 'ResourceType=elastic-ip,Tags=[{Key=Name,Value=web-prod-eip}]' \
--query "[PublicIp,AllocationId]" --output text
# 出力例: 203.0.113.10 eipalloc-0123456789abcdef0
# 2) インスタンスへ関連付ける(既存の自動割り当てパブリックIPは解放される)
aws ec2 associate-address \
--region ap-northeast-1 \
--instance-id i-0123456789abcdef0 \
--allocation-id eipalloc-0123456789abcdef0
# 3) 付け替えるときは関連付けを解除してから別のインスタンスへ関連付ける
aws ec2 disassociate-address --region ap-northeast-1 --association-id eipassoc-0123456789abcdef0
関連付け先のインスタンスは、インターネットゲートウェイへのルートを持つパブリックサブネットに置く必要があります。プライベートサブネットのインスタンスにEIPを付けても、インターネットからは届きません。関連付けを解除したEIPはアカウントに残り続け、課金も止まりません。不要になったらrelease-addressまで実行してください。
Terraform:aws_eipのdomain・prevent_destroy設定
Terraformではaws_eipリソースを使います。現行のドキュメントの例は domain = "vpc" で書かれています。instance と network_interface はどちらか一方しか指定できません。
# EC2インスタンスにEIPを付け、terraform destroyでアドレスを失わないよう保護する
resource "aws_eip" "web" {
domain = "vpc"
instance = aws_instance.web.id
tags = {
Name = "web-prod-eip"
}
lifecycle {
prevent_destroy = true # 取引先に登録済みのIPを誤って手放さないための保護
}
}
output "web_public_ip" {
value = aws_eip.web.public_ip
}
prevent_destroy を付ける理由は、EIPを一度リリースすると同じアドレスが戻る保証がないからです。インスタンスの作り直しでEIPまで再作成される設計にしていると、取引先へのIP再登録が毎回発生します。インスタンスとEIPのライフサイクルを分けたい場合は、EIPをインスタンスとは別のモジュールに置いて、関連付けだけを aws_eip_association で管理する構成が扱いやすくなります。
2024年2月以降のパブリックIPv4課金と東京リージョンの実額
EIPの料金は、2024年2月1日の改定で考え方が変わりました。競合の解説には改定前の説明が残っているものがあるため、一次情報で確認します。
使用中もアイドルも毎時0.005ドルになったEIPの料金改定の中身
AWSは2023年7月28日のパブリックIPv4課金の告知で、2024年2月1日から全てのパブリックIPv4アドレスに毎時0.005ドルを課金すると発表しました。改定前は、実行中のインスタンスに付いた1個目のEIPは無料で、アイドルのEIPと追加のEIPだけが有料でした。改定後は、使用中のEIPも自動割り当てのパブリックIPも同じ単価です。
| パブリックIPv4の種類 | 2024年1月まで | 2024年2月1日以降 |
|---|---|---|
| 稼働インスタンスのEIP・自動割り当てIP | 無料 | 毎時0.005ドル |
| 1台に追加で付けたEIP | 毎時0.005ドル | 毎時0.005ドル |
| どこにも関連付けていないEIP | 毎時0.005ドル | 毎時0.005ドル |
| BYOIPで持ち込んだアドレス | 課金なし | 課金なし |
単価はAmazon VPCの料金ページの「パブリックIPv4アドレス」タブに掲載されています。1個を1か月(730時間)持てば3.65ドル、上限いっぱいの5個なら18.25ドルです。金額は小さく見えますが、コンテナのタスクやAuto Scalingのインスタンスに自動でパブリックIPを付ける設定のままだと、台数に比例して増えます。告知では、旧無料利用枠のEC2に毎月750時間分のパブリックIPv4を12か月含めるとされていました。2025年7月以降に作ったアカウントでは無料の仕組みそのものが変わっているため、AWSを無料で使える範囲と6か月の期限で自分のアカウントの条件を確認してください。
Price List APIで東京の単価を確かめるPythonコード
料金ページはブラウザ側で表を描画するため、単価をプログラムで読むにはPrice List APIのオファーファイルを使います。次のコードはPython 3の標準ライブラリだけで動き、認証も要りません。
# 東京リージョンのパブリックIPv4単価をAWS Price List API(AmazonVPC)から取得する
import json, urllib.request
BASE = "https://pricing.us-east-1.amazonaws.com"
def get(path):
with urllib.request.urlopen(BASE + path, timeout=120) as r:
return json.load(r)
idx = get("/offers/v1.0/aws/AmazonVPC/current/region_index.json")
offer = get(idx["regions"]["ap-northeast-1"]["currentVersionUrl"])
print("version", offer["version"])
for sku, p in offer["products"].items():
usage = p["attributes"].get("usagetype", "")
if not usage.startswith("APN1-PublicIPv4"):
continue
for term in offer["terms"]["OnDemand"].get(sku, {}).values():
for dim in term["priceDimensions"].values():
usd = float(dim["pricePerUnit"]["USD"])
print(usage, usd, "USD/時", "月額", round(usd * 730, 2), "USD")
# 出力例(2026-10-01取得・version 20260917190528)
# APN1-PublicIPv4:ContiguousBlock 0.008 USD/時 月額 5.84 USD
# APN1-PublicIPv4:IdleAddress 0.005 USD/時 月額 3.65 USD
# APN1-PublicIPv4:InUseAddress 0.005 USD/時 月額 3.65 USD
InUseAddress と IdleAddress が同額であることが、2024年2月の改定を反映したデータです。ContiguousBlock は連続したIPv4ブロックを確保する場合の単価で、通常のEIPとは別の課金項目になります。請求書のCost Explorerでも、この usagetype 名で内訳を絞り込めます。
請求を増やす遊休EIPと公開IPv4をCLIで洗い出して止める手順
EIPの無駄は、関連付けを解除したまま残ったアドレスと、用途の分からないアドレスから生まれます。まず一覧を作り、要否を判断してからリリースします。
describe-addressesで関連付けのないEIPを一覧にするコマンド
describe-addressesの出力で、AssociationId が無いものが遊休EIPです。全リージョンを回すと、検証で使ったまま忘れたアドレスも見つかります。
# 全リージョンの「どこにも関連付けていないEIP」を、Nameタグ付きで一覧にする
for region in $(aws ec2 describe-regions --query "Regions[].RegionName" --output text); do
echo "## $region"
aws ec2 describe-addresses --region "$region" \
--query "Addresses[?AssociationId==null].[PublicIp,AllocationId,Tags[?Key=='Name']|[0].Value]" \
--output text
done
# EIPに限らず、アカウント内でパブリックIPv4を持つネットワークインターフェイスを種類別に数える
aws ec2 describe-network-interfaces --region ap-northeast-1 \
--query "NetworkInterfaces[?Association.PublicIp!=null].[InterfaceType,Association.PublicIp,Description]" \
--output table
2本目のコマンドは、EIPだけでなく自動割り当てのIPやNATゲートウェイ、ロードバランサーのアドレスも含めて表示します。InterfaceType が interface の行が大量に出る場合は、EC2やECSのタスクへ自動でパブリックIPを付ける設定を疑ってください。GUIで全体を見たいときは、無料で使えるVPC IPAMのPublic IP insightsが、サービス別・種類別の本数を表示します。
リリースは aws ec2 release-address --allocation-id eipalloc-... で実行します。Nameタグが無く用途が分からないアドレスは、すぐに消さず、1週間ほどタグで「削除予定」と印を付けて関係者に確認するほうが安全です。
誤ってリリースしたEIPを同じアドレスで回復するための条件と手順
リリースしたEIPは、条件がそろえば同じアドレスで取り戻せます。Elastic IPアドレスのリリースの説明では、回復できないのは、そのアドレスがすでに別のAWSアカウントに割り当てられている場合と、回復するとEIPの上限を超える場合です。
# リリースしたEIP(例: 203.0.113.10)を同じアドレスで確保し直す
aws ec2 allocate-address --region ap-northeast-1 --domain vpc --address 203.0.113.10
回復してもタグは戻りません。そして、別のアカウントに先に取られたら二度と戻りません。取引先に登録済みのIPは「回復できるはず」と考えず、リリースしない運用で守るべきです。先に示したTerraformの prevent_destroy は、この事故を防ぐための設定です。
移管・逆引きDNS・NLBでElastic IPを使うときの実務上の注意点
EIPはEC2に付けるだけでなく、アカウントの統合やメールサーバー、ロードバランサーの固定IPでも使われます。それぞれに独自の制約があります。
EIPのアカウント間移管に必要な7日以内の承諾と関連付け解除の条件
組織再編やアカウント分割で、取引先に登録済みのIPを別のアカウントへ移したい場合は、アカウント間でのElastic IPアドレスの移管を使います。移管元が enable-address-transfer で移管先のアカウントIDを指定し、移管先が accept-address-transfer で承諾します。
- 移管元で、EIPをインスタンスやネットワークインターフェイスから関連付け解除する
- 逆引きDNSを設定している場合は、先に削除する(残っていると移管先は承諾できない)
- 移管元で
aws ec2 enable-address-transfer --allocation-id eipalloc-... --transfer-account-id 移管先のアカウントIDを実行する - 移管先で7日以内に
aws ec2 accept-address-transfer --address 203.0.113.10を実行する - 移管先でタグを付け直し、インスタンスへ関連付ける
7日を過ぎると移管は失効し、所有権は移管元へ戻ります。移管できるのは同じリージョンの中だけで、完了するとタグはリセットされます。関連付けを解除している間は通信が止まるため、切り替えはメンテナンス時間内に行ってください。
メール送信用の逆引きDNSを設定するとEIPがロックされる仕様
EC2から直接メールを送る場合、受信側の迷惑メール判定を避けるために逆引きDNS(PTRレコード)を設定します。EC2でのEメール用逆引きDNSレコードの手順では、先にEIPへ解決される正引きのAレコードを用意し、aws ec2 modify-address-attribute --allocation-id eipalloc-... --domain-name mail.example.com で設定します。Aレコードの書き方はAレコードの書き方とdigでの確認手順を参照してください。
逆引きDNSを設定したEIPはアカウントにロックされます。リリースしようとすると「The address cannot be released because it is locked to your account.」というエラーになります。この場合に必要なのは、サポートへのロック解除の依頼です。解除の手間を考えると、逆引きDNSを付けるEIPはメール送信専用に分け、Webサーバー用のEIPと兼用しないほうが管理しやすくなります。
固定IPが必要な公開サービスはEC2でなくNLBにEIPを持たせる判断
「接続元のファイアウォールに固定IPを登録したい」という要件と、「サーバーを冗長化したい」という要件は両立が可能です。Network Load Balancerの作成手順では、インターネット向けのNLBならアベイラビリティーゾーンごとにEIPを1個ずつ割り当てられます。そのEIPはAmazonのIPv4プールから確保したもので、NLBと同じネットワークボーダーグループに属している必要があります。
EC2に直接EIPを付ける構成では、インスタンスを入れ替えるたびに付け替え作業が発生し、その間は通信が止まります。2台以上で冗長化する公開サービスは、NLBにEIPを持たせてEC2はプライベートサブネットに置く、と決めてしまってよいでしょう。ロードバランサーの種類ごとの違いはALBとELBの違いとロードバランサーの使い分けで整理しています。
Elastic IPを使わない判断:IPv4を持たない構成へ寄せる場面と条件
EIPの課金を減らす一番確実な方法は、パブリックIPv4を持つリソースの数を減らすことです。次の2つの場面では、EIPを付けない構成を選ぶべきです。
SSH用のEIPはEC2 Instance Connect Endpointで置き換える
管理者がSSHで入るためだけにEIPを付けている踏み台サーバーは、EIPを使う理由がありません。EC2 Instance Connect Endpointを使うと、パブリックIPを持たないプライベートサブネットのインスタンスへ、プライベートIPのままSSHやRDPで接続できます。
踏み台とEIPを廃止できれば、パブリックIPv4の課金に加えて、インターネットに開いたポート22も消えます。セキュリティグループで接続元IPを絞る運用も要らなくなります。例外は、社外の協力会社が固定の接続先IPを必要とするような、AWSの認証を使えない相手がいる場合です。そのときだけEIPを残します。
取引先のIP制限に固定IPを渡すならNATゲートウェイのEIPで束ねる
外部のAPIや取引先のシステムが「送信元IPの事前登録」を求めることがあります。このとき、EC2の台数分のEIPを登録するのは誤りです。プライベートサブネットのインスタンスからの通信をNATゲートウェイに集めれば、送信元はNATゲートウェイに付けたEIPだけになります。インスタンスを増やしても、取引先に登録するIPは1個のままです。NATゲートウェイの役割はAWS NATゲートウェイの役割とインターネットゲートウェイとの違いで解説しています。
ただしNATゲートウェイには、EIPとは別に時間料金とデータ処理料金がかかります。S3やDynamoDBへの通信までNATゲートウェイを通すと処理料金が膨らむため、AWSのサービス宛ての通信はVPCエンドポイントへ逃がす構成にしてください。損益分岐はVPCエンドポイントとNATゲートウェイの料金比較で試算しています。固定IPの要件とコストを両立する構成を、既存環境の棚卸しから設計したい場合は、AWS・Google Cloud・Azureのインフラ構築でご相談ください。
よくある質問
Elastic IPについて、導入時と運用中によく出る質問に答えます。
Elastic IPは無料で使えますか?
無料ではありません。2024年2月1日から、EIPは使用中かどうかに関係なく、1アドレスあたり毎時0.005ドル課金されます。東京リージョンで1か月持つと3.65ドルです。「起動中のインスタンスに付けていれば無料」という説明は2024年1月までの旧料金です。無料利用枠の扱いはアカウントを作った時期で異なるため、請求ダッシュボードで確認してください。
インスタンスを停止している間もElastic IPの料金はかかりますか?
かかります。停止中のインスタンスに関連付けたEIPはアイドル扱いになり、使用中と同じ毎時0.005ドルが続きます。停止中にもアドレスを保持できることがEIPの利点なので、この料金は固定IPを保つための費用と考えてください。1か月以上使わない検証環境なら、EIPをリリースしてDNSの向き先を外すほうが安くなります。
Elastic IPの上限5個を超えて確保するにはどうすればよいですか?
Service Quotasのコンソールで、Amazon EC2の「EC2-VPC Elastic IPs」のクォータ引き上げをアカウントレベルで申請します。上限はリージョンごとなので、必要なリージョンそれぞれで申請が要ります。申請前に、遊休EIPのリリースや、NLB・NATゲートウェイへの集約で本数を減らせないかを確かめるのが先です。
Elastic IPを別のリージョンへ移すことはできますか?
できません。EIPはリージョン専用で、アカウント間の移管も同じリージョンの中に限定される仕組みです。東京から大阪へシステムを移す場合、大阪で新しいEIPを確保し、取引先にIPの追加登録を依頼する必要があります。移行期間は両方のIPを登録してもらい、切り替え後に旧IPを外す段取りにすると通信断を避けられます。
Elastic IPはIPv6アドレスでも使えますか?
使えません。EIPはIPv4専用であり、IPv6のElastic IPはサポートの対象外です。IPv6アドレスはサブネットのCIDRから割り当てられ、インスタンスを停止して起動しても変わりません。クライアントがIPv6で接続できる環境なら、デュアルスタックのNLBやIPv6アドレスでの公開を検討すると、パブリックIPv4の本数を減らせます。
関連記事
- Amazon EC2とは?仕組み・インスタンスタイプと料金モデル・採用判断を実装者目線で解説:EIPを付けるEC2の総論
- NAT ゲートウェイと NAT インスタンスの違い・料金|AWSのNATコストを抑える方法:送信元IPを固定するNATの費用比較
- AWSのネットワーク接続方式まとめ|VPC内・VPC間・オンプレ・インターネットの選び分け:インターネット接続を含むVPCの接続方式の整理
- VPCエンドポイントとは|2種類の違いとNATゲートウェイとの料金比較・損益分岐点:パブリックIPを経由しないAWSサービスへの接続
- AWSを無料で使える範囲と6か月の期限|無料プランとAlways Freeの境界をCLIで確認する手順:パブリックIPv4を含む無料の範囲