<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Cloud on 维克的博客</title><link>https://blogs.wuvikr.top/tags/cloud/</link><description>Recent content in Cloud on 维克的博客</description><generator>Hugo</generator><language>en</language><lastBuildDate>Fri, 04 Sep 2026 16:08:53 +0800</lastBuildDate><atom:link href="https://blogs.wuvikr.top/tags/cloud/index.xml" rel="self" type="application/rss+xml"/><item><title>Terraform 状态文件管理</title><link>https://blogs.wuvikr.top/posts/terraform%E7%8A%B6%E6%80%81%E6%96%87%E4%BB%B6%E7%AE%A1%E7%90%86/</link><pubDate>Fri, 04 Sep 2026 16:08:53 +0800</pubDate><guid>https://blogs.wuvikr.top/posts/terraform%E7%8A%B6%E6%80%81%E6%96%87%E4%BB%B6%E7%AE%A1%E7%90%86/</guid><description>&lt;h1 id="1-为什么要把-state-搬到云上">1. 为什么要把 State 搬到「云上」&lt;/h1>
&lt;p>State 文件是 Terraform 的「账本」：它记录云上到底有哪些资源、各自的属性。本地存放 State 有三个硬伤：&lt;/p>
&lt;ul>
&lt;li>绑定机器：State 在 A 电脑上，B 电脑 apply 就会&amp;quot;失忆&amp;quot;，容易把资源重建一遍。&lt;/li>
&lt;li>无法协作：两个人同时改同一个环境，互相覆盖，状态文件乱套。&lt;/li>
&lt;li>安全隐患：本地文件易丢，而且里面可能含有明文密码等敏感信息，因此也不建议上传到 gitlab 等代码托管平台。&lt;/li>
&lt;/ul>
&lt;p>解决办法就是 Terraform 的 &lt;strong>Backend 机制&lt;/strong>：&lt;strong>用阿里云 OSS 存 State（集中、加密、可回滚），用 Tablestore 提供加锁（防止多人并发操作冲突）&lt;/strong>。&lt;/p>
&lt;h1 id="2-工作原理">2. 工作原理&lt;/h1>
&lt;p>每次执行 Terraform 命令，OSS Backend 都会走「加锁 → 干活 → 放锁」三步：&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-mermaid" data-lang="mermaid">flowchart LR
A[terraform apply] --&amp;gt; B{从 Tablestore 拿 LockID}
B -- 已存在 --&amp;gt; C[报错：有人在操作]
B -- 不存在 --&amp;gt; D[生成并存入 LockID]
D --&amp;gt; E[读写 OSS 里的 State 文件]
E --&amp;gt; F[释放 LockID]
&lt;/code>&lt;/pre>&lt;ul>
&lt;li>&lt;strong>有锁&lt;/strong> → 说明有人正在操作，或上次操作异常退出，直接报错&lt;/li>
&lt;li>&lt;strong>无锁&lt;/strong> → 自动生成 LockID 存入 Tablestore，操作完成后更新 OSS 中的 State，再释放锁&lt;/li>
&lt;/ul>
&lt;h1 id="3-第一步创建存储--锁资源">3. 第一步：创建「存储 + 锁」资源&lt;/h1>
&lt;p>在正式使用前，要先准备一个 OSS Bucket 和一个 Tablestore 实例/表。它们本身也是云资源，所以也可以用 Terraform 自己建。&lt;/p></description></item><item><title>Terraform 云上存量资源导入</title><link>https://blogs.wuvikr.top/posts/terraform%E4%BA%91%E4%B8%8A%E8%B5%84%E6%BA%90%E5%AF%BC%E5%85%A5/</link><pubDate>Thu, 03 Sep 2026 16:24:03 +0800</pubDate><guid>https://blogs.wuvikr.top/posts/terraform%E4%BA%91%E4%B8%8A%E8%B5%84%E6%BA%90%E5%AF%BC%E5%85%A5/</guid><description>&lt;h1 id="1-为什么要导入云上资源">1. 为什么要&amp;quot;导入&amp;quot;云上资源？&lt;/h1>
&lt;p>很多团队都有这样的经历：最开始用控制台点几下、或者用 CLI 脚本把资源建好了，等资源越攒越多、想标准化管理时，发现这些资源&amp;quot;游离&amp;quot;在 Terraform 之外。&lt;/p>
&lt;p>Terraform 的管理逻辑很简单：&lt;strong>它只认自己 state 文件里记录的资源&lt;/strong>。你在控制台创建的资源，Terraform 根本&amp;quot;看不见&amp;quot;，也不会去动它们。所以要把存量资源管起来，第一步就是&amp;quot;导入&amp;quot;（import）——把云上已有的资源登记进 Terraform 的 state，再补上对应的配置代码。&lt;/p>
&lt;p>导入成功后，这些资源和 Terraform 新建的资源享受完全一样的待遇：能 plan、能 apply、能 diff、能进 CI/CD。&lt;/p>
&lt;h1 id="2-先搞清楚两个概念config-和-state">2. 先搞清楚两个概念：config 和 state&lt;/h1>
&lt;p>这是最容易绕晕的地方，务必先分清：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align: center">概念&lt;/th>
&lt;th style="text-align: center">是什么&lt;/th>
&lt;th style="text-align: center">谁来写&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align: center">&lt;strong>&lt;code>.tf&lt;/code> 配置（config）&lt;/strong>&lt;/td>
&lt;td style="text-align: center">声明&amp;quot;想要什么&amp;quot;，是给人看的声明式代码&lt;/td>
&lt;td style="text-align: center">手写，或工具自动生成&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: center">&lt;strong>&lt;code>terraform.tfstate&lt;/code>（state）&lt;/strong>&lt;/td>
&lt;td style="text-align: center">记录&amp;quot;现在实际是什么&amp;quot;，含真实属性（可能有敏感信息）&lt;/td>
&lt;td style="text-align: center">由 apply / import 自动生成&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>关键点：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>导入只会写 state，不会自动写 config&lt;/strong>（除非你用 &lt;code>-generate-config-out&lt;/code> 或 Terraformer）。&lt;/li>
&lt;li>所以完整流程 = &lt;strong>导入进 state + 补齐 config + plan 核对一致&lt;/strong>，三步缺一不可。&lt;/li>
&lt;li>state 含敏感信息，&lt;strong>永远不要提交到 git&lt;/strong>（后面最佳实践会讲远程存储）。&lt;/li>
&lt;/ul>
&lt;p>整体流程可以先看这张图：&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-mermaid" data-lang="mermaid">flowchart TD
A[盘点存量资源: 类型 / ID / 地域] --&amp;gt; B[环境准备: Terraform + provider + RAM 凭证]
B --&amp;gt; C{资源量多少?}
C --&amp;gt;|少| D[import block / terraform import]
C --&amp;gt;|多| E[aliterraformer 批量导入]
D --&amp;gt; F[生成 config + state]
E --&amp;gt; F
F --&amp;gt; G[terraform plan 核对无漂移]
G --&amp;gt; H[清理只读属性 + 纳入 git + OSS 远程 state]
&lt;/code>&lt;/pre>&lt;h1 id="3-三种导入方式怎么选">3. 三种导入方式怎么选&lt;/h1>
&lt;p>&lt;a href="https://help.aliyun.com/zh/terraform/import-resources-into-terraform#63744434ecsis">阿里云官方文档&lt;/a>提供了三种方式，直接放对比表：&lt;/p></description></item></channel></rss>