使用 Cloud Functions 和 Cloud Scheduler定期清理未使用的IP 資源

閱讀時間約 10 分鐘

Overview

使用 Cloud FunctionsCloud Scheduler 來識別和清理浪費的雲端資源。

raw-image
  • 創建used-ip-address和unused-ip-address
  • static-ip-instance使用used-ip-address
  • 創建cloud function(unused_ip_function)檢查並刪除沒有被使用的ip資源
  • 創建Cloud Scheduler定期執行cloud function

啟用 Cloud Scheduler API 和clone github repo

  1. 啟用 Cloud Scheduler API
gcloud services enable cloudscheduler.googleapis.com
raw-image
  1. clone 原廠的github程式碼
git clone <https://github.com/GoogleCloudPlatform/gcf-automated-resource-cleanup.git> && cd gcf-automated-resource-cleanup/


  1. 設定環境變數(PROJECT_ID, region, WORKDIR)
export PROJECT_ID=$(gcloud config list --format 'value(core.project)' 2>/dev/null)
export region=us-east1
export WORKDIR=$(pwd)


建立 IP 位址

cd $WORKDIR/unused-ip
  1. 設定環境變數(USED_IP, UNUSED_IP)
export USED_IP=used-ip-address
export UNUSED_IP=unused-ip-address


  1. 使用剛剛的環境變數建立兩個靜態IP
gcloud compute addresses create $USED_IP --project=$PROJECT_ID --region=us-east1
gcloud compute addresses create $UNUSED_IP --project=$PROJECT_ID --region=us-east1


  1. 檢查環境中的ip資源
gcloud compute addresses list --filter="region:(us-east1)"


  1. 將USED_IP的ip設定環境變數(USED_IP_ADDRESS)
export USED_IP_ADDRESS=$(gcloud compute addresses describe $USED_IP --region=us-east1 --format=json | jq -r '.address')


建立 VM

  1. 使用USED_IP_ADDRESS建立VM(static-ip-instance)
gcloud compute instances create static-ip-instance \\
--zone=us-east1-d \\
--machine-type=e2-medium \\
--subnet=default \\
--address=$USED_IP_ADDRESS
raw-image
  1. 檢查IP資源使用情況
gcloud compute addresses list --filter="region:(us-east1)"


查看 github repo 的程式碼

  1. grep "const compute" -A 31 → 查找"const compute"並往下顯示31行
cat $WORKDIR/unused-ip/function.js | grep "const compute" -A 31

output:

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 convering 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) uses the getAddresses method to retrieve IP addresses across all regions in the project.
  • item.getMetadata(function(err, metadata, apiResponse) gets the metadata for each IP address and checks its STATUS field.
  • if ((metadata.status=='RESERVED') & (calculateAge(metadata.creationTimestamp) >= ageToDelete)){ checks whether the IP address is in use, calculates its age by using a helper function, and compares its age against a constant (set to 0 for the purposes of the lab).
  • item.delete(function(err, operation, apiResponse2){ deletes the IP address.

部署Cloud Function

  1. 部署Cloud Function
gcloud functions deploy unused_ip_function --trigger-http --runtime=nodejs12 --region=us-east1
raw-image
  1. 將Cloud Function的Trigger URL設定環境變數(FUNCTION_URL)
export FUNCTION_URL=$(gcloud functions describe unused_ip_function --region=us-east1 --format=json | jq -r '.httpsTrigger.url')
raw-image

使用Cloud Scheduler

  1. 建立一個App Engine 以使用 Cloud Scheduler(舊版Scheduler需先起一個App Engine)
gcloud app create --region us-east1


  1. 建立一個 Cloud Scheduler 任務以在每晚凌晨 2 點(UTC+0)執行 Cloud Function
gcloud scheduler jobs create http unused-ip-job \\
--schedule="* 2 * * *" \\
--uri=$FUNCTION_URL \\
--location=us-east1

手動觸發Cloud Scheduler定時作業

  1. 手動觸發Cloud Scheduler
gcloud scheduler jobs run unused-ip-job \\
--location=us-east1
raw-image

檢查是否成功刪除

  1. 檢查ip資源狀態只剩下used-ip-address
gcloud compute addresses list --filter="region:(us-east1)"



如果你喜歡這篇文章歡迎幫我按愛心鼓勵一下喔!~閱讀愉快!~

延伸閱讀

其他學習資訊


18會員
38內容數
歡迎來到「Marcos的方格子」!目前在「Marcos談科技」撰寫在職涯上學習到的知識,在「Marcos談書」分享我在日常的閱讀和心得,歡迎您的到來!!
留言0
查看全部
發表第一個留言支持創作者!
Marcos的方格子 的其他內容
在 OpenAI 推出 ChatGPT 模型的企業版後不到一天,Google Cloud Next 2023開跑,展示了Google Cloud最新產品發佈,並體現了各科技龍頭在 AI 領域搶佔主導地位的激烈競賽。
在著陸區(Landing Zone)在規劃時,在上一篇文章[1]的網路架構分享是以Shared VPC為例,但是在現實生活中,總是有各種前人留下的歷史共業或公司規範、作業考量而不能使用Shared VPC來集中管理雲端環境的網路架構。 因此分享常見的網路架構設計和設計架構時參考的因素!
💡 什麼是登陸區(Landing Zone)?這是一種模塊化與可擴展的配置,讓組織可以因應商業需要動態使用Google Cloud。
數位轉型是對組織運作方式的根本性重塑。 數位轉型使用各種不同的資訊技術並利用數據驅動來優化工作流程,達到對快速變動的市場更快、更智能、更即時的決策。最終,改變了客戶的期望並創造了新的商機。
宣告式管理是一種管理方法,其中您描述系統或資源的期望狀態,而不必關心實際如何達到該狀態。kubectl apply 命令在 Kubernetes 中實現了這種宣告式管理方式,以下是執行指令時的運作流程...
在 OpenAI 推出 ChatGPT 模型的企業版後不到一天,Google Cloud Next 2023開跑,展示了Google Cloud最新產品發佈,並體現了各科技龍頭在 AI 領域搶佔主導地位的激烈競賽。
在著陸區(Landing Zone)在規劃時,在上一篇文章[1]的網路架構分享是以Shared VPC為例,但是在現實生活中,總是有各種前人留下的歷史共業或公司規範、作業考量而不能使用Shared VPC來集中管理雲端環境的網路架構。 因此分享常見的網路架構設計和設計架構時參考的因素!
💡 什麼是登陸區(Landing Zone)?這是一種模塊化與可擴展的配置,讓組織可以因應商業需要動態使用Google Cloud。
數位轉型是對組織運作方式的根本性重塑。 數位轉型使用各種不同的資訊技術並利用數據驅動來優化工作流程,達到對快速變動的市場更快、更智能、更即時的決策。最終,改變了客戶的期望並創造了新的商機。
宣告式管理是一種管理方法,其中您描述系統或資源的期望狀態,而不必關心實際如何達到該狀態。kubectl apply 命令在 Kubernetes 中實現了這種宣告式管理方式,以下是執行指令時的運作流程...
你可能也想看
Thumbnail
作家 Morgan Housel 在《華爾街日報》中提出一個觀點:我們是用理解知識的方式在思考、學習金錢觀,而不是用理解心智與行為模式的方式學習理財。這段話讓我意識到,我們的財務決策並非總是理性的,情緒因素也扮演著重要角色。通過掌握金錢心理學,能夠幫助我們改善用錢習慣,使財務決策更為理性和長遠。
Thumbnail
在數位時代,影片成為了許多人分享和傳達訊息的有力工具。影片擁有強大的傳達能力,結合了文字、圖片、音效和動態元素,比閱讀純文字和圖片更有吸引力。 但現在,借助人工智慧(AI)工具的幫助,除了可以根據使用者輸入的提示(Prompt)來生成文字,圖片,音樂等等,甚至還可以生成影片!
Thumbnail
對於經常需要透過文字表達思維的知識工作者來說,這篇文章能為你開啟一扇新的大門。 三段式寫作法的運用,將能有效解決你在語音辨識學習過程中,如何提升效率和深度的問題。同時,它將將為你帶來全新的學習體驗。 使用三段式寫作法40天來,我透過語音辨識,與自我語言的互動。在此過程中,我有三個重大關於成為高產思考
Thumbnail
Obsidian是最棒的數位筆記工具。 其中Obsidian的「連結筆記」功能,解決了過去在紙本筆記中的大問題--「思考的延續性」。想想你還會使用半年前的紙本筆記嗎?我們總在不同時間、不同情景下產生新的想法,「如何讓想法延續」是一直是我們面臨的困難。
Thumbnail
GPT-4對每日寫作的人,是一個超強大的工具! AI讓寫作變得更輕鬆高效,更愛寫,更想寫。 這3個月與GPT-4一起寫作的日子,我體悟了3個深刻收穫:
Thumbnail
Obsidian是我用過最好用的個人知識管理軟體。 Obsidian跟其他PKM軟體比起來,「連結筆記」的能力非常的強。 而Obsidian這種強調筆記連結的軟體天性,在過去22個月裡面,重新定義了我與知識互動的方式。 在這22個月與Obsidian 朝日相處的經驗裡,這是幫助我成為一個更好的知識工
Thumbnail
作為開發人員,您可能想知道是否需要博客。老實說,我寫博客已經有一段時間了,我只能告訴你,在你的網站上擁有一個博客有很大的好處。假設您有一個網站,您在該網站上擁有投資組合併銷售產品或服務。您如何為您的網站帶來更多流量,以便潛在的招聘人員或客戶能夠發現您的產品或服務? 先決條件 項目設置 文章正文
Thumbnail
前天,同業的專利師問我一個美國專利申請案收到35 USC 101核駁的問題,審查委員指出,請求項雖然使用基因演算法,但整體來說,卻是一種抽象概念,而不屬於美國專利法所保護的客體。同業道長不解的是,為什麼明明套用了基因演算法,審查委員卻還是認為是抽象概念。
Thumbnail
使用场景 使用场景:虽然我是思源笔记勇士,但是使用却不多。有些网页我使用了翻译软件进行了全文翻译,使用其他插件剪藏的结果依然是英文。然而,思源笔记却可以中英文同时剪藏。因此,我主要使用思源笔记进行网页剪藏,备份阅读材料。可能大材小用了。另外,使用思源笔记进行 PDF 阅读。 思源笔记 介绍 优点
Thumbnail
只將合成原料用來調整氣味的作法,和一般調香師的思維背道而馳。若是你/妳想要學習仿香,那這篇文章並不適合你。但如果你喜歡天然原料,但又想作出商業香水的輕盈感、明亮度、持久力,那你可以參考看看我們的作法。 我們會接續【在天然香水配方裏添加合成原料】這篇,介紹更多的合成原料/單體。
Thumbnail
作家 Morgan Housel 在《華爾街日報》中提出一個觀點:我們是用理解知識的方式在思考、學習金錢觀,而不是用理解心智與行為模式的方式學習理財。這段話讓我意識到,我們的財務決策並非總是理性的,情緒因素也扮演著重要角色。通過掌握金錢心理學,能夠幫助我們改善用錢習慣,使財務決策更為理性和長遠。
Thumbnail
在數位時代,影片成為了許多人分享和傳達訊息的有力工具。影片擁有強大的傳達能力,結合了文字、圖片、音效和動態元素,比閱讀純文字和圖片更有吸引力。 但現在,借助人工智慧(AI)工具的幫助,除了可以根據使用者輸入的提示(Prompt)來生成文字,圖片,音樂等等,甚至還可以生成影片!
Thumbnail
對於經常需要透過文字表達思維的知識工作者來說,這篇文章能為你開啟一扇新的大門。 三段式寫作法的運用,將能有效解決你在語音辨識學習過程中,如何提升效率和深度的問題。同時,它將將為你帶來全新的學習體驗。 使用三段式寫作法40天來,我透過語音辨識,與自我語言的互動。在此過程中,我有三個重大關於成為高產思考
Thumbnail
Obsidian是最棒的數位筆記工具。 其中Obsidian的「連結筆記」功能,解決了過去在紙本筆記中的大問題--「思考的延續性」。想想你還會使用半年前的紙本筆記嗎?我們總在不同時間、不同情景下產生新的想法,「如何讓想法延續」是一直是我們面臨的困難。
Thumbnail
GPT-4對每日寫作的人,是一個超強大的工具! AI讓寫作變得更輕鬆高效,更愛寫,更想寫。 這3個月與GPT-4一起寫作的日子,我體悟了3個深刻收穫:
Thumbnail
Obsidian是我用過最好用的個人知識管理軟體。 Obsidian跟其他PKM軟體比起來,「連結筆記」的能力非常的強。 而Obsidian這種強調筆記連結的軟體天性,在過去22個月裡面,重新定義了我與知識互動的方式。 在這22個月與Obsidian 朝日相處的經驗裡,這是幫助我成為一個更好的知識工
Thumbnail
作為開發人員,您可能想知道是否需要博客。老實說,我寫博客已經有一段時間了,我只能告訴你,在你的網站上擁有一個博客有很大的好處。假設您有一個網站,您在該網站上擁有投資組合併銷售產品或服務。您如何為您的網站帶來更多流量,以便潛在的招聘人員或客戶能夠發現您的產品或服務? 先決條件 項目設置 文章正文
Thumbnail
前天,同業的專利師問我一個美國專利申請案收到35 USC 101核駁的問題,審查委員指出,請求項雖然使用基因演算法,但整體來說,卻是一種抽象概念,而不屬於美國專利法所保護的客體。同業道長不解的是,為什麼明明套用了基因演算法,審查委員卻還是認為是抽象概念。
Thumbnail
使用场景 使用场景:虽然我是思源笔记勇士,但是使用却不多。有些网页我使用了翻译软件进行了全文翻译,使用其他插件剪藏的结果依然是英文。然而,思源笔记却可以中英文同时剪藏。因此,我主要使用思源笔记进行网页剪藏,备份阅读材料。可能大材小用了。另外,使用思源笔记进行 PDF 阅读。 思源笔记 介绍 优点
Thumbnail
只將合成原料用來調整氣味的作法,和一般調香師的思維背道而馳。若是你/妳想要學習仿香,那這篇文章並不適合你。但如果你喜歡天然原料,但又想作出商業香水的輕盈感、明亮度、持久力,那你可以參考看看我們的作法。 我們會接續【在天然香水配方裏添加合成原料】這篇,介紹更多的合成原料/單體。