基于terraform的阿里云基础设施代码化

1. 概述

早些年,我们的运维的大致过程是:开发人员开发好应用软件,然后提交给运维人员系统架构图,运维根据系统架构图,设计出部署架构图,还需要做好系统所需的前期工作,比如部署服务器、打通网络、调整服务器参数等等工作。随后选定日期进行生产上线,上线完毕后和开发、业务确认成功与否。在这样基础设施管理过程中遇到的问题:

  1. 速度比较慢,发布前需要加班准备基础环境,因为需要很多时间准备基础环境;
  2. 难于版本化,很难追溯配置版本变更历史,因为遇到问题时需要登录服务器手工排错或部署,会造成我们完全不知道服务器的状态也很难知道配置的变更历史;
  3. 容易出错和遗漏配置,因为手动执行经常遗漏配置导致服务运行不起来从而造成不必要的损失;
  4. 无法根据业务需求,随时动态增加环境;
  5. 手动部署的步骤有文档,但是文档维护起来很繁琐并且常常更新不及时。

综上所诉为了解决这些问题我们使用terraform来对基础设施进行版本控制、持续集成、自动化测试、自动化部署, 使得基础设施及配置可以按需动态的创建、释放和重建并保持一致性,这些改变可以人为触发也可以系统自动触发。

2. 基础设施即代码(IaC)

基础设施即代码(IaC) 主要是指使用代码来跟踪和管理基础架构资源,使用代码来定义、部署、更新、销毁资源,代码通常保存在版本控制系统中, 版本控制系统可以提供完整的历史记录。

基础设施即代码有四项关键原则:

再生性:环境中的任何元素都可以轻松复制。
一致性:无论何时,创建的环境各个元素的配置也是是完全相同的。
可见性:所有对环境的变更应该容易理解、可审计、受版本控制。
快速反馈:能够频繁、容易地进行变更,并快速知道变更是否正确。

基础设施即代码的目标:
标准化: 以代码来定义环境,实现开发环境、测试环境、生产环境的标准化。
自动化: 用自动化工具来驱动代码准备环境。包括创建环境、更新环境以及销毁环境。
可视化: 靠监控来可视化环境信息。环境当前状态可视、环境变更历史可视、可追溯。

基础设施即代码带来的核心便利: IaC旨在利用系统配置来缓解最常见的痛点,特别是以前配置一个新环境通常需要花费大量的时间。每一个环境都需要单独配置,且如果某处出现错误,通常需重新进行整个过程。IaC消除了这些痛点,并向开发者和运维人员提供了以下额外的便利:

  1. 重新使用常见的脚本变得相对简单了。
    2 .整个供应过程可实现自动化,连供应硬件都可以作为持续交付过程的一部分。
  2. 版本控制,可以根据需要测试和回滚较新的配置。
  3. 同行审查和脚本强化。不需手动地从文档或内存中配置,就可以对脚本进行审查、更新和持续改进。
  4. 文档是自动的,因为本质上它就是脚本本身。
  5. 过程可以被测试。

3. Terraform概览

HashiCorp Terraform 是一个IT基础架构自动化编排工具,可以用代码来管理维护 IT 资源。Terraform的命令行接口(CLI)提供一种简单机制,用于将配置文件部署到阿里云或其他任意支持的云上,并对其进行版本控制。它编写了描述云资源拓扑的配置文件中的基础结构,例如虚拟机、存储帐户和网络接口。

Terraform是一个高度可扩展的工具,通过 Provider 来支持新的基础架构。Terraform能够让您在阿里云上轻松使用 简单模板语言 来定义、预览和部署云基础结构。您可以使用Terraform来创建、修改、删除ECS、VPC、RDS、SLB等多种资源。

阿里云作为国内第一家与 Terraform 集成的云厂商,terraform-provider-alicloud目前已经提供了超过 163 个 Resource 和 113 个 Data Source,覆盖计算,存储,网络,负载均衡,CDN,容器服务,中间件,访问控制,数据库等超过35款产品,已经满足了大量大客户的自动化上云需求。

从 Terraform 0.12.2 版本开始,阿里云支持将对象存储服务 OSS 作为标准的Remote State Backend,开始提供远端存储 State 的能力,在提高 state 安全性的同时,提升多人协作效率。

为了给开发者提供“开箱即用”的使用体验,阿里云提供了丰富多样的Modules 和Examples,覆盖计算,存储,网络,中间件,数据库等多个产品和使用场景,欢迎大家使用和贡献自己的Module。

  • 将基础结构部署到多个云

    Terraform适用于多云方案,将类似的基础结构部署到阿里云、其他云提供商或者本地数据中心。开发人员能够使用相同的工具和相似的配置文件同时管理不同云提供商的资源。

  • 自动化管理基础结构

    Terraform能够创建配置文件的模板,以可重复、可预测的方式定义、预配和配置ECS资源,减少因人为因素导致的部署和管理错误。能够多次部署同一模板,创建相同的开发、测试和生产环境。

  • 基础架构即代码(Infrastructure as Code)

    可以用代码来管理维护资源。允许保存基础设施状态,从而使您能够跟踪对系统(基础设施即代码)中不同组件所做的更改,并与其他人共享这些配置 。

  • 降低开发成本

    您通过按需创建开发和部署环境来降低成本。并且,您可以在系统更改之前进行评估。

4. 实现目标

4.1 阿里云基础网络规划

使用Terraform创建和管理阿里云生产环境VPC、非生产环境VPC、Infra环境VPC, 要求如下:

  1. 所有环境使用云企业网互联互通,限制生产环境和非生产环境通信;
  2. 网络拓扑中包含DMZ、Application、Database三个隔离区域;
  3. 每个隔离区域包含阿里云G、F、H三个可用区;

4.2 阿里云用户规划

使用terraform创建和管理阿里云Ram用户组和用户, 要求如下:

  1. 创建运维,DBA,Admin,开发用户组
  2. 为每个用户组分配默认权限
  3. 创建用户并加入用户组中, 添加default用户到所有用户组中

4.3 阿里云安全组规划

  1. 创建基础安全组, 环境-应用、环境-DMZ、环境数据库
  2. 根据基础网络规划中划分的隔离区域和环境创建安全组,
  3. 配置安全组规则, database安全组允许applicaiton安全组访问, application安全允许DMZ安全组访问, DMZ安全组不能访问database安全组

4.4 阿里云负载均衡规划

4.5 阿里云OSS规划

4.6 阿里云Mysql数据库

4.7 阿里云Redis数据库

4.8 阿里云Kubernetes

5. Terraform的具体实现

5.1 基础环境准备

5.2 代码目录结构划分

5.3 阿里云基础网络规划的实现

5.4 阿里云用户规划的实现

5.5 阿里云安全组规划的实现

5.6 阿里云负载均衡规划的实现

5.7 阿里云OSS规划的实现

5.8 使用git管理Terraform代码

5.9 使用terraform快速增加新环境

6. 总结

你可能感兴趣的:(基于terraform的阿里云基础设施代码化)