🛺
Terraformでセキュリティグループを変更したら、EC2がreplace対象となってしまう
概要
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_groups
をvpc_security_group_ids
に変更しましょう
ドキュメント
このように記載がありました。
If you are creating Instances in a VPC, use vpc_security_group_ids instead.
これに従いましょう。
実際にやってみる
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
を使いましょう。
参考
Discussion