清理未使用的 IP 位址
实验
20 分钟
universal_currency_alt
5 积分
show_chart
中级
info
此实验可能会提供 AI 工具来支持您学习。
此内容尚未针对移动设备进行优化。
为获得最佳体验,请在桌面设备上访问通过电子邮件发送的链接。
GSP646

總覽
本實驗室將帶您運用 Cloud Run functions 和 Cloud Scheduler,找出並清理浪費的雲端資源。在 Google Cloud 中,靜態 IP 位址若附加至負載平衡器或虛擬機器 (VM) 執行個體,就屬於免費資源。如果預留靜態 IP 位址,卻未使用,系統會按小時累計費用。在高度依賴靜態 IP 位址和大規模動態佈建的應用程式中,這種浪費可能會隨著時間的累積,產生可觀的額外支出。
學習內容
- 建立使用靜態外部 IP 位址的 Compute Engine VM,以及另一個未使用的靜態外部 IP 位址
- 部署 Cloud Run 函式來找出未使用的位址
- 建立 Cloud Scheduler 工作,透過 HTTP 觸發條件排定函式的執行時間
架構
下圖說明本實驗室第一節使用的架構,您將排定 Cloud Run 函式的執行時間,找出並清理未使用的 IP 位址。

設定和需求
在本節中,您將設定基礎架構和完成實驗室所需的身分。
瞭解以下事項後,再點選「Start Lab」按鈕
請詳閱以下操作說明。實驗室活動會計時,且中途無法暫停。點選「Start Lab」後就會開始計時,顯示可使用 Google Cloud 資源的時間。
您將在真正的雲端環境完成實作實驗室活動,而不是模擬或示範環境。為此,我們會提供新的暫時憑證,供您在實驗室活動期間登入及存取 Google Cloud。
為了順利完成這個實驗室,請先確認:
- 可以使用標準的網際網路瀏覽器 (Chrome 瀏覽器為佳)。
注意事項:請使用無痕模式 (建議選項) 或私密瀏覽視窗執行此實驗室,這可以防止個人帳戶和學員帳戶之間的衝突,避免個人帳戶產生額外費用。
- 是時候完成實驗室活動了!別忘了,活動一旦開始將無法暫停。
注意事項:務必使用實驗室專用的學員帳戶。如果使用其他 Google Cloud 帳戶,可能會產生額外費用。
如何開始研究室及登入 Google Cloud 控制台
-
點選「Start Lab」按鈕。如果實驗室會產生費用,畫面上會出現選擇付款方式的對話方塊。左側的「Lab Details」窗格會顯示下列項目:
- 「Open Google Cloud console」按鈕
- 剩餘時間
- 必須在這個研究室中使用的臨時憑證
- 完成這個實驗室所需的其他資訊 (如有)
-
點選「Open Google Cloud console」;如果使用 Chrome 瀏覽器,也能按一下滑鼠右鍵,選取「在無痕視窗中開啟連結」。
接著,實驗室會啟動相關資源,並開啟另一個分頁,顯示「登入」頁面。
提示:您可以在不同的視窗中並排開啟分頁。
注意:如果頁面中顯示「選擇帳戶」對話方塊,請點選「使用其他帳戶」。
-
如有必要,請將下方的 Username 貼到「登入」對話方塊。
{{{user_0.username | "Username"}}}
您也可以在「Lab Details」窗格找到 Username。
-
點選「下一步」。
-
複製下方的 Password,並貼到「歡迎使用」對話方塊。
{{{user_0.password | "Password"}}}
您也可以在「Lab Details」窗格找到 Password。
-
點選「下一步」。
重要事項:請務必使用實驗室提供的憑證,而非自己的 Google Cloud 帳戶憑證。
注意:如果使用自己的 Google Cloud 帳戶來進行這個實驗室,可能會產生額外費用。
-
按過後續的所有頁面:
- 接受條款及細則。
- 由於這是臨時帳戶,請勿新增救援選項或雙重驗證機制。
- 請勿申請免費試用。
Google Cloud 控制台稍後會在這個分頁開啟。
注意:如要使用 Google Cloud 產品和服務,請點選「導覽選單」,或在「搜尋」欄位輸入服務或產品名稱。
啟動 Cloud Shell
Cloud Shell 是搭載多項開發工具的虛擬機器,提供永久的 5 GB 主目錄,而且在 Google Cloud 中運作。Cloud Shell 提供指令列存取權,方便您使用 Google Cloud 資源。
-
點按 Google Cloud 控制台頂端的「啟用 Cloud Shell」圖示
。
-
系統顯示視窗時,請按照下列步驟操作:
- 繼續操作 Cloud Shell 視窗。
- 授權 Cloud Shell 使用您的憑證發出 Google Cloud API 呼叫。
連線建立完成即代表已通過驗證,而且專案已設為您的 Project_ID:。輸出內容中有一行文字,宣告本工作階段的 Project_ID:
Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}
gcloud 是 Google Cloud 的指令列工具,已預先安裝於 Cloud Shell,並支援 Tab 鍵自動完成功能。
- (選用) 您可以執行下列指令來列出使用中的帳戶:
gcloud auth list
- 點按「授權」。
輸出內容:
ACTIVE: *
ACCOUNT: {{{user_0.username | "ACCOUNT"}}}
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- (選用) 您可以使用下列指令來列出專案 ID:
gcloud config list project
輸出內容:
[core]
project = {{{project_0.project_id | "PROJECT_ID"}}}
注意:如需 gcloud 的完整說明,請前往 Google Cloud 參閱 gcloud CLI 總覽指南。
工作 1:啟用 API 並複製存放區
-
在 Cloud Shell 啟用 Cloud Scheduler API:
gcloud services enable cloudscheduler.googleapis.com
注意:啟用 Cloud Scheduler API 需要一些時間。
點選「Check my progress」,確認目標已達成。
啟用 Cloud Scheduler API
-
複製存放區:
git clone https://github.com/GoogleCloudPlatform/gcf-automated-resource-cleanup.git && cd gcf-automated-resource-cleanup/
-
設定環境變數,並將存放區資料夾設為 $WORKDIR,本實驗室相關的所有指令都會在這個資料夾中執行:
export PROJECT_ID=$(gcloud config list --format 'value(core.project)' 2>/dev/null)
export region={{{project_0.default_region | Region}}}
WORKDIR=$(pwd)
工作 2:建立 IP 位址
-
在 Cloud Shell 前往 unused-ip 目錄:
cd $WORKDIR/unused-ip
-
將 IP 位址名稱匯出為變數:
export USED_IP=used-ip-address
export UNUSED_IP=unused-ip-address
-
建立兩個靜態 IP 位址:
gcloud compute addresses create $USED_IP --project=$PROJECT_ID --region={{{project_0.default_region | Region}}}
gcloud compute addresses create $UNUSED_IP --project=$PROJECT_ID --region={{{project_0.default_region | Region}}}
本實驗室使用 區域,但您可以選擇其他區域,只要在實驗室的其餘部分中保持一致即可。
-
確認已建立兩個地址:
gcloud compute addresses list --filter="region:({{{project_0.default_region | Region}}})"
在輸出內容中,狀態顯示為「RESERVED」即表示該 IP 位址未使用:
NAME ADDRESS/RANGE TYPE PURPOSE NETWORK REGION SUBNET STATUS
unused-ip-address 35.232.144.85 EXTERNAL {{{project_0.default_region | Region}}} RESERVED
used-ip-address 104.197.56.87 EXTERNAL {{{project_0.default_region | Region}}} RESERVED
點選「Check my progress」,確認目標已達成。
建立兩個靜態 IP 位址
-
將使用的 IP 位址設為環境變數:
export USED_IP_ADDRESS=$(gcloud compute addresses describe $USED_IP --region={{{project_0.default_region | Region}}} --format=json | jq -r '.address')
工作 3:建立 VM
-
在 Cloud Shell 中建立執行個體:
gcloud compute instances create static-ip-instance \
--zone={{{project_0.default_zone | Zone}}} \
--machine-type=e2-medium \
--subnet=default \
--address=$USED_IP_ADDRESS
點選「Check my progress」,確認目標已達成。
建立執行個體並使用先前建立的靜態 IP 位址。
-
確認其中一個 IP 位址目前處於使用中狀態:
gcloud compute addresses list --filter="region:({{{project_0.default_region | Region}}})"
輸出結果會與下列內容相似:
NAME ADDRESS/RANGE TYPE PURPOSE NETWORK REGION SUBNET STATUS
unused-ip-address 35.232.144.85 EXTERNAL {{{project_0.default_region | Region}}} RESERVED
used-ip-address 104.197.56.87 EXTERNAL {{{project_0.default_region | Region}}} IN_USE
工作 4:查看 Cloud Run 函式程式碼
輸出內容如下所示:
const compute = new Compute();
compute.getAddresses(function(err, addresses){ // gets all addresses across regions
if(err){
console.log("there was an error: " + err);
}
if (addresses == null) {
console.log("no addresses found");
return;
}
console.log("there are " + addresses.length + " addresses");
// iterate through addresses
for (let item of addresses){
// get metadata for each address
item.getMetadata(function(err, metadata, apiResponse) {
// if the address is not used:
if (metadata.status=='RESERVED'){
// compute age by converting ISO 8601 timestamps to Date
var creationDate = new Date(metadata.creationTimestamp);
var currDate = new Date();
var addressAge = Math.floor((currDate - creationDate)/86400e3);;
// delete address
item.delete(function(err, operation, apiResponse2){
if (err) {
console.log("could not delete address: " + err);
}
})
}
在上述程式碼範例中,下列項目相當重要:
-
compute.getAddresses(function(err, addresses) 會使用 getAddresses 方法,擷取專案中所有區域的 IP 位址。
-
item.getMetadata(function(err, metadata, apiResponse) 會取得每個 IP 位址的中繼資料,並檢查 STATUS 欄位。
-
if ((metadata.status=='RESERVED') & (calculateAge(metadata.creationTimestamp) >= ageToDelete)){ 會檢查 IP 位址是否處於使用中狀態、使用輔助函式計算 IP 位址存在時間,並將存在時間與常數 (本實驗室中設為 0) 進行比較。
-
item.delete(function(err, operation, apiResponse2){ 會刪除 IP 位址。
工作 5:部署 Cloud Run 函式
-
停用 Cloud Functions API:
gcloud services disable cloudfunctions.googleapis.com
-
重新啟用 Cloud Functions API:
gcloud services enable cloudfunctions.googleapis.com
-
為您的 Appspot 服務帳戶新增 artifactregistry.reader 權限。請將 [PROJECT_ID] 改成您的 qwiklabs 專案 ID。
gcloud projects add-iam-policy-binding [PROJECT_ID] \
--member="serviceAccount:[PROJECT_ID]@appspot.gserviceaccount.com" \
--role="roles/artifactregistry.reader"
-
在 Cloud Shell 中部署 Cloud Run 函式:
gcloud functions deploy unused_ip_function --gen2 --trigger-http --runtime=nodejs20 --region={{{project_0.default_region | Region}}}
- 如果出現提示訊息,請輸入 Y,允許未經驗證的叫用要求。
注意:視區域而定,部署 Cloud 函式可能需要 2 到 5 分鐘。
點選「Check my progress」,確認目標已達成。
部署 Cloud Run 函式
-
將觸發網址設為環境變數:
export FUNCTION_URL=$(gcloud functions describe unused_ip_function --region={{{project_0.default_region | Region}}} --format=json | jq -r '.url')
工作 6:排定 Cloud Run 函式的執行時間並進行測試
-
在 Cloud Shell 中,建立「App Engine 應用程式」來使用 Cloud Scheduler:
gcloud app create --region {{{project_0.startup_script.app_region | REGION}}}
-
在 Cloud Shell 中建立 Cloud Scheduler 工作,讓系統在每天凌晨 2 點執行 Cloud Run 函式:
gcloud scheduler jobs create http unused-ip-job \
--schedule="* 2 * * *" \
--uri=$FUNCTION_URL \
--location={{{project_0.default_region | Region}}}
點選「Check my progress」,確認目標已達成。
建立 App Engine 應用程式
-
手動觸發工作來進行測試:
gcloud scheduler jobs run unused-ip-job \
--location={{{project_0.default_region | Region}}}
系統應該不會輸出任何內容。
點選「Check my progress」,確認目標已達成。
執行 Cloud Scheduler 工作
-
確認未使用的 IP 位址已刪除:
gcloud compute addresses list --filter="region:({{{project_0.default_region | Region}}})"
輸出結果會與下列內容相似:
NAME ADDRESS/RANGE TYPE PURPOSE NETWORK REGION SUBNET STATUS
used-ip-address 104.197.56.87 EXTERNAL {{{project_0.default_region | Region}}} IN_USE
點選「Check my progress」,確認目標已達成。
確認未使用的 IP 位址已刪除
恭喜!
在本實驗室中,您完成了下列工作:
- 建立使用靜態外部 IP 位址的 Compute Engine VM,以及另一個未使用的靜態外部 IP 位址
- 部署 Cloud Run 函式來找出未使用的位址
- 建立 Cloud Scheduler 工作,透過 HTTP 觸發條件排定函式的執行時間
Google Cloud 教育訓練與認證
協助您瞭解如何充分運用 Google Cloud 的技術。我們的課程會介紹專業技能和最佳做法,讓您可以快速掌握要領並持續進修。我們提供從基本到進階等級的訓練課程,並有隨選、線上和虛擬課程等選項,方便您抽空參加。認證可協助您驗證及證明自己在 Google Cloud 技術方面的技能和專業知識。
使用手冊上次更新日期:2025 年 1 月 15 日
實驗室上次測試日期:2025 年 1 月 15 日
Copyright 2026 Google LLC 保留所有權利。Google 和 Google 標誌是 Google LLC 的商標,其他公司和產品名稱則有可能是其關聯公司的商標。