使用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.

请提供相关资料

bannerAds