ソーシャルPLUS の開発チーム でインフラエンジニア をしている id:mayuki123 です。
ソーシャルPLUS のインフラ環境は基本的に Terraform を利用して管理をしています。今回は、Terraform の terraform-provider-datadog で terraform init
を実行時の Warning を解消するのに頭を悩ませたので書き残しておきます。
発生していた事象
Datadog Provider を利用している所で terraform init
を実行すると、下記のWarning が表示されるようになりました。
Warning: Additional provider information from registry The remote registry returned warnings for registry.terraform.io/terraform-providers/datadog: - For users on Terraform 0.13 or greater, this provider has moved to DataDog/datadog. Please update your source in required_providers.
Datadog Provider を導入した時は、 Source に terraform-providers/datadog
を指定する必要がありましたが、現在は DataDog/datadog
が推奨との事で変更する必要があるようです。Terraform のコードで Source を変更すればいとも簡単に解決するだろうとこの時の私は思っていました。
Terraform の コードを修正後に terraform init
を実行して Provider を更新した後に、 terraform providers
を実行してみると State では registry.terraform.io/terraform-providers/datadog
を使い続ける事象に陥りました。
% terraform providers Providers required by configuration: . ├── provider[registry.terraform.io/hashicorp/aws] 3.27.0 ├── provider[registry.terraform.io/datadog/datadog] 2.20.0 /// 中略 /// Providers required by state: provider[registry.terraform.io/hashicorp/aws] provider[registry.terraform.io/terraform-providers/datadog] provider[terraform.io/builtin/terraform]
Terraform v0.14.x で追加されるようになった .terraform.lock.hcl
には Provider として registry.terraform.io/datadog/datadog
が新しく追加はされますが、 registry.terraform.io/terraform-providers/datadog
が残り続けていました。亡霊なのでしょうか。
解決方法
terraform state replace-provider
コマンドを実行する事で、State 上の既存のリソースに対して Terraform の Datadog provider の Source として DataDog/datadog
を利用するように変更する必要がありました。
terraform state replace-provider \ 'registry.terraform.io/terraform-providers/datadog' \ 'registry.terraform.io/datadog/datadog'
実行すると下記のような確認が表示されるので、 yes
を入力すると更新されます。
% terraform state replace-provider 'registry.terraform.io/terraform-providers/datadog' 'registry.terraform.io/datadog/datadog' Terraform will perform the following actions: ~ Updating provider: - registry.terraform.io/terraform-providers/datadog + registry.terraform.io/datadog/datadog Changing 1 resources: datadog_integration_aws.xxxx Do you want to make these changes? Only 'yes' will be accepted to continue. Enter a value: yes
terraform state replace-provider
コマンドを実行後に terraform init
を実行すると Warning は解消されました。Terraform provider の Source の変更はあまり発生しない気はしますが、同じような事象にハマった時にはご参考になればと思います。