🛺

Terraformでセキュリティグループを変更したら、EC2がreplace対象となってしまう

2023/05/26に公開

概要

Terraformで以下のようにEC2を立てていると、セキュリティグループの変更時、一緒にEC2もreplaceされてしまいます。

resource "aws_instance" "test-instance-1" {
  security_groups = [aws_security_group.test-sg-1.id]
}
$ terraform apply
.. 略 ..
  # aws_instance.test-instance-1 must be replaced
  # aws_security_group.test-sg-1 must be replaced
....
Plan: 1 to add, 1 to change, 1 to destroy.

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

流石に不便なので対策を探しました。

対策

EC2のsecurity_groupsvpc_security_group_idsに変更しましょう

ドキュメント

このように記載がありました。

If you are creating Instances in a VPC, use vpc_security_group_ids instead.

これに従いましょう。

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/instance

実際にやってみる

tfファイル

main.tf
resource "aws_instance" "test-instance-1" {
  vpc_security_group_ids = [aws_security_group.test-sg-1.id]
}

apply

$ terraform apply
....
  # aws_security_group.test-sg-1 will be updated in-place
....
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.

結果

OKですね

Apply complete! Resources: 0 added, 1 changed, 0 destroyed.

まとめ

TerraformでEC2を立てるときはvpc_security_group_idsを使いましょう。

参考

https://github.com/hashicorp/terraform-provider-aws/issues/23693
https://zaki-hmkc.hatenablog.com/entry/2021/05/22/070529
https://qiita.com/charon/items/587cb0c667e9dc2cce45

Discussion