1. 概要
マネジメントコンソールから作成した既存のセキュリティグループをterraformで管理するようにしたので、その手順を記載します。
今回はterraformerを使ってimportしています。
tfstateファイルはS3に置くようにしています。
2. 前提条件
terraform、terraformer、aws configの設定は済んでいることとします。
※ terraformerのインストール方法や使い方は下記を参照して下さい。
https://github.com/GoogleCloudPlatform/terraformer
3. 手順
3.1 terraformのmain.tfファイルを作成する
$ 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する
$ 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です。
3.4 作成されたterraform.tfstateのterraform_version を main.tfで指定しているバージョンに合わせる
$ vi generated/aws/sg/ap-northeast-1/terraform.tfstate
generated/aws/sg/ap-northeast-1/terraform.tfstateのterraform_versionは、terraformerのバージョンによって変わるようです。
こちらはterraformのバージョンと合わせる必要があります。
3.5 ディレクトリを移動する
$ cd generated/aws/sg/ap-northeast-1/
3.6 terraform state mv する
$ 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でimportしたリソース名
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 を参考にすると良いです。
3.9 terraform planで差分が出ないことを確認する
$ terraform plan
差分が出なくなっていればterraformで管理出来ています。
4. まとめ
既にtfstateが存在しているscopeに既存のリソースをimportする場合は少し手順が変わります。
terraformerが対応していないリソースをimportしたい場合は、terraform importすれば良いと思います。