国产av一二三区|日本不卡动作网站|黄色天天久久影片|99草成人免费在线视频|AV三级片成人电影在线|成年人aV不卡免费播放|日韩无码成人一级片视频|人人看人人玩开心色AV|人妻系列在线观看|亚洲av无码一区二区三区在线播放

網(wǎng)易首頁 > 網(wǎng)易號(hào) > 正文 申請入駐

我花兩周拆解Terraform的JSON輸出,發(fā)現(xiàn)這些文檔沒寫的坑

0
分享至

大多數(shù)運(yùn)維工程師運(yùn)行過成千上萬次terraform plan,但幾乎沒人看過加上-json標(biāo)志后輸出的內(nèi)容。我在開發(fā)開源漂移檢測工具tfdrift時(shí),花了兩周時(shí)間鉆進(jìn)這份JSON輸出。結(jié)果發(fā)現(xiàn)它結(jié)構(gòu)清晰得令人意外,但也藏著幾處文檔里找不到的陷阱。

如果你正在基于Terraform構(gòu)建任何工具——漂移檢測、策略執(zhí)行、成本估算、變更分析——這篇技術(shù)深潛就是我當(dāng)時(shí)希望有人寫給我的指南。


獲取JSON輸出的正確姿勢


首先,基礎(chǔ)操作。你不能直接管道terraform plan得到JSON。文本輸出和JSON輸出是完全不同的代碼路徑,必須分兩步走:

# 第一步:生成計(jì)劃文件terraform plan -out=tfplan -input=false -no-color# 第二步:轉(zhuǎn)換為JSONterraform show -json tfplan

-out標(biāo)志把計(jì)劃保存為二進(jìn)制文件(人類不可讀),terraform show -json再把它轉(zhuǎn)成結(jié)構(gòu)化JSON。第一步不能跳過——沒有terraform plan -json這種直接輸出JSON到stdout的標(biāo)志。這點(diǎn)最初讓我栽了跟頭。

Python里這樣實(shí)現(xiàn):

import subprocessimport jsondef get_plan_json(workspace_path: str) -> dict:# 生成計(jì)劃文件subprocess.run(["terraform", "plan", "-out=tfplan","-input=false", "-no-color"],cwd=workspace_path,capture_output=True,text=True,timeout=600,# 轉(zhuǎn)換為JSONresult = subprocess.run(["terraform", "show", "-json", "tfplan"],cwd=workspace_path,capture_output=True,text=True,timeout=120,return json.loads(result.stdout)

注意幾個(gè)細(xì)節(jié)。plan的超時(shí)設(shè)為10分鐘——大型工作空間資源多,plan需要刷新狀態(tài)并調(diào)用云廠商API,耗時(shí)可能很長。show的超時(shí)更短,因?yàn)樗皇亲x取本地文件。另外必須加-input=false,因?yàn)槲覀円苑墙换ツJ竭\(yùn)行——不加的話,Terraform可能掛起等待用戶輸入。

plan JSON的結(jié)構(gòu)

JSON輸出字段很多,但對漂移檢測來說,真正重要的只有一個(gè):resource_changes。簡化版長這樣:

{"format_version": "1.2","terraform_version": "1.7.0","resource_changes": ["address": "aws_security_group.api_sg","mode": "managed","type": "aws_security_group","name": "api_sg","provider_name": "registry.terraform.io/hashicorp/aws","change": {"actions": ["update"],"before": {"ingress": ["from_port": 443,"to_port": 443,"cidr_blocks": ["10.0.0.0/8"]],"tags": {"Name": "api-sg"}},"after": {"ingress": ["from_port": 443,"to_port": 443,"cidr_blocks": ["10.0.0.0/8"]},"from_port": 22,"to_port": 22,"cidr_blocks": ["0.0.0.0/0"]],"tags": {"Name": "api-sg"}},"after_sensitive": {},"after_unknown": {}}

resource_changes里的每個(gè)條目代表Terraform想要修改的一個(gè)資源。change對象包含四個(gè)關(guān)鍵部分:

actions:一個(gè)數(shù)組,描述Terraform要對資源做什么??赡艿闹蛋?code>["no-op"](無變更)、["create"]、["update"]、["delete"],以及組合如["delete", "create"](銷毀后重建)。

before:資源的當(dāng)前狀態(tài),直接從狀態(tài)文件讀取。

after:資源執(zhí)行計(jì)劃后的預(yù)期狀態(tài)。

after_unknown:執(zhí)行后才能確定的值,比如新創(chuàng)建資源的ID。


那些文檔沒寫的坑

第一,敏感值的處理。after_sensitive標(biāo)記哪些字段包含敏感數(shù)據(jù),但它只告訴你字段名,不告訴你值在哪里。實(shí)際值被替換成true,你得自己遞歸遍歷after對象來定位。更麻煩的是,敏感標(biāo)記可能出現(xiàn)在嵌套結(jié)構(gòu)的任意層級(jí)。

第二,after_unknown的結(jié)構(gòu)與after不完全一致。有時(shí)候after里有個(gè)字段,after_unknown里對應(yīng)位置卻是true,表示整個(gè)字段未知;有時(shí)候是部分未知,比如列表里的某些元素。解析時(shí)必須同時(shí)處理布爾值和嵌套對象兩種情況。

第三,資源地址的解析。address字段看起來簡單,比如aws_security_group.api_sg,但模塊嵌套時(shí)變成module.vpc.aws_security_group.api_sg,甚至module.vpc.module.subnet.aws_security_group.api_sg。沒有內(nèi)置的分隔方法,只能按點(diǎn)號(hào)分割后手動(dòng)識(shí)別哪些是模塊前綴、哪些是實(shí)際資源。

第四,no-op動(dòng)作的噪音。即使資源沒有任何變更,只要被引用或依賴,也可能出現(xiàn)在resource_changes里,actions["no-op"]。過濾掉這些條目能顯著減少后續(xù)處理的負(fù)擔(dān)。

從JSON到漂移檢測

tfdrift的核心邏輯其實(shí)不復(fù)雜:定期運(yùn)行上述流程,把resource_changes持久化,對比歷史記錄識(shí)別意外變更。真正的工程挑戰(zhàn)在于:

1. 大規(guī)模工作空間的性能——超時(shí)策略、并發(fā)控制、狀態(tài)緩存

2. 變更的語義理解——同樣是update,改標(biāo)簽和改安全組規(guī)則的風(fēng)險(xiǎn)等級(jí)完全不同

3. 噪聲過濾——自動(dòng)識(shí)別由正常部署引起的預(yù)期變更,只告警真正的漂移

JSON解析只是起點(diǎn)。但如果沒有吃透這份輸出的結(jié)構(gòu)和邊界情況,后續(xù)所有功能都建在沙地上。

特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關(guān)推薦
熱點(diǎn)推薦
搞不懂!一個(gè)2米13中鋒,29歲拿到8000萬合同,30歲被擺上了貨架

搞不懂!一個(gè)2米13中鋒,29歲拿到8000萬合同,30歲被擺上了貨架

球毛鬼胎
2026-05-09 16:14:33
一位34歲大齡剩女的相親標(biāo)準(zhǔn):“想娶我,必須要滿足這三個(gè)條件”

一位34歲大齡剩女的相親標(biāo)準(zhǔn):“想娶我,必須要滿足這三個(gè)條件”

多久情感
2026-05-09 10:32:07
別人不用登你微信,就能看聊天記錄,趕緊刪掉這些內(nèi)容!

別人不用登你微信,就能看聊天記錄,趕緊刪掉這些內(nèi)容!

呼呼歷史論
2026-05-09 08:25:32
很少有人知道:1994年夏天,木星為地球擋下了20億顆原子彈!

很少有人知道:1994年夏天,木星為地球擋下了20億顆原子彈!

觀察宇宙
2026-05-09 21:25:25
離婚3年后我才懂:頭婚一旦散場,90%的女人,幸福其實(shí)就“清零”

離婚3年后我才懂:頭婚一旦散場,90%的女人,幸福其實(shí)就“清零”

三農(nóng)老歷
2026-05-10 09:56:16
夢鴿李天一赴美不歸?看到85歲李雙江“現(xiàn)狀”,原來?xiàng)詈榛鶝]說謊

夢鴿李天一赴美不歸?看到85歲李雙江“現(xiàn)狀”,原來?xiàng)詈榛鶝]說謊

阿纂看事
2024-11-05 11:54:58
北京治安:表象安穩(wěn)與人心疏離的深層沉思

北京治安:表象安穩(wěn)與人心疏離的深層沉思

記錄生活日常阿蜴
2026-05-10 02:48:06
沒錢回國掙有錢美國花,如今定居美國的江珊,暴露了她的利己主義

沒錢回國掙有錢美國花,如今定居美國的江珊,暴露了她的利己主義

葉老四
2026-05-10 08:29:56
足壇悲喜一夜!國米3-0大勝,拜仁1-0絕殺,馬競0-1爆冷,尤文1-0

足壇悲喜一夜!國米3-0大勝,拜仁1-0絕殺,馬競0-1爆冷,尤文1-0

桃葉渡春
2026-05-10 08:38:53
歐爾班剛下臺(tái),匈牙利立刻驅(qū)逐俄間諜,16年親俄路線開始清算

歐爾班剛下臺(tái),匈牙利立刻驅(qū)逐俄間諜,16年親俄路線開始清算

桂系007
2026-05-08 22:26:27
曹德旺關(guān)閉8.84億美廠:美國不講理,不再陪玩

曹德旺關(guān)閉8.84億美廠:美國不講理,不再陪玩

最新聲音
2026-05-07 07:04:47
徐帆回應(yīng)離婚僅9個(gè)月,馮小剛與其前男友同聚,與養(yǎng)女關(guān)系引爭議

徐帆回應(yīng)離婚僅9個(gè)月,馮小剛與其前男友同聚,與養(yǎng)女關(guān)系引爭議

阿豐聊娛
2026-05-10 09:07:30
貔貅認(rèn)主不看財(cái)富,這四個(gè)生肖千萬別碰,戴了反而會(huì)破財(cái)

貔貅認(rèn)主不看財(cái)富,這四個(gè)生肖千萬別碰,戴了反而會(huì)破財(cái)

紙鳶奇譚
2026-04-13 16:06:54
泰康銷冠任曉敏被立案:光環(huán)之下,誰在透支信任?

泰康銷冠任曉敏被立案:光環(huán)之下,誰在透支信任?

新民周刊
2026-05-08 19:46:57
半年打一針!近4000萬慢性鼻竇炎有新藥了

半年打一針!近4000萬慢性鼻竇炎有新藥了

健康觸點(diǎn)
2026-05-09 06:08:51
河北多地漫天楊絮似大雪紛飛 省綠辦:多年前曾定下治理時(shí)間表 每年都有打藥等防治措施

河北多地漫天楊絮似大雪紛飛 省綠辦:多年前曾定下治理時(shí)間表 每年都有打藥等防治措施

閃電新聞
2026-05-09 12:40:08
美國訪華再生突變?中方官宣兩重要人物訪華,特朗普不在名單上

美國訪華再生突變?中方官宣兩重要人物訪華,特朗普不在名單上

丁丁鯉史紀(jì)
2026-05-09 18:27:01
廣東絕殺贏球后杜鋒卻犯渾了?或激怒周琦趙睿:11冠王G3戰(zhàn)危險(xiǎn)了

廣東絕殺贏球后杜鋒卻犯渾了?或激怒周琦趙睿:11冠王G3戰(zhàn)危險(xiǎn)了

籃球快餐車
2026-05-10 01:55:47
95年火車上我偷喂戴銬男人饅頭,他下車踢我行李,回家打開我愣了

95年火車上我偷喂戴銬男人饅頭,他下車踢我行李,回家打開我愣了

千秋文化
2026-05-08 10:32:33
最高院:提供 “口交” “肛交”等進(jìn)入式性服務(wù),是否屬賣淫行為?

最高院:提供 “口交” “肛交”等進(jìn)入式性服務(wù),是否屬賣淫行為?

周軍律師聊案子
2026-04-21 09:50:16
2026-05-10 11:11:00
灰度測試中
灰度測試中
生活正在重構(gòu),目前還在灰度測試階段,暫不全量發(fā)布。
2370文章數(shù) 22關(guān)注度
往期回顧 全部

科技要聞

DeepSeek融資,改寫所有人的估值

頭條要聞

媒體:高市要建日版"中情局" 不僅是為重啟"軍國主義"

頭條要聞

媒體:高市要建日版"中情局" 不僅是為重啟"軍國主義"

體育要聞

成立128年后,這支升班馬首奪頂級(jí)聯(lián)賽冠軍

娛樂要聞

消失已久的陳寶國,近況曝光惹人揪心

財(cái)經(jīng)要聞

白酒大逃殺

汽車要聞

軸距加長/智駕拉滿 阿維塔07L定位大五座SUV

態(tài)度原創(chuàng)

教育
本地
健康
房產(chǎn)
公開課

教育要聞

特級(jí)教師陳紅梅:打造一間“具身交互”的讀寫教室

本地新聞

用蘇繡的方式,打開江西婺源

干細(xì)胞能讓人“返老還童”嗎

房產(chǎn)要聞

低價(jià)甩賣!海口這個(gè)地標(biāo)商業(yè),無人接盤!

公開課

李玫瑾:為什么性格比能力更重要?

無障礙瀏覽 進(jìn)入關(guān)懷版