背景
OCIのスタック更新時に削除されたインスタンスの情報を参照してしまい、意図したインスタンスにIPアドレスをアタッチ出来ないという問題が発生しました。その際に、dataブロックで取得しているインスタンスの情報をフィルタリングする事で削除済のインスタンスを参照しなくできたのでメモとして残しています。
解決方法
結論:dataブロックにフィルタを追加する。
env.tf
data "oci_core_instances" "your_label"{
compartment_id = local.compartment_id
state = "RUNNING"
}
削除済のインスタンスを参照しないように、dataブロックにstateを追加してRUNNING状態のインスタンスのみを参照するようにしたら治りました。
問題の原因
結論:削除済のインスタンス情報がOCI上に残っていてたこと
今回のケースでは過去に同じTerraformを使用してインスタンスを作成した事があり、Terraformを再利用したことで名前などの情報が重複したインスタンスが作成されてしまいました。※削除されても情報は残る
その状態で、スタックにてIPアドレスのアッタッチ時にインスタンスを参照しようとすると作成順に参照が実行されて削除済のインスタンスを見に行ってしまうという訳でした。
まとめ
今回の問題を通じてインスタンスの再作成後に作成するオブジェクトでインスタンスを参照する際に旧インスタンスの情報を参照しないようにする方法を学ぶことができました。知っていると意外と使いそうなので皆さんのご参考になれば幸いです。