Feedforce Developer Blog

フィードフォース開発者ブログ

Terraform の terraform-provider-datadog で古い source から新しい source に更新する際の Warning を解消する方法

ソーシャルPLUS の開発チーム でインフラエンジニア をしている id:mayuki123 です。

ソーシャルPLUS のインフラ環境は基本的に Terraform を利用して管理をしています。今回は、Terraform の terraform-provider-datadogterraform 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 を変更すればいとも簡単に解決するだろうとこの時の私は思っていました。

f:id:mayuki123:20210208175250p:plain

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 の変更はあまり発生しない気はしますが、同じような事象にハマった時にはご参考になればと思います。