Terraform的基础配置和操作

Terraform的基础配置和操作

AWS账户设置

登陆AWS账户,在IAM控制台,在我自己现有用户的安全凭证中创建访问密钥。

通过上述操作,我们有了AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY。

Terraform的安装

我这里找了另外一台公有云的ubuntu云主机,来进行Terraform操作。

声明全局变量

export AWS_ACCESS_KEY_ID=AKI***********EXO
export AWS_SECRET_ACCESS_KEY=4DqW*****************************lWg4
#export AWS_DEFAULT_REGION="ap-east-1" (这一行可以不写)
env |grep AWS

安装Terraform

Terraform的安装,可以到它官网 https://www.terraform.io/ 中点击“Download Terraform”,选中Linux系统中的对应系统,即可看到安装指令如下:

wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install terraform

安装完成后,执行 terraform version 看到版本信息,证明安装成功。

Terraform实验一 — 创建一个EC2

每个Terraform配置都必须位于其自己的工作目录中,下面创建目录,进入目录并创建main.tf文件:

mkdir learn-terraform-aws-instance
cd learn-terraform-aws-instance

vim main.tf

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 3.0"
    }
  }
}

provider "aws" {
  region  = "ap-east-1"
}

resource "aws_instance" "ec2test" {
  ami = "ami-03490b1b7425e5fe3"
  instance_type = "t3.micro"

  tags = {
    Name = "ec2test"
  }
}

完成后,可执行 terraform init 进行初始化;

terraform fmt 会自动更新当前目录中的配置,以提高可读性和一致性。

terraform validate 会确保配置在语法上有效且内部一致。

使用 terraform plan 可以看到计划变更的基础设置。

使用命令 terraform apply 来应用配置。

此时键入yes,变更才会生效。

此时登陆对应AWS账号的控制台,可见确实新建了一个名为ec2test的EC2。

使用 terraform show 检查当前状态。

用 terraform destroy 并输入yes确认,来销毁刚刚创建的EC2。

回到控制台,可见该EC2已被终止。

Terraform实验二 — import一个现有的EC2资源

本实验计划使用Terraform的import功能,把AWS现有的EC2资源,纳入Terraform管理。

编辑main.tf文件

新建一个文件夹,并新建main.tf文件;

配置文件中实例名称和ami等信息,需与当前EC2保持一致。

mkdir terraform-experiment2
cd terraform-experiment2


vim main.tf
 
terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 3.0"
    }
  }
}

provider "aws" {
  region  = "ap-east-1"
}

resource "aws_instance" "WebServer-20221130" {
  ami = "ami-09800b995a7e41703"
  instance_type = "t3.micro"

  tags = {
    Name = "WebServer-20221130"
  }
}

执行import指令

执行如下指令

terraform import aws_instance.WebServer-20221130 i-020f191051d3aef3a

其中最后的参数为当前实例的ID,在管理平台上可以看到该参数。

之后,就可以执行init、plan、apply等管理操作了。

后续计划

上面只是基础设施即代码思想的一个最基础的实践。后面我会尝试用terraform实现更复杂的操作,比如安全组的创建,甚至是通过lambda控制安全组的操作。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注