Terraform リソースがターミナルから破棄されない

Terraform リソースがターミナルから破棄されない

AWS EKS でホストされている Kubernetes の環境を破棄したいと考えていましたDEV。リソースには、インフラストラクチャ部分とアプリケーション部分の 2 つの部分があります。インフラのデプロイ/破棄にはTerraform/を使用し、アプリケーションのデプロイ/破棄には / を使用します。複数のポッドが実行されており、 を実行してリリースを破棄できます。ただし、インフラを破棄するときにエラーが発生しました。私が行ったことは次のとおりです。Terragrunthelmhelm uninstall <release-name>

インフラを破壊するために、次を実行しました:ENV=DEV make destroyこのコマンドに対して、次が返されます:

cd infra/DEV && terragrunt destroy

Remote state S3 bucket aib-iac-tf-state does not exist or you don't have permissions to access it. Would you like Terragrunt to create it? (y/n)

これに対して、両方を試してみましたyが、n次のエラーが返されます。

make: *** [Makefile:30: destroy] Error 1

内部のリソースを作成/削除するために、ルート ユーザーによってアクセスが変更されたと仮定しましたがS3 Bucket、そうではありませんでした。 はS3 Bucket aib-iac-tf-stateストレージ内に存在します。

*Makefile*次に、エラーに従って 30 行目の内部を確認しました。29 行目と 30 行目の内容は次のとおりです。

destroy:
    cd ${INFRA_DIR}/${ENV} && terragrunt destroy ${TF_VARS}

まだリソースを破棄できません。ご協力いただければ幸いです。

答え1

Terraform からのエラーは、リモート状態バケットが存在しないことを通知しており、そのため、リモート状態を読み取って何を破棄するかを理解できません。これは、Make 経由で使用しているラッパーの構成ミスのようです。

可能であれば、.tfファイル内で次のようなブロックを確認してください。

terraform {
  backend "s3" {
    bucket = "mybucket"
    key    = "path/to/my/key"
    region = "us-east-1"
  }
}

また、バケットの名前が正しいことを確認してください。適切なデータを保持するバケットを見つけるには、AWS アカウントと比較する必要がある場合があります。

そのようなものが見つからない場合は、ローカルワークスペースで.tfstateファイルを確認してから、backendブロックを削除し、リモートバックエンドではなくローカル状態ファイルが使用されるようにします。人によって違う- Terraform のスキルを持つ同僚を見つけて、確認してもらうのもいいでしょう。

TL;DR - 私には、これはラッパーのバグか、何かが順番通りに削除されなかったように聞こえます。

関連情報