はじめに
Terraform cloudいいですね。tfstateのbackendをs3からTerrafrom cloudに移動している中でmoduleもリファクターとTerrafrom管理をしていなかったリソースのコード化も進めているのですが、そこで使用しているコマンドを備忘録的にまとめておきます。
環境
- terraform v1.0.8
- terraform-provider-aws v3.0.0
リソースをimportする
すでにリソースをコンソールから作成済みだけど、その作成済みのリソースもterrafromで管理した場合にリソースの状態をtfstateにimportします。
- moduleを使っていないケース
resource "aws_ecr_repository" "hog" {
省略
}
$ terraform import aws_ecr_repository.hog xxx-api
- moduleを使っているケース
module "ecr_module" {
省略
}
$ terraform import module.ecr_module.aws_ecr_repository.hog xxx-api
- main.tfに複数リソースを定義しいる場合
importコマンドを別々に実行することでtfstateに追加していってくれます。
resource "aws_ecr_repository" "hog" {
省略
}
resource "aws_lambda_function" "hog" {
省略
}
$ terraform import aws_ecr_repository.hog xxx-api
$ terraform import aws_lambda_function.hog xxx-function
リソース名を変更する
リファクター、タイポなどを発見してリソース名を変更したい時にリソース名を変えただけでterraform apply
するとdestroyされてリソースが再作成されてしまします。
これではRDSなどは大問題になります。
そこでterraform state mv
コマンドでtfstateのリソース名を修正します。
resource "aws_ecr_repository" "hog" {
省略
}
// 上記を以下に変更
resource "aws_ecr_repository" "fuga" {
省略
}
- moduleを使っていないケース
$ terraform state mv aws_ecr_repository.hog aws_ecr_repository.fuga
- moduleを使っているケース
module "ecr" {
省略
}
$ terraform state mv module.ecr.aws_ecr_repository.hog module.ecr.aws_ecr_repository.fuga