Blog

Terraformに同じ名前のEventBridge Ruleを上書きされてしまった話

はじめに

会員システムグループのkiqkiqです。

自チームではawsのインフラはTerraformで管理しています。Terraformはインフラストラクチャをコードとして管理する便利なツールですがその便利さの中にも注意すべき内容もあります。今回はリソース作成時に遭遇した、予期せぬリソースの上書きについて共有したいと思います。

遭遇した問題

自チームでは同一AWSアカウント内で複数のTerraformプロジェクトを利用しており、気付かず同じ名前のEventBridge RuleをTerraformで定義してしまいました。その状況で同一名称のEventBridge Ruleをデプロイしたとき、エラーが発生するのではなく元からあったリソースの内容を上書きするという挙動に遭遇しました。

例えば、以下のようなaws_cloudwatch_log_groupのリソースを作成した場合、同じ/example/example_logsというロググループのリソースがあるとterraform apply時にエラーとして出力されます。

しかし、以下のようなaws_cloudwatch_event_ruleのリソースを作成した場合、example-ruleというEvent Ruleのリソースがすでに同アカウント内に存在しても上書きされてしまいます。

同一Terraformプロジェクト内で定義している場合は、plan実行時に Error: Duplicate resource "aws_cloudwatch_event_rule" configuration というエラーが発生します。しかし、今回のように別プロジェクトで管理してるとterraform plan時の差分では確認できず、terraform applyでもエラーが発生せずにデプロイできてしまいます。

予防策の例としては以下のようなものが挙げられます。

  • 同一アカウント内で複数のTerraformプロジェクトを利用している場合はプロジェクト全体での命名規則を統一しプレフィックスなどで分ける
  • 名前をあえて明示的に指定せず自動採番に任せる

それぞれメリットデメリットがあり、他にも方法はいくらでもあると思うので状況に応じて適切なものを取り入れてみてください。

まとめ

このようにリソース名の重複がある場合、大半のリソースはterraform apply実行時にエラーとして出力してくれますが一部のリソースではエラーにならず既存リソースが更新される場合があります。今回の場合はTerraformプロジェクトが分かれていたということもあり、既存リソースが上書きされてしまっていることに気付くのが遅れました。特にEvent Ruleは定期実行されるまで気づけず障害になる可能性もあるため気をつけてください。

備考

関連issue: https://github.com/hashicorp/terraform-provider-aws/issues/25598

ニフティでは、
さまざまなプロダクトへ挑戦する
エンジニアを絶賛募集中です!
ご興味のある方は以下の採用サイトより
お気軽にご連絡ください!

ニフティに興味をお持ちの方は
キャリア登録をぜひお願いいたします!

connpassでニフティグループに
参加いただくと
イベントの
お知らせが届きます!