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