亚马逊AWS官方博客

Terraform架构实践(4)- 一些典型场景的应用和常见问题

Terraform是一个可以支持多种云环境,进行创建,更改、版本控制的工具。是一个Infra-As-Code的瑞士军刀级的工具。我们将Terraform在AWS上最佳实践架构方式和与一些其他工具进行整合的方法汇总成以下几篇文章。主要如下:

这次我们介绍一下基于以上集成方法,我们实现的一些复杂应用。

场景一: 实现Openshift 3在AWS上的定制快速部署

以下就是典型openshift在AWS上部署架构图。其中ansible config server,就是我们在第三篇讲到的类似方法,在这台主机上已经操作主机,从而进行整个集群环境的配置和管理。

同理,在AWS上部署原生的Kubernates有很多工具,例如:kops,可以在AWS快速构建起一套环境。但是在插件调整,系统配置和调优方面,基本上完全没有入口可以让你自己精细化的调整整个集群的架构。而通过我们terraform + ansible的组合,可以从底层资源到系统OS的所有层面可控。

场景二: 通用场景说明

在下面的模式下,我们开通过Terraform走绿线创建右侧受管账号下的所有资源,并且实现自动化。当然包括计算资源。然后我们通过推出的一台Ansible配置管理主机作为部署服务器,进而推出目标账号下,相应的系统。只要有标准的配置方法,我们都可以实现到自动化的创建。至于究竟是什么监控平台、测试平台、容器平台,都可以。

一些常见问题:

Q1: 为什么我执行terrafom init后这么慢?

A: terraform基本分拆了所有的调用模块,terraform默认安装里面只包括主要调用。在terraform执行init后,依据读取的tf文件,再去下载对应的provider模块或者其他相关模块。通常这些文件都不小。而且通常都存在工作目录的.terraform下,如果你确定是类似工作模块,建议你直接复制这个目录到新的项目目录下。这样比较节省时间。

Q2:关于如何debug Terraform的问题?

A: 在执行命令前加入TF_LOG=TRACE,例如下面:

[ec2-user@ip-172-31-22-159 log]$ TF_LOG=TRACE terraform init
2019/07/18 01:33:09 [INFO] Terraform version: 0.12.4  
2019/07/18 01:33:09 [INFO] Go runtime version: go1.12.4
2019/07/18 01:33:09 [INFO] CLI args: []string{"/usr/local/bin/terraform", "init"}
2019/07/18 01:33:09 [DEBUG] Attempting to open CLI config file: /home/ec2-user/.terraformrc
2019/07/18 01:33:09 [DEBUG] File doesn't exist, but doesn't need to. Ignoring.
2019/07/18 01:33:09 [INFO] CLI command args: []string{"init"}
Terraform initialized in an empty directory!

The directory has no Terraform configuration files. You may begin working
with Terraform immediately by creating Terraform configuration files.

本篇作者

刘佳

是AWS ProServe团队云架构师。曾就职于Novell/Redhat/VMware。对于Linux和虚拟化拥有丰富的经验。具备16年的IT经验,支持过多家银行的数据中心。