iT邦幫忙

2026 iThome 鐵人賽

DAY 18
0
Modern Web

前端來點 AWS 技能樹!系列 第 18 篇

Day18 - Elastic IP:替 EC2 保留固定的公網 IP

  • 分享至 

  • xImage
  •  

昨天看完了路由表與 Internet Gateway,知道 EC2 的流量怎麼走到網際網路。今天回到一開始貼進瀏覽器的那個 Public IP:如果我們試著在練習完後先把 EC2 停止,隔天再啟動,原本的網址還能用嗎?

答案是不行,因為 Start 之後 EC2 會拿到新的 Public IP。
而這個問題對現在的我們來說頂多是重新複製一次網址就好了,但接下來要替網站接上網域,而網域設定裡記的就是 IP;IP 一換,網域就會指到舊位址,每次都得回去改。

所以今天我們就來認識 Elastic IP(彈性 IP,簡稱 EIP),替這台 EC2 保留固定的公網 IPv4 ㄅ!

先分清楚 Reboot 和 Stop 再 Start

EC2 有兩種重開的方式:

  • Reboot:只重新啟動作業系統,機器本身一直開著。
  • Stop → Start:先把整台 EC2 關掉,AWS 會收回借給它的 Public IP;等 Start 時,再分配一個新的。
位址 Reboot Stop → Start
自動指派的 Public IP(目前使用) 不變 取得新的位址
Elastic IP(今天要設定) 不變 不變
Private IP 不變 不變

所以等一下要驗證 EIP 有沒有效,一定要用 Stop → Start。只做 Reboot 的話,IP 本來就不會變,看不出差別。

Elastic IP:跟著帳號,不跟著機器

自動指派的 Public IP 跟著 EC2,機器一停就被收回。而Elastic IP 則是保留在你的 AWS 帳號裡,只要不主動釋放,它就一直是你的,要給哪台 EC2 用也是由你決定。
以下是操作時會遇到四個動作:

動作 做了什麼
Allocate,配置 取得一個 EIP,保留在自己的 AWS 帳號中
Associate,關聯 把這個 EIP 指定給某台 EC2 使用
Disassociate,解除關聯 從 EC2 拆下來,但位址仍保留在帳號中、繼續計費
Release,釋放 交還給 AWS,不再保留

要注意,Allocate 只是把 IP 領進帳號裡,還要再 Associate 後,這台 EC2 才會真的用上它。另外,EIP 只能在配置它的 Region 裡使用,所以要跟當時建的 EC2 選一樣的 Region。
這裡還有一個容易誤會的地方:這次會取得新的 EIP,並取代 EC2 原本自動指派的 Public IP。 原本的 Public IP 會回到 AWS 的位址池,不能直接把那個位址轉成 EIP。完成後,瀏覽器要改用新位址。

配置之前先看費用

截至目前到今天 AWS 官方文件來看,AWS 一般 Public IPv4 的牌價是每個位址每小時 US$0.005,使用中與閒置的費率相同。這從 Amazon 位址池取得的 EIP 也適用。

情況 Public IPv4 費用
EC2 執行中,使用自動指派的 Public IP 一個位址,每小時 US$0.005
EC2 執行中,改用 EIP EIP 取代原本的自動 Public IP;關聯完成後仍是一個位址,每小時 US$0.005
EC2 Stop 後 自動 Public IP 已釋放,不再收該位址的費用;保留的 EIP 照常計費
EIP 尚未關聯,或已解除關聯 EIP 仍計費;若執行中的 EC2 也持有自動 Public IP,兩個位址各自計費

因此,若每天練完就 Stop,保留 EIP 代表停機期間也會付 IPv4 的費用。
以一個 EIP 連續保留 30 天估算:

US$0.005 × 24 小時 × 30 天 = US$3.60

以上為未扣抵 credits 的 IPv4 費用估算,不含 EC2、EBS(EC2 的硬碟儲存)、流量與稅費。

在 Console 配置並關聯 EIP

先回到 AWS Console → EC2,一樣先確認 Region 後,啟動之前建的 EC2 並等待狀態檢查通過。記下目前的 Public 與 Private IPv4,並沿用之前的方式,用目前的 Public IP 確認網站能開啟,再進行位址切換。
若之前有記下 Public IP,而且之後確實 Stop 過 EC2,也可以和今天的位址對照;沒有記錄就直接往下做。

配置一個新位址

  1. 在左側目錄欄中找到 Network & Security 區塊點 Elastic IPs(彈性 IP),進到頁面後按 Allocate Elastic IP address(配置彈性 IP 位址) 按鈕
  2. Public IPv4 address pool(公有 IPv4 位址集區) 保持已選取 Amazon's pool of IPv4 addresses,其他也都不要動,然後按 Allocate(配置)。
    https://ithelp.ithome.com.tw/upload/images/20261002/201797931OktTYjzMY.png

畫面上的 全域靜態 IP 位址/建立加速器是 AWS Global Accelerator 的介紹,這次配置 EIP 不需要操作它。
完成後,列表會出現新的Elastic IP 位址。

關聯到既有 EC2

選取剛才的 EIP,按 Actions(動作) 中 Associate Elastic IP address(與彈性 IP 位址建立關聯):

欄位 這次的設定
Resource type(資源類型) Instance(執行個體)
Instance(執行個體) 選擇你建立的 Instance ID
Private IP address(私有 IP 位址) 這台 EC2 的主要 Private IPv4,可對照剛才記下的值

確認後按 Associate(建立關聯)。EIP 會對應到這台 EC2 的 Private IP,這就是我們之前所說的 Public 與 Private IP 對應。
回到 EC2 中 Instances(執行個體) 看我們這次建的 Instance 重新整理,確認兩個欄位:

  • Public IPv4 address 已變成剛才配置的 EIP。
  • Private IPv4 address 仍是原本的 Private IP。

用新的 EIP 開啟網站

在自己的瀏覽器輸入:

http://你的_ELASTIC_IP

把 你的_ELASTIC_IP 換成 Console 顯示的位址。因為沿用之前的 Docker -p 80:3000,這裡仍使用 http://,網址後面不用加 :3000。如果程式沒有寫死原本的 Public IP,換 EIP 也不用重新 build image 或建立容器。
也記得別把新 EIP 填進 Security Group 的 My IP 來源欄位:EIP 是瀏覽器要前往的目的位址,My IP 則是你這邊的對外來源 IP。 如果自己的來源 IP 已改變,例如換了 Wi-Fi 或 VPN,就要更新建立的 Security Group 中 HTTP 80 規則,讓它允許目前的來源。

停止再啟動,確認 IP 不變

回到開場的問題:現在再做一次 Stop → Start,網址還能用嗎?停止期間網站會打不開,Session Manager 也會斷線,這是正常的。

  1. 在 Instances(執行個體) 選這台 EC2,按 Instance state(執行個體狀態) 找到 Stop instance(停止執行個體)。注意別按到 Terminate,那會刪除整台機器。
  2. 等狀態變成 Stopped,再按 Instance state → Start instance(啟動執行個體)。
  3. 等狀態檢查通過,確認 Public IPv4 address 還是同一個 EIP。
  4. 用同一個 http://你的_ELASTIC_IP 開啟網站。
    沿用Day 12、Day 13 的設定,正常情況下 container 會隨 Docker 啟動;如果之前手動停過 container 的話,就要重新啟動它。
    如果 IP 沒變,網站卻沒回來,用 Connect → Session Manager 連進去檢查。
    執行:
sudo systemctl is-active docker
sudo docker ps -a --filter name=my-app
curl -I http://127.0.0.1
  • curl -I 只看回應標頭,就跟 DevTools Network 裡的 Response Headers 是同一類資訊。
  • systemctl 是 Linux 用來管理 Docker 這類背景服務的指令
看到什麼 下一步
Docker 是 inactive 或 failed 用 sudo systemctl status docker 看原因;沒啟動的話,執行 sudo systemctl enable --now docker
my-app 是 Exited 執行 sudo docker start my-app;一直退出的話,看 sudo docker logs --tail 50 my-app
curl 回 HTTP/1.1 200 OK,瀏覽器卻打不開 http 有回應的話,就檢查網址和 Security Group 設定的 My IP

不再使用時要 Release

明天的網域會用到這個 EIP,所以現在先不要 Release。不過只要它還在帳號裡就會計費,整個練習結束後,記得照下面的步驟釋放。
到 Elastic IPs(彈性 IP) 選這個 EIP,先按 Actions(動作) 中 Disassociate Elastic IP address(取消關聯彈性 IP 位址),解除關聯後再一次點選這個 EIP 按 Actions(動作) 中 Release Elastic IP addresses(釋出彈性 IP 位址)。
有三件事要記得:

  • Release 之後,不保證拿得回同一個 IP。
  • 如果 EC2 還在執行,解除關聯後會重新拿到一個自動指派的 Public IP,這個 IP 也會計費。
  • 接上網域之後,要先刪掉指向這個 IP 的網域記錄,再 Release。這個 IP 之後可能會分配給別人,記錄沒刪的話,你的網域就會指到別人的機器。

Release EIP 不會停掉 EC2,不需要執行的 EC2 也記得要 Stop。

現在我們能替 EC2 保留固定的公網位址了。下一篇接著認識網域與 DNS,看看瀏覽器輸入容易記住的名稱後,怎麼找到這個 IP。

參考資料


上一篇
Day17 - 路由表與 Internet Gateway:EC2 怎麼連上網際網路?
下一篇
Day19 - 網域與 DNS:讓網站有個好記的名字
系列文
前端來點 AWS 技能樹! 共 19 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言