使用Terraform来管理现有的服务器
使用Terraform可以管理现有的AWS资源。
确认由 Terraform 管理的资源。
本次事项如下:
– 虚拟私有云(VPC)
– 子网(subnet)
– 安全组(SecurityGroup)
– 密钥对(Key Pair)
– 弹性IP地址(Elastic IP Address)
– 弹性云服务器(EC2)
准备好
我会设置IAM用户的访问密钥,并进行准备工作,使其能够访问资源。
首先安装direnv,以下的文章可以作为参考。
一旦完成direnv的安装后,创建.envrc文件。
export AWS_ACCESS_KEY_ID = "{アクセスキーId}"
export AWS_SECRET_ACCESS_KEY="{シークレットアクセスキー}"
只要进入.envrc所在的路径,认证信息将自动应用并可以访问资源。
创建模板
在官方网页上查看每个资源的基本模板。
示中
假如我有一百万美元,我会买一栋大房子和一辆豪车。
云虚拟私有网络 (VPC)
resource "aws_vpc" "main" {
cidr_block = "10.0.0.0/16"
instance_tenancy = "default"
tags = {
Name = "main"
}
}
子网
resource "aws_subnet" "main" {
vpc_id = aws_vpc.main.id
cidr_block = "10.0.1.0/24"
tags = {
Name = "Main"
}
}
首先创建VPC模板。
在本地创建一个名为vpc.tf的文件,并将先前的代码复制进去。
resource "aws_vpc" "main" {
cidr_block = "10.0.0.0/16"
instance_tenancy = "default"
tags = {
Name = "main"
}
}
在模板文件的开头进行资源类型的指定和命名。
在vpc.tf文件同级目录下执行terraform import。
根据模板文件中指定的资源类型和名称,以及要加载的资源ID来执行。
terraform-server % ls
vpc.tf
terraform-server % terraform import aws_vpc.main {VPC ID}
aws_security_group_name: Importing from ID "xxxxxxxxxxxxxxxxxxxx"...
aws_security_group_name: Import prepared!
Prepared aws_security_group for import
aws_security_group_name: Refreshing state... [id=xxxxxxxxxxxxxxxxxxxx]
Import successful!
The resources that were imported are shown above. These resources are now in
your Terraform state and will henceforth be managed by Terraform.
接下来,执行terraform plan命令以确认当前环境与vpc.tf文件的差异。
编辑vpc.tf文件,并且当terraform plan命令的执行结果符合以下情况时,开始创建下一个资源的模板。
terraform-server % terraform plan
aws_vpc.main: Refreshing state... [id=vpc-xxxxxxxx]
No changes. Your infrastructure matches the configuration.
Terraform has compared your real infrastructure against your configuration and found no differences, so no changes are needed.