セキュリティグループのterraform importがキツ過ぎる。
— adachin
SRE (@adachin0817) January 17, 2022
さて、最近Terraform職人なわけですが、セキュリティーグループをterraform importして、差分を修正していたところ以下のようなエラーに遭遇しました。
$ terraform plan
│ Error: Cycle: aws_security_group.hoge, aws_security_group.fuga
このエラーは2つのaws_security_groupのingressやegressのsecurity_groups idが参照しあっていると、Cycleエラーが発生します。今回はこの対処方法をブログします。
Resource: aws_security_group
https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/security_group
At this time you cannot use a Security Group with in-line rules in conjunction with any Security Group Rule resources. Doing so will cause a conflict of rule settings and will overwrite rules.
現時点ではセキュリティグループルールリソースと組み合わせてインラインルールでセキュリティーグループを使用することはできません。これを行うと、ルール設定の競合が発生し、ルールが上書きされます。
なのでaws_security_group内かaws_security_group_ruleかどちらかに統一すれば良いというわけですね。なのでterraform import時というよりも、上記な状況で新規に追加しても起こり得るということになります。
対処方法
- security-group.tf
どちらかに統一とのことなのでfugaの方をaws_security_group_ruleに全て統一しました。egressはそのままで問題ありません。ポイントとしては統一しないと以下のように terraform plan
terraform apply
を実行後にもとに戻り、永遠と差分が出てしまう状況になります。
- 統一しない場合
terraform import時で気をつけること
既にfugaのセキュリティーグループをaws_security_groupでterraform importしてしまった場合は一度手動で削除して terraform apply
しないと以下のようにエラーが出てしまうので、適用ができません。本番環境ではこうならないようにCycleエラーが発生してしまったらaws_security_group_ruleでterraform importするしかないですね。ですが、確認するのがツラ過ぎなのでメンテするしかないかな。
Error: [WARN] A duplicate Security Group rule was found on (sg-xxxxx). This may be
│ a side effect of a now-fixed Terraform issue causing two security groups with
│ identical attributes but different source_security_group_ids to overwrite each
│ other in the state. See https://github.com/hashicorp/terraform/pull/2376 for more
│ information and instructions for recovery. Error: InvalidPermission.Duplicate: the specified rule “peer: sg-xxxx, TCP, from port: 1234, to port: 1234, ALLOW” already exists
│ status code: 400, request id: 0xxxxxxxxxxxxxxxxxx
│
│ with aws_security_group_rule.fuga_1234,
│ on security-group.tf line 278, in resource “aws_security_group_rule” “fuga_1234”:
│ 278: resource “aws_security_group_rule” “fuga_1234” {
まとめ
しかしセキュリティーグループのimport化は大変だしシビアですね。。正直やりたくないのが本音。やらないといつまでも手動管理で杜撰になってしまうので、やりきります。めちゃくちゃハマったので参考にしてみてください。複雑なセキュリティーグループは大変だ!
0件のコメント