1、Terraform 介绍

1.1 什么是 Terraform

Terraform 是一种安全有效地构建、更改和版本控制基础设施的工具(基础架构自动化的编排工具)。
它的目标是 “Write, Plan, and create Infrastructure as Code”, 基础架构即代码。

Terraform 使用配置文件描述管理的组件(小到单个应用程序,达到整个数据中心)。
Terraform 生成一个执行计划,描述它将做什么来达到所需的状态,然后执行它来构建所描述的基础结构。随着配置的变化,Terraform 能够确定发生了什么变化,并创建可应用的增量执行计划。

Terraform 是用 Go 语言开发的开源项目,你可以在 github 上访问到它的源代码。

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

1.2 核心功能

  • 基础架构即代码(Infrastructure as Code)
  • 执行计划(Execution Plans)
  • 资源图(Resource Graph)
  • 自动化变更(Change Automation)

基础架构即代码(Infrastructure as Code)
使用高级配置语法来描述基础架构,这样就可以对数据中心的蓝图进行版本控制,就像对待其他代码一样对待它。

执行计划(Execution Plans)
Terraform 有一个 plan 步骤,它生成一个执行计划。执行计划显示了当执行 apply 命令时 Terraform 将做什么。通过 plan 进行提前检查,可以使 Terraform 操作真正的基础结构时避免意外。

资源图(Resource Graph)
Terraform 构建的所有资源的图表,它能够并行地创建和修改任何没有相互依赖的资源。因此,Terraform 可以高效地构建基础设施,操作人员也可以通过图表深入地解其基础设施中的依赖关系。

自动化变更(Change Automation)
把复杂的变更集应用到基础设施中,而无需人工交互。通过前面提到的执行计划和资源图,我们可以确切地知道 Terraform 将会改变什么,以什么顺序改变,从而避免许多可能的人为错误。

1.3 优势

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

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

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

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

1.4 应用场景

Terraform可以对基础设施进行编码,利用代码来进行资源的增删查改。

创建基础设施
您可以使用Terraform创建和管理ECS、VPC和SLB等基础资源。

均衡负载业务流量
您可以将访问流量按照定义的转发规则分发到指定的后端服务器(ECS实例),提高应用系统对外的服务能力,消除单点故障。

自动伸缩
根据您的业务需求和策略自动调整弹性计算资源,在业务需求增长时无缝增加ECS实例满足计算需要,在业务需求下降时自动减少ECS实例节约成本。

集群管理
您可以使用Terraform快速创建专有网络的集群。
在阿里云中启动kubernetes集群,并且在集群中创建VPC、交换机和NAT网关等资源,请参见示例模板kubernetes module。

配置函数计算服务
阿里云函数计算是事件驱动的全托管计算服务。通过函数计算,您无需管理服务器等基础设施,只需编写代码并上传。借助于函数计算,您可以快速构建任何类型的应用和服务,无需管理和运维。

2、安装配置

  1. 登录 Terraform官网 下载适用于您的操作系统的程序包。
  2. 将程序包解压到/usr/local/bin。如果将可执行文件解压到其他目录,按照以下方法为其定义全局路径:

将zip解压到/usr/local/bin目录下,并且覆盖已有文件

unzip -o terraform_1.0.2_linux_amd64.zip -d tmp/

  1. ```bash
  2. # Windows
  3. # 安装Chocolatey
  4. # 以管理员运行PowerShell,输入Get-ExecutionPolicy,返回Bypass则代表目前执行的是绕过策略来安装
  5. # 返回的是Restricted受限制的,则需要运行Set-ExecutionPolicy AllSigned 或者 Set-ExecutionPolicy Bypass -Scope Process
  6. Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
  7. # 安装Terraform
  8. choco install terraform
  9. # 如果网络不够好,可能存在安装失败,可以至此链接下载https://releases.hashicorp.com/terraform/0.13.3/terraform_0.13.3_windows_amd64.zip后放至C:\Users\$user\AppData\Local\Temp\chocolatey\terraform\0.13.3\terraform_0.13.3_windows_amd64.zip目录,其中$user为你的当前用户。
  10. # 操作后再次执行命令choco install terraform即可完成安装。
  11. # 安装完成后执行terraform -v可查看当前安装版本
  1. 为提高权限管理的灵活性和安全性,建议您创建RAM用户,并为其授权。
    1. 登录 RAM控制台
    2. 创建名为Terraform的RAM用户,并为该用户创建AccessKey。具体步骤请参见创建RAM用户
    3. 为RAM用户授权。具体步骤请参见为RAM用户授权
  2. 创建环境变量,用于存放身份认证信息。
    创建环境变量,用于存放身份认证信息。
    export ALICLOUD_ACCESS_KEY="LTAIUrZCw3********"
    export ALICLOUD_SECRET_KEY="zfwwWAMWIAiooj14GQ2*************"
    export ALICLOUD_REGION="cn-beijing"
    
    阿里云terraform教程

terraform 中文文档

3、配置阿里云 CLI

3.1 介绍

阿里云命令行工具(Alibaba Cloud Command Line Interface)是在Alibaba Cloud SDK for Go之上构建的开源工具。您可以在命令行Shell中,使用aliyun命令与阿里云服务进行交互,管理您的阿里云资源。

3.2 安装

  • 官网:您可以通过此链接直接下载最新版本的阿里云CLI。
  • GitHub:在GitHub上下载您所需版本的阿里云CLI。
    wget https://aliyuncli.alicdn.com/aliyun-cli-linux-latest-amd64.tgz
    tar -zxf aliyun-cli-linux-latest-amd64.tgz -C /usr/local/bin/
    

    3.3 配置

    阿里云CLI可通过在configure命令后添加—mode 选项的方式,来使用不同的认证方式。目前支持的四种凭证类型如下:
验证方式 说明 交互式配置凭证(快速) 非交互式配置凭证
AK 使用AccessKey ID/Secret访问。 配置AccessKey凭证 配置AccessKey凭证
StsToken 使用STS Token访问。 配置STS Token凭证 配置STS Token凭证
RamRoleArn 使用RAM子账号的AssumeRole方式访问。 配置RamRoleArn凭证 配置RamRoleArn凭证
EcsRamRole 在ECS实例上通过EcsRamRole实现免密验证。 配置EcsRamRole凭证 配置EcsRamRole凭证

3.3.1 交互式

官方文档

aliyun configure --mode <AuthenticateMode> --profile <profileName>

--profile:指定配置名称。如果指定的配置存在,则修改配置。若不存在,则创建配置。
--mode:指定凭证类型。分别为AK、StsToken、RamRoleArn和EcsRamRole。


# 配置AccessKey凭证
aliyun configure --profile akProfile
Configuring profile 'akProfile' in '' authenticate mode...
Access Key Id []: AccessKey ID
Access Key Secret []: AccessKey Secret
Default Region Id []: cn-hangzhou
Default Output Format [json]: json (Only support json))
Default Language [zh|en] en:
Saving profile[akProfile] ...Done.

3.3.2 非交互式

官方文档

aliyun configure set [--profile <profileName>] [--region <regionId>] ... [凭证选项]

--profile(必选):指定配置名称。如果指定的配置存在,则修改配置。若不存在,则创建配置。
--region(必选):指定默认区域的RegionId。阿里云支持的RegionId,请参见地域和可用区。
--language:指定阿里云CLI显示的语言,默认为英语。
--mode:指定配置的凭证类型,默认为AK


aliyun configure set \
  --profile akProfile \
  --mode AK \
  --region cn-hangzhou \
  --access-key-id AccessKeyId \
  --access-key-secret AccessKeySecret

3.3.3 configure

# 列出所有配置的概要信息
aliyun configure list

# 获取某一配置的详细信息
aliyun configure get --profile akProfile

# 删除指定配置
aliyun configure delete --profile akProfile

3.4 命令自动补全

# 启用
aliyun auto-completion

# 关闭
aliyun auto-completion --uninstall