系列文章

Terraform 系列文章

前言

最近在使用 Terraform Cloud 来置备 OCI 的 Always Free Tier, 发现它非常好用,相比 Terraform OSS, 用起来省心多了。

也借此总结学习下:Terraform Cloud 比 Terraform OSS 有哪些增强,这些增强功能面向哪些客户,解决了哪些痛点?

可以作为我们基于 Terraform 开发自己的 IaC 云平台的经验。

Terraform OSS 的功能

Terraform OSS 的功能已经在 之前的文章 里介绍过了。

这里再重复一下:

  • IaC
  • 工作空间
  • 变量
  • 运行-计划和应用
  • 资源图
  • 供应商
  • 模块
  • 注册表
  • 声明式编程
  • 云无关
  • 表达能力强且高度可扩展
  • 协同工作(需要进一步配置)
  • 生命周期管理
  • 测试
  • HCL
  • 安全和密钥管理(需要进一步配置)

Terraform Cloud 简介

Terraform Cloud 是 HashiCorp 基于 SaaS 的 Terraform 版本。

Terraform Cloud, 理所当然用于 Terraform OSS 的以上所有功能。

Terraform Cloud vs. Terraform OSS

Terraform Cloud 比 Terraform OSS 有哪些增强?具体如下:

IaC 功能增强

  • Remote State: Terraform Cloud 自带开箱即用的 Backend, 方便管理 remote state, 确保部署一致性、共同目标和单一事实来源
  • VCS 连接: Terraform Cloud 打通了 Github 等 VCS, 可以无缝使用 VCS + Terraform. 使多个团队成员能够在项目中处理单独的代码流,并通过简单的回滚路径以结构化的方式将变更合并回核心项目中。
  • 工作空间管理: Terraform Cloud 提供了更为丰富的工作空间管理功能和 UI
  • 安全和密钥管理: Terraform Cloud 基于 Terraform Vault 提供了开箱即用的安全变量(安全和密钥)的存储。
  • 远程运行和状态: Terraform Cloud 支持本地运行和远程运行,远程运行无需自己安装 Terraform, 直接使用 Terraform Cloud 提供的 Terraform. 意味着所有部署都是从一个集中位置完成的
  • 私有模块注册表: 私有模块存储库允许跨多个工作空间和项目访问模块代码的单个真实源,从而降低差异的可能性,从而提高代码稳定性。



△ Remote State



△ VCS(GitHub) 连接



△ 工作空间管理



△ 安全和密钥管理



△ 远程运行



△ 运行状态



△ 私有模块注册表

团队管理功能增强

  • 团队管理: 团队管理是工作空间管理的一个子功能,借助此功能,工作空间管理员可以通过根据其公司的组织结构创建团队来管理云用户的访问级别。这些团队根据反映编码职责或运营职责的组织被授予权限,例如:管理策略,管理工作空间,管理 VCS 设置
  • 成本估算: 提供与工作空间中的代码部署关联的成本估算的最佳预估。会明确地显示本次 Run 会增加/减少多少美元的开销。
  • 策略即代码: 通过和 HashiCorp Sentinel 的集成,用于自动化治理、安全和基于合规性的策略配置。Sentinel 是一个可嵌入的策略及代码框架。如,您可以定义,如果您要部署到 Dev,则您的任何 EC2 构建实例都不能大于大小 XXX, 如果尝试构建更大的实例,则运行将失败。也可用于执行 CIS 基准和其他合规性框架。
  • 配置设计器: 基于 GUI 的工作流程,用于选择、组合、定义变量和创建独特的工作区。降低开发人员使用心智负担,开发人员从预定义的 IaC 模块构建配置;按需预配。



△ 团队管理

△ 成本预估



△ 策略即代码



△ 配置设计器

安全/合规/治理功能增强

  • 单点登录 (SSO): 集成您的企业身份提供商,为您的团队成员提供无缝登录过程。目前,Terraform Cloud 支持以下身份提供程序:

    • Azure AD
    • Okta
    • SAML
  • 审计日志: 对于在事件发生后甚至在解决问题时尝试深入研究时启用取证调查是绝对必要的。
  • 自托管的代理: 允许 Terraform Cloud 业务使用自托管代理有效地查看私有数据中心。



△ SSO

总结思考

Q: 如果我们也要基于 Terraform OSS 来做一个企业内部的 IaC 云服务,我们应该增强哪些功能?

A: 需要从以下几方面入手:

  1. 增强 Terraform 的功能和使用体验

    1. 基于 S3 提供开箱即用的 Backend 和 Remote State
    2. 提供和内部代码仓库(如 GitLab) 的无缝对接
    3. 基于 Terraform Workspace 开发一套友好 UI, 并结合企业实际情况,延伸出入:环境、Project 等概念
    4. 基于 HashiCorp Vault 提供开箱即用的安全和密钥管理功能
    5. 自动创建预配置好 Terraform 的临时 VM 或 Pod 以在云服务上开箱即用地运行 Terraform, 而不需用户在本地运行 Terraform; 同时提供每次 Terraform Apply 后的状态历史
    6. 提供内部私有 Terraform Registry
    7. 开发完整而丰富的 API 接口,供企业内部其他系统(如 DevOps) 集成使用。
  2. 丰富团队管理功能:
    1. 丰富完善团队管理功能、设置和 UI
    2. 引入 FinOps 理念:对接主流公有云费用 API, 在 Plan 阶段进行成本估算。
    3. (可选)策略及代码
  3. 安全/合规/治理功能增强
    1. 集成企业内部单点登录
    2. 开发审计日志功能
    3. 自托管的代理不需要,因为就在企业内部

三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.

Terraform 系列-Terraform Cloud 比 Terraform OSS 有哪些增强?的更多相关文章

  1. 基于Spring Cloud和Netflix OSS 构建微服务-Part 1

    前一篇文章<微服务操作模型>中,我们定义了微服务使用的操作模型.这篇文章中,我们将开始使用Spring Cloud和Netflix OSS实现这一模型,包含核心部分:服务发现(Servic ...

  2. Building microservices with Spring Cloud and Netflix OSS, part 2

    In Part 1 we used core components in Spring Cloud and Netflix OSS, i.e. Eureka, Ribbon and Zuul, to ...

  3. 基于Spring Cloud和Netflix OSS构建微服务,Part 2

    在上一篇文章中,我们已使用Spring Cloud和Netflix OSS中的核心组件,如Eureka.Ribbon和Zuul,部分实现了操作模型(operations model),允许单独部署的微 ...

  4. Java9系列第6篇-Stream流API的增强

    我计划在后续的一段时间内,写一系列关于java 9的文章,虽然java 9 不像Java 8或者Java 11那样的核心java版本,但是还是有很多的特性值得关注.期待您能关注我,我将把java 9 ...

  5. Terraform状态State管理,让变更有记录

    我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 简介 最近工作中用到了Terraform,权当学习记录一下,希望能帮助到其它人. Terraform系列文章如下: Ter ...

  6. Azure Terraform(二)语法详解

    一,引言 上篇文章开始,我们简单介绍了以下通过基础设施管理工具----- Terraform,通过它来统一管理复杂的云基础设施资源.作为入门演示,使用Terraform 部署Azure 资源组的方式直 ...

  7. Azure Terraform(三)部署 Web 应用程序

    一,引言 上一节关于 Terraform 的文章讲到 Terraform 使用到的一些语法,以及通过演示使用 Terraform 在Azure 上部署资源组,极大的方便了基础设施实施人员,也提高了基础 ...

  8. Azure Terraform(五)利用Azure DevOps 实现自动化部署基础资源

    一,引言 上一篇我们结合学习 Azure Traffic Manger 的内容,做了一个负载均衡的基础设施架构.通过 Terraform 部署执行计划,将整个 Azure Traffic Manage ...

  9. Azure Terraform(六)Common Module

    一,引言 之前我们在使用 Terraform 构筑一下 Azure 云资源的时候,直接将所以需要创建的资源全面写在 main.tf 这个文件中,这样写主要是为了演示使用,但是在实际的 Terrafor ...

  10. Azure Terraform(七)利用Azure DevOps 实现自动化部署基础资源(补充)

    一,引言 之前一篇文章有讲解到利用 利用Azure DevOps 实现自动化部署基础资源,当时 TF 代码没有针对 Azure 各个资源的封装,所有的资源代码全部写在一个 main.tf 文件中.然后 ...

随机推荐

  1. docker 配置 anaconda + jupyter notebook 纪要

    首先,pull官方的镜像,名字叫:continuumio/anaconda3 首先的首先,如果默认还是需要sudo运行docker命令,可以考虑把当前用户加入到docker组(usermod -aG ...

  2. css3各种度量单位 px、em、%、rem、vh/vw、vmin/vmax

    一 px 相对长度单位,浏览器的度量单位,相对于物理像素(显示器屏幕分辨率),1px在高清屏幕下可能占用2个物理像素.甚至3个物理像素,有关物理像素和px之间转换比,可以查看这篇文章. 二 em 相对 ...

  3. layui.dtree的学习,自定义扩展toolbar按钮(toolbarExt)

    学习layui.dtree请前往 http://www.wisdomelon.com/DTreeHelper/ 记录一下dtree的自定义扩展toolbar按钮(toolbarExt) html代码: ...

  4. nodejs 利用URL和querystring获取get查询参数

    为深入理解request的get url信息及参数传递,利用URL和querystring获取对应的信息,测试成功,记录如下: 1.编写server.js文件 http=require("h ...

  5. git—分支设置

    什么是分支? 项目以上线,但需要开发新的功能.不能直接在项目上进行开发的,这时候就需要创建一个分支,去完成新功能的开发.测试等.完成之后合并到主分支上面.如果新功能的开发不用分支,导致的问题就会有很多 ...

  6. Codeforces Round #808 (Div. 2)

    Codeforces Round #808 (Div. 2) 传送门:https://codeforces.com/contest/1708 错过了,第二天vp的,只写出了AB就卡C了,竟然看不出是贪 ...

  7. Must be called at the top of a `setup` function vue3使用vue-i18n时出现的报错

    在某js文件中引入 import {useI18n} from "vue-i18n"; 使用:useI18n().t('APP_LOADING') 修改后: import i18n ...

  8. 解决Python写入yaml后排版混乱还丢失注释问题

    转载https://www.cnblogs.com/jiahm/category/1530828.html 大家有没有遇到过在使用Python进行yaml文件写入数据后,内容排版混乱并且丢失注释问题, ...

  9. Python学习笔记--数据可视化的开头

    JSON数据格式的转换 示例: 若是有中文数据,可以在data后面加上ensure_ascii=False pyecharts模块 网站:https://gallery.pyecharts.org(有 ...

  10. 对Android关联SDK后,还是无法显示那俩图标的解决

    显示出来!!!! 可以这么解决: 步骤一: 步骤二: 找到这个,在上方的栏里面: 步骤三: 将这四个选中: 步骤四: 然后选中这个栏: 步骤五: 选中Android: 步骤六: 最后,点击右下角的Ap ...