使用Terraform管理AWS上现有的资源

总结

因为我们想要通过Terraform管理从管理控制台创建的现有安全组,所以我们提供了以下步骤。这次我们使用了Terraformer进行导入操作。我们将.tfstate文件放置在S3上。

2. 前提条件 tí

假设Terraform、Terraformer和AWS配置已经完成设置。

请参考以下链接了解terraformer的安装方法和使用方法:
https://github.com/GoogleCloudPlatform/terraformer

3. 步骤

创建 terraform 的 main.tf 文件 3.1

$ vi main.tf

设定的例子如下:

terraform {
  required_version = "0.12.20"
}

provider "aws" {
  region  = "ap-northeast-1"
  version = "2.49.0"
}

terraform {
  backend "s3" {
    bucket = "hogehoge"
    key    = "hogehoge/terraform.tfstate"
    region = "ap-northeast-1"
  }
}

进行3.2个terraform init步骤

$ terraform init 

因为没有定义资源,所以不会创建tfstate。

3.3 导入地形改造机

$ terraformer import aws --resources=sg --filter=aws_security_group=sg-093ffc7be63295434 --regions=ap-northeast-1

在执行命令的目录下将创建一个名为”generated/aws/sg/ap-northeast-1″的目录。
sg-093ffc7be63295434是要由terraform管理的安全组的组ID。

将作成的terraform.tfstate中的terraform_version与main.tf中指定的版本保持一致。

$ vi generated/aws/sg/ap-northeast-1/terraform.tfstate

生成的/aws/sg/ap-northeast-1/terraform.tfstate文件中的terraform_version似乎会根据terraformer的版本而变化。
需要与terraform的版本相匹配。

移动到3.5目录

$ cd generated/aws/sg/ap-northeast-1/

3.6 迁移 Terraform 状态

$ terraform state mv -state-out=../../../../terraform.tfstate 'aws_security_group.tfer--qiita_sg-002D-093ffc7be63295434' 'aws_security_group.qiita'

aws_security_group.tfer–qiita_sg-002D-093ffc7be63295434 → 在 Terrafomer 中导入的资源名称
aws_security_group.qiita → Terrafom 的资源名称

3.7 切换目录

$ cd ../../../../

应该已经创建了 terraform.tfstate 文件。

为使3.8版本的terraform plan中没有差异出现,需要定义资源。

$ vi security_group.tf

如果参考generated/aws/sg/ap-northeast-1/security_group.tf可能会很有帮助。

使用 Terraform 3.9 的 plan 命令验证是否没有差异。

$ terraform plan

如果没有出现差分,那就可以通过terraform进行管理。

4. 总结

如果要在已存在tfstate的范围内导入现有资源,操作步骤会稍有不同。
如果要导入terraformer不支持的资源,我认为可以使用terraform import。

广告
将在 10 秒后关闭
bannerAds