Closed10
【Terraform】リソース名を変更する
やりたいことがすべてこちらに書いてあった...、感謝です
こちらを参考に、既存のリソース名を変更してみようと思います
題材
これをapply
main.tf
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 4.65.0"
}
}
backend "s3" {
bucket = "<s3バケット>"
key = "<tfstateパス>"
region = "ap-northeast-1"
}
}
provider "aws" {
region = "ap-northeast-1"
default_tags {
tags = {
env = "test"
provision = "terraform"
}
}
}
resource "aws_s3_bucket" "s3" {
}
方針
- tfファイルでリソースをリネーム
- tfstateをs3からpull
-
mv
でtfstate編集 -
diff
でtfstateが編集されていることを確認 - tfstateをs3へpush
リネーム
変えます
main.tf
- resource "aws_s3_bucket" "s3" {
+ resource "aws_s3_bucket" "s3-renamed" {
}
s3からtfstateをpull
もってきます。
terraform state pull
は標準出力に出力するため、ローカルファイルへリダイレクトしましょう。
$ terraform state pull > terraform.tfstate
この後のmv
でtfstateが必要であるため、このように持ってくる必要があります。
エラーの様子
$ terraform state mv -state=terraform.tfstate aws_s3_bucket.s3 aws_s3_bucket.s3-renamed
No state file was found!
State management commands require a state file. Run this command
in a directory where Terraform has been run or use the -state flag
to point the command to a specific state location.
state mv
する
ドキュメントにサンプルがあります。
tfstateにリソース名が記録されているから、それを書き換えてリソース名を変更しよう!
のイメージです
変更前
$ terraform state list
aws_s3_bucket.s3
変更
$ terraform state mv -state=terraform.tfstate aws_s3_bucket.s3 aws_s3_bucket.s3-renamed
Move "aws_s3_bucket.s3" to "aws_s3_bucket.s3-renamed"
Successfully moved 1 object(s).
バックアップが出来るので、diffで見てみます。
$ diff terraform.tfstate terraform.tfstate.1687059891.backup
4c4
< "serial": 2,
---
> "serial": 1,
11c11
< "name": "s3-renamed",
---
> "name": "s3",
terraform.tfstate
が更新されています。
serialとnameが変わっているためOKそうですね。
s3からtfstateをpush
さきほどの逆です
$ terraform state push terraform.tfstate
動作確認
planしても変更がでないこと
$ terraform plan
aws_s3_bucket.s3-renamed: Refreshing state... [id=terraform-xxxxxxxxxxxxxxxxxxxxxxxxxxx]
No changes. Your infrastructure matches the configuration.
Terraform has compared your real infrastructure against your configuration and found no differences, so no changes are needed.
リソース名を確認して変更後の値になること
$ terraform state list
aws_s3_bucket.s3-renamed
注意
diffの内容を見る限り直接編集できそうですが、公式ドキュメントは直接編集を推奨していません。
このスクラップは2023/06/18にクローズされました