Terrafrom運用の細かい操作まとめ


はじめに

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