[解決済み] バックエンドの初期化が必要なため、"terraform init" を実行してください。
質問
バックエンドに以下のようなTerraformの設定をしていて、しばらくの間うまくいっていました。
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
}
}
backend "azurerm" {
resource_group_name = "my-rg"
storage_account_name = "my-sa"
####!!!!! BELOW USED TO WORK !!!!###
provider = azurerm.mysub
key = "terraform.tfstate"
}
}
provider "azurerm" {
skip_provider_registration = true
subscription_id = "xxxxxx-xxxxx-xxxxx-xxxxx"
alias = "mysub"
features {
}
}
しかし、アップグレード後に、このブロックではプロバイダが許可されないと言われました(正確なエラーメッセージは覚えていません)。そこで、代わりにこのように変更しました。
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
}
}
backend "azurerm" {
resource_group_name = "my-rg"
storage_account_name = "my-sa"
###!!!! Direct Reference to Subscription ID !!!!###
subscription_id = "xxxxxx-xxxxx-xxxxx-xxxxx"
key = "terraform.tfstate"
}
}
しかし、今はこう書いてある。
│ Error: Backend initialization required, please run "terraform init"
│
│ Reason: Backend configuration changed for "azurerm"
│
│ The "backend" is the interface that Terraform uses to store state,
│ perform operations, etc. If this message is showing up, it means that the
│ Terraform configuration you're using is using a custom configuration for
│ the Terraform backend.
│
│ Changes to backend configurations require reinitialization. This allows
│ Terraform to set up the new configuration, copy existing state, etc. Please run
│ "terraform init" with either the "-reconfigure" or "-migrate-state" flags to
│ use the current configuration.
│
│ If the change reason above is incorrect, please verify your configuration
│ hasn't changed and try again. At this point, no changes to your existing
│ configuration or state have been made.
もし、状態を記憶させて、後で同じものを破壊する方法を知っておきたい場合は、どのようなコマンドを使えばいいのでしょうか?私はすでにテラフォームを使ってこのRGに何度か繰り返しリソースを配置しており、それをそのままにしておきたいのです。
テラフォーム初期化 , OR,
terraform init -reconfigure , OR,
terraform init -migrate-state ??
バックエンドの場所は変わっていないので、そのまま続けたいのですが、バックエンドブロックの更新を無視して、"provider" から "subscription_id" を使用するようにしたいのです。どのコマンドを使用すればよいのでしょうか?
よろしくお願いします。
どのように解決するのですか?
は
terraform init
ドキュメンテーション
は、この状況について次のように述べています。
すでに初期化されたバックエンドでinitを再実行すると、新しいバックエンドの設定を使用するために作業ディレクトリが更新されます。どちらかというと
-reconfigure
または-migrate-state
は、バックエンドの設定を更新するために提供されなければなりません。は
-migrate-state
オプションは既存の状態を新しいバックエンドにコピーしようとし、変更内容によってはワークスペース状態の移行を確認するための対話型プロンプトが表示されます。このオプションは-force-copy
オプションはこれらのプロンプトを抑制し、移行の質問には "yes"と回答します。これは次のことを意味します。-migrate-state
.は
-reconfigure
オプションは既存の設定を無視し、既存の状態の移行を防ぎます。
ここでの判断ポイントは、Terraformに状態を新しい場所にコピーしようとする明示的なアクションを取らせるかどうかです(
-migrate-state
それとも、Terraformに古い設定を完全に忘れさせ、新しい設定を直接使用させたいのでしょうか?
物理的な位置は変更せず、代わりに同じ情報を違う方法で書いただけとのことですので
-reconfigure
はその状況にマッチするオプションです: 状態はすでに "new" の場所で利用可能なので、ここで明示的に移行する必要はありません (これは機能的には古い場所と同じですが、Terraform はそれを知ることができません) 。
バックエンドの設定をプロバイダに関連付けることは、これまで有効ではなかったので、以前動作していたものは、あなたが考えていたようには動作していなかったことに注意してください。
は
azurerm
バックエンドは
ARM_SUBSCRIPTION_ID
環境変数を明示的に設定しないと
subscription_id
ということは、以前はその環境変数が設定されたコンテキストで Terraform を実行しており、明示的に設定していなくてもバックエンドが適切なサブスクリプション ID を見つけることができたと推測されます。
バックエンドが無効な引数を拒否しなかった理由
provider
は私には不明です。これはTerraformかバックエンドのどちらかのバグを示唆しています。
provider
が、そのバックエンドの設定スキーマで宣言されています。
関連
-
[解決済み] "'New-AzureStorageContext' is not recognized," Yet the Module is Installed (モジュールはインストールされている)
-
[解決済み] コンテナにアンレディステータスがある」と表示される。Kubernetesで「[]」というエラーが発生する
-
[解決済み] カンマ区切りの文字列を分割する
-
[解決済み] レガシーAzure MFAをPhoneFactorで使用すると、エラー149が発生します。
-
[解決済み] Connect-AzAccount - azureのデバイス認証を回避する方法は?
-
[解決済み] Azure Application InsightsでBeginScopeを使うには(https://portal.azure.com)?
-
[解決済み] Azure Resource Groupの名前を変更するにはどうすればよいですか?
-
[解決済み] Azureはどのようなスタック/プログラミング言語で書かれているのですか?
-
[解決済み] Azure Cli サブスクリプションのデフォルトを変更する方法
-
[解決済み】Azure WebjobsとAzure Functionsの比較:選び方
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Azureウェブサイトのメッセージ「このディレクトリまたはページを表示する権限がありません。どうすればいい?
-
[解決済み] New-AzureRmResourceGroupDeployment コマンドレットで追加のパラメータを渡す方法
-
[解決済み] Set-AzStorageBlobContentを使用して、プロンプトなしで新しいコンテンツのみをアップロードする。
-
[解決済み] "'New-AzureStorageContext' is not recognized," Yet the Module is Installed (モジュールはインストールされている)
-
[解決済み] カンマ区切りの文字列を分割する
-
[解決済み] Connect-AzAccount - azureのデバイス認証を回避する方法は?
-
[解決済み] Azure Application InsightsでBeginScopeを使うには(https://portal.azure.com)?
-
[解決済み] AzureリソースグループURL
-
[解決済み] Azure Service Principalとは何ですか?
-
[解決済み】Azure WebjobsとAzure Functionsの比較:選び方