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控制安全组的操作。
发表回复