74
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

TerraformからEC2のインスタンスタイプを変更したときの挙動

Last updated at Posted at 2024-12-20

はじめに

こんにちは、そしてこんばんは!Rockyです。
今回は、Terraformのコードを編集し、EC2のインスタンスタイプを変更した際の挙動について書いていきます。

背景

業務の中で、インスタンスタイプを変更する依頼が飛んできたときに、マネジメントコンソールからやればいいのでは?と思ったものの、せっかくTerraformのコードがあるので、やってみよう!と思いましたが、
新しくインスタンスが作成されてしまう懸念があったため、検証しました。

まずはTerraformを編集

こちらはサンプルになりますが、コメントで示した部分を編集します。
(セキュリティグループのIDなどはテストのためハードコードしちゃってます)

resource "aws_instance" "test" {
    ami                    = "ami-0ef29ab52ff72213b"
    instance_type          = "t2.micro" ## ここを t3.micro へ
    availability_zone      = "ap-northeast-1d"
    vpc_security_group_ids = ["sg-XXXX"]
    subnet_id              = "subnet-XXXX"

    root_block_device {
      volume_type = "gp3"
      volume_size = "8"
      iops        = 3000
      throughput  = 125
      encrypted   = false
    }

    tags = {
      Name   = "test-otake"
    }
}

実際にapplyしてみる

以下がapplyの結果です。
無事にCompleteとなってます!

❯ terraform apply
aws_instance.test: Refreshing state... [id=i-XXXX]
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  ~ update in-place
Terraform will perform the following actions:
  # aws_instance.test will be updated in-place
  ~ resource "aws_instance" "test" {
        id                                   = "i-XXXX"
      ~ instance_type                        = "t2.micro" -> "t3.micro"
        tags                                 = {
            "Name"  = "test-otake"
            "Owner" = "otake"
        }
      + user_data_replace_on_change          = false
        # (37 unchanged attributes hidden)
        # (8 unchanged blocks hidden)
    }
Plan: 0 to add, 1 to change, 0 to destroy.
Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.
  Enter a value: yes
aws_instance.test: Modifying... [id=i-XXXX]
aws_instance.test: Still modifying... [id=i-XXXX, 10s elapsed]
aws_instance.test: Still modifying... [id=i-XXXX, 20s elapsed]
aws_instance.test: Still modifying... [id=i-XXXX, 30s elapsed]
aws_instance.test: Still modifying... [id=i-XXXX, 40s elapsed]
aws_instance.test: Still modifying... [id=i-XXXX, 50s elapsed]
aws_instance.test: Modifications complete after 53s [id=i-XXXX]
Apply complete! Resources: 0 added, 1 changed, 0 destroyed.


apply後のインスタンス

apply後は以下のように「停止中」となり、再起動に入っています。

image.png

無事に停止

image.png

再起動後

停止後、無事にインスタンスタイプが変更された状態で起動してきました!

image.png

apply結果に注目

ふと、どれくらいの時間で変更できたのか気になったので、apply結果をよく見てみると
下記のように Modifying... から complete まで 60秒行かないぐらいで完了していました。
テストのため、そこまでインスタンスタイプ自体も大きくなかったのでこのぐらいかと思われますが、
環境によってはもう少し時間がかかる場合もあるかもしれませんね。。

aws_instance.test: Modifying... [id=i-XXXX]
aws_instance.test: Still modifying... [id=i-XXXX, 10s elapsed]
aws_instance.test: Still modifying... [id=i-XXXX, 20s elapsed]
aws_instance.test: Still modifying... [id=i-XXXX, 30s elapsed]
aws_instance.test: Still modifying... [id=i-XXXX, 40s elapsed]
aws_instance.test: Still modifying... [id=i-XXXX, 50s elapsed]
aws_instance.test: Modifications complete after 53s [id=i-XXXX]

まとめ

  • Terraformからインスタンスタイプを変更しても、新しくインスタンスは作成されない
  • マネジメントコンソールから操作するときと同様の再起動の動きをする
  • せっかくコードがあるならTerraformからやったほうが良い!

今回は、懸念点があったため検証してみましたが、やはりポチポチ操作するよりもTerraformからやったほうが楽でスピーディーに作業を実施できます!
また、記述自体もそこまで難しいものではないので、書いたことがない方もぜひ試してみてください!
短いですが、この記事がどなたかの役に立ちますと幸いです!

74
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
74
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?