亚马逊AWS官方博客

Terraform架构实践(1)- AWS上基础环境介绍

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

本文主要就AWS上基础环境的准备做一些说明,AWS上多账户管理,是企业运维在AWS上的典型设计场景。本文以下就是具体实现的方法。

相信大家已经知道Terraform的基本使用方式了。在我们以后的场景中,主要讨论一些典型架构的实现。在实际使用中,Terraform在多云基础架构创建中,是非常方便和简洁的。Terraform造了足够多的轮子,使用起来非常顺手,用于创建云上的基础架构。在应用发布上,可以使用Packer进行应用的集成,与Terraform配合做到应用的自动发布。同时在云上的基础构建完成后,想构建一些复杂系统,基于OS之上时,就需要交给Ansible和PowerShell来进行实现了。例如创建K8S/Openshift的集群环境,在创建这些复杂架构的方法上,存在多种工具,但是我们需要企业级发布的时候, 在系统层面的配和应用层面的配置就需要更高的控制精细程度。而这个时候,就凸显了Terraform和Ansible等工具的控制能力。我们可以精确的控制到每个配置项。无论是Infra还是OS。

这里是一个典型的AWS多账号设计,左边的是Operation运维组用户的人员的核心账号下的运维主机Terraform,这台主机上同时集成安装了ansible和packer工具,用于实现后面的实验,但是实际生产环境中可能会依据性能分拆,当前实验环境中,都是单机实现即可。由图可知,我们通过对于右边受管理的账号Project or Team的项目账号进行管理。例如:初始化账号,包括创建组网VPC/Subnet/Role/Tags、创建IAM、安全组等一系列的动作。完成这个账号的初始化动作。

环境安装:

Terraform下载包位置(建议实际使用中,选择最后版本进行安装):

https://www.terraform.io/downloads.html

https://www.packer.io/downloads.html

2个账号,左边的账号是运维部门管理的账号,里面创建一台可以访问公网的VM,建议使用Amazon Linux 2。 右边账号是一个新账号,用于提供给新项目组或者新部门。

具体方法:

选用amaz2的AMI进行系统准备,使用以下命令,进行环境依赖的安装。

$ sudo amazon-linux-extras install epel -y

$ sudo yum install -y ansible

$ sudo curl -o /tmp/terraform.zip https://releases.hashicorp.com/terraform/0.12.3/terraform_0.12.13_linux_amd64.zip

$ sudo curl -o /tmp/packer.zip https://releases.hashicorp.com/packer/1.4.5/packer_1.4.5_linux_amd64.zip

$ sudo unzip /tmp/terraform.zip -d /usr/local/bin

$ sudo unzip /tmp/packer.zip -d /usr/local/bin

权限配置方法:

添加IAM权限。

  • 我们先去在右侧是受管账号(Project or Team Account)下面去建立Assume Role,具体如图:

    IAM->Roles->Create Role

这里的Role关联了Policy AdministratorAccess, 仅用于测试。但是实际生产上,要依据实际实际用户来进行权限划分。

这一步创建Tags, 啥也没有填。你随意。

这里给Role name添加了一个名字”terraform-assume-role“

请查看这个role的ARN,如下图,请记录好,后面我们在Operation Account里面会用到。

  • 下面我们在左侧的运维账号(Operation Account)进行Policy/Role的创建。

    首先创建Policy, IAM->Policies->Create Policy

{
    "Version": "2012-10-17",
    "Statement": {
        "Effect": "Allow",
        "Action": "sts:AssumeRole",
        "Resource": [
            "arn:aws-cn:iam::123456780001:role/terraform-assume-role"
        ]
    }
}

 

添加Policy Name: terraform-assume-policy, 后面我们会关联到terraform ec2 role里面。

现在建立Terraform EC2 Role, 请如下操作IAM-> Roles->Create role, 选择AWS Service -> EC2

搜索之前创建的Policy, terraform, 勾选之前创建的Policy

填写role的名字: terraform-ec2-role

选中之前创建的Terraform EC2, 依次执行如图

更新为我们创建的Role: terraform-ec2-role

如上,我就完成基础环境的准备。

 

本篇作者

刘佳

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