TerraformによるAWSリソースの破棄

スポンサーリンク
TerraformによるAWSリソースの破棄 ノウハウ
TerraformによるAWSリソースの破棄
この記事は約7分で読めます。
よっしー
よっしー

こんにちは。よっしーです(^^)

今日は、Terraformを使用してAWSリソースの破棄についてご紹介します。

スポンサーリンク

背景

前回までの記事ではTerraformを使ってAWS上のEC2インスタンスを作成し、更新しました。この記事では、Terraformを使ってこのインフラを破壊していきます。

インフラが不要になったら、セキュリティの露出やコストを削減するために破棄したい場合があります。例えば、本番環境をサービスから削除したり、ビルドやテストシステムのような短命の環境を管理したりすることがあります。インフラの構築や変更に加えて、Terraformは管理するインフラを破壊したり再作成したりすることができます。

事前準備

この記事は、前回の記事から継続していることを前提としています。前回の記事を参照していない方は、前回の記事を参照することをおすすめします。

AWSリソースの更新

TerraformでEC2を構築

更新する前に、下記の手順で前回作成したEC2を構築します。

cd learn-terraform-aws-instance

export AWS_ACCESS_KEY_ID=[Terraformを実行するIAMユーザーのアクセスキーを入力]

export AWS_SECRET_ACCESS_KEY=[Terraformを実行するIAMユーザーのシークレットキーを入力]

terraform init

terraform apply

TerraformでEC2を破棄

terraform destroyコマンドは、Terraformプロジェクトで管理されているリソースを終了させます。このコマンドはterraform applyの逆で、Terraformの状態で指定されたリソースをすべて終了させます。現在のTerraformプロジェクトで管理されていない、他の場所で稼働しているリソースは破棄しません。

terraform destroy
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  - destroy

Terraform will perform the following actions:

  # aws_instance.app_server will be destroyed
  - resource "aws_instance" "app_server" {

– 接頭辞は、インスタンスが破棄されることを示します。 apply と同様に、Terraform は実行計画を表示し、変更を加える前に承認を待ちます。

Do you really want to destroy all resources?
  Terraform will destroy all your managed infrastructure, as shown above.
  There is no undo. Only 'yes' will be accepted to confirm.

  Enter a value: 

「yes」と答えると、この計画が実行され、インフラストラクチャが破壊されます。

  Enter a value: yes

aws_instance.app_server: Destroying... [id=i-0c576726ba8363199]
aws_instance.app_server: Still destroying... [id=i-0c576726ba8363199, 10s elapsed]
aws_instance.app_server: Still destroying... [id=i-0c576726ba8363199, 20s elapsed]
aws_instance.app_server: Still destroying... [id=i-0c576726ba8363199, 30s elapsed]
aws_instance.app_server: Destruction complete after 31s

Destroy complete! Resources: 1 destroyed.

applyと同様に、Terraformはリソースを破棄する順序を決定します。今回のケースでは、Terraformは他に依存関係のない単一のインスタンスを特定したので、そのインスタンスを破棄しています。複数のリソースがあるような複雑なケースでは、Terraformは依存関係を尊重した適切な順序でリソースを破棄します。

TerraformでAWSリソースを破棄する際の注意点

Terraform destroyコマンドを実行する際には、以下のポイントに注意する必要があります。

  1. 意図したリソースを対象としていることを確認する: Terraformの状態管理は重要です。誤って他のインフラストラクチャを破壊することを避けるために、実行する前に確認してください。
  2. ドライランモードを使用する: terraform destroyコマンドを実行する前に、-targetフラグを使用して特定のリソースを指定しない限り、Terraformは全てのリソースを破壊しようとします。誤って重要なリソースを削除しないように、terraform plan -destroyコマンドを使用してドライランモードで実行し、実際の破壊の影響を事前に確認してください。
  3. バックアップと復元の準備: Terraformの状態ファイル(通常はterraform.tfstate)は破壊操作の前にバックアップしておくことをおすすめします。万が一の事態に備えて、状態ファイルを復元できるようにしておくことが重要です。
  4. 環境への影響を評価する: 破壊操作が実行されると、それに依存する他のシステムやリソースに影響を及ぼす可能性があります。破壊操作の前に、それらの影響を評価し、関連する利害関係者に通知しておくことが重要です。
  5. ロックの管理: 複数のチームやユーザーが同じTerraform状態を管理している場合、競合を避けるためにロックの管理を行う必要があります。状態の競合を防ぐために、Terraformのバックエンドでロック機構を使用することをおすすめします。
  6. 権限の制御: terraform destroyコマンドは重大な影響を及ぼす可能性があるため、権限の制御が重要です。実行権限を厳密に制御し、適切なアクセス制限を設定して、誤った破壊操作を防止してください。
  7. タグの管理: リソースにタグを付けることは、管理や特定のリソースの識別に役立ちます。破壊操作の前に、タグ付けが正しく行われていることを確認し、不要なリソースのみが破壊されるようにします。
  8. バックエンドの制御: Terraformのバックエンドは、状態の保存と共有を管理するための重要な要素です。破壊操作の前に、バックエンドの設定を確認し、予期せぬ結果を避けるために適切に構成されていることを確保してください。
  9. モジュールの依存関係: モジュールを使用してインフラストラクチャを管理している場合、モジュール間の依存関係に留意する必要があります。破壊操作が依存関係を破壊する可能性があるため、依存関係を正確に理解し、適切な順序で破壊操作を実行する必要があります。
  10. ログと監視: Terraformの操作ログと監視メカニズムを活用して、破壊操作の結果を追跡および監視することをおすすめします。問題が発生した場合には、ログ情報を分析して原因特定を支援することができます。
  11. バージョン管理: Terraformのコードをバージョン管理システムで管理することは、変更の追跡とチーム協力のために重要です。破壊操作を行う前に、コードが適切にバージョン管理されていることを確認してください。

以上が、Terraform destroy操作を実行する際に注意すべきポイントの一部です。これらのポイントを守ることで、意図しない破壊や予期せぬ問題を回避し、インフラストラクチャの正確かつ安全な管理が可能になります。

おわりに

今日は、Terraformを利用してAWSリソースの破棄を実施しました。次回は、変数定義を確認したいと思います。

今回使用したTerraformのソースは下記のGitHubにあります。

よっしー
よっしー

何か質問や相談があれば、遠慮なくコメントしてください。また、エンジニア案件についても、いつでも相談にのっていますので、お気軽にお問い合わせください。

それでは、また明日お会いしましょう(^^)

コメント

タイトルとURLをコピーしました