Closed yamatosi closed 5 years ago
@yamatosi
こちらは以下のような状況ということでしょうか?
terraform apply
を実施この場合、再作成される際はterraform apply
時のログに以下のような赤文字のメッセージの表示が残っているかと思います。
何が原因で再作成されたのかを追うためにはこの辺りのログを追うと良いかと思います。
@yamamoto-febc ご回答ありがとうございます。
弊社環境では、moduleで各設定を読み込んでおりまして、VPC設定が以下 network
となりまして、
Destroy&Creatingの処理が予期せず走りました。
random_string.shared: Refreshing state... (ID: none)
random_string.password: Refreshing state... (ID: none)
sakuracloud_ssh_key_gen.rancher-private-key: Refreshing state...
sakuracloud_switch.switch: Refreshing state... (ID: 113101116179)
sakuracloud_ssh_key.key: Refreshing state... (ID: 113101116178)
sakuracloud_internet.router: Refreshing state... (ID: 113101116177)
sakuracloud_vpc_router.vpc-router: Refreshing state... (ID: 113101116184)
sakuracloud_vpc_router_interface.eth1: Refreshing state... (ID: interface-1823518848)
sakuracloud_vpc_router_user.user: Refreshing state... (ID: 1694519003)
sakuracloud_vpc_router_l2tp.l2tp: Refreshing state... (ID: 3980149413)
module.network.sakuracloud_vpc_router_l2tp.l2tp: Destroying... (ID: 3980149413)
module.network.sakuracloud_vpc_router_user.user: Destroying... (ID: 1694519003)
module.network.sakuracloud_internet.router: Creating...
再作成時の詳細が出力されていないので、おそらく--auto-approve
オプションをつけてterraform apply
を実行されているのだと思います。
となるとログから原因を探るのが難しいため、再作成が走る要因を一つづつ潰していく方向になろうかと思います。
原因として考えられるのは、
terraform apply
時のリフレッシュ処理時にVPCルータの情報を参照するためのAPI(GET /appliance/:id
)から404が返されたplan
switch_id
vip
ipaddress1
ipaddress2
vrid
zone
などがあります。
お手元に何かヒントになりそうな情報は残っていないでしょうか?
ご回答ありがとうございます。
はい、 -auto-approve
を付与しております。
VPCルータリソースがtaintされていた
こちらは確認します。
terraform apply時のリフレッシュ処理時にVPCルータの情報を参照するためのAPI(GET/appliance/:id)から404が返された (コントロールパネル上でVPCルータを削除してしまっていたなど)
の可能性は低いと考えます。
実行時の環境の変化などでVPCルータの以下フィールドの値が変更された plan switch_id vip ipaddress1 ipaddress2 vrid zone
こちらも変更はしておりません。 ネットワークで変更した可能性があるとすると、スイッチの帯域のみでございます。
お手元に何かヒントになりそうな情報は残っていないでしょうか?
残念ながら、残っておりません。
スイッチ+ルータの帯域変更を行った場合、ルータ(sakuracloud_internet
)リソースのIDが変更されます。
もしかして帯域変更をTerraform以外(コンパネなど)から行われていないでしょうか?
その場合、terraform apply
時のリフレッシュ処理でスイッチ+ルータ(sakuracloud_internet
)が参照できず、新たに作成しようとします。その際にVPCルータがスイッチ+ルータに依存していた場合は再作成が行われます。
もしかして帯域変更をTerraform以外(コンパネなど)から行われていないでしょうか?
ここ数日、帯域を変更する必要があり、頻繁に試しておりました。 該当時間帯に実施していたか確認します。
こちら再作成される旨、確認出来ました。 因みにですが、再作成されないようにすることは可能でしょうか。
弊社環境において、サーバリソースについては以下のようにディスクイメージのアーカイブIDを固定にしております。
lifecycle {
ignore_changes = ["source_archive_id"]
}
ルータの帯域変更に伴う再作成を防ぐ方法はいくつかあります。
terraform import
でルータの現在のステートをTerraformに取り込むsakuracloudプロバイダーはルータの帯域変更(とそれに伴うリソースのID変更)に対応しています。 なのでこの方法がもっとも安全と思います。
terraform import
/ 方法3: ステートの手動変更再作成の原因はterraform apply
時のリフレッシュ処理で帯域変更後のルータの情報がID変更により参照できなくなることが原因です。
これはID変更をTerraform外で行うことでTerraformが新IDを認知できず、ステートに保持している旧IDでルータを参照しようとすることから来ています。
なので、ルータのIDが変更されたことをTerraformのステートに反映すれば再作成を回避できます。
ステートの反映にはterraform import
を実行する、または方法3のステートの手動変更などの方法があります。
インポートの場合は以下のように実施します。
$ terraform refresh # 最新の情報を反映(ID変更前のルータ情報はステートから削除される)
$ terraform import sakuracloud_internet.router <現在のルータのID>
方法3はステートをどこに保存しているか、バックエンドの設定はどうなっているかで実施方法が変わります。
バックエンドがローカルの場合はterraform.tfstate
ファイルを手動で編集といった形です。
運用上問題がなければ方法1を、そうでない場合は方法2がオススメです。
ご回答ありがとうございます。 検討させていただきます。 一旦、本件はクローズさせていただきます。
お世話になっております。 大変恐縮なのですが、弊社環境で以下の不具合が発生し、原因調査にご協力をお願いできないでしょうか。
昨日、7/18 14:11(日本時間)頃に追加でサーバーリソースを作成したところ、VPCルーターが再生成されました。 原因がわからないのですが、既存仕様や直近の修正などで思い当たることはございますでしょうか。
なお、当該リージョンで、7/12までは同一作業を行ってもVPCルーターが再生成されるようなことはありませんでした。
以下補足情報となります。 使用バージョン:sacloud/terraform:1.11.4 →provider.sakuracloudについては、versionを指定をしていません。