action.skip

Terraform State Management with Megaport Resources

このトピックでは、Terraform の状態ファイルと、それを使用してネットワークにデプロイされた Megaport サービスに対する設定ファイルをマッピングするための推奨事項を説明します。

Terraform stateとは?

Terraform は、作成したリソースに関する情報を terraform.tfstate という状態ファイルに保存します。

このファイルは、terraform apply コマンドを実行した後に自動的に作成されます。これは、Terraform によって管理されているインフラストラクチャの特定の時点でのスナップショットを提供します。Terraform がデプロイされる同じディレクトリに作成されます。我々は terraform.tfstate を定期的に監視することを推奨しています。

Terraform 状態ファイルの主な目的は次の通りです:

  • 実際のリソースのマッピング – 状態ファイルは Terraform が作成および管理している実際のインフラストラクチャリソースを追跡します。構成、ID、依存関係に関する情報をログします。

  • 真実の情報源 – 状態ファイルは現在のインフラストラクチャに関する真実の情報源です。terraform apply コマンドを実行すると、構成ファイルと状態ファイルを比較して、どの変更が必要かを判断します。

  • メタデータの追跡 – 状態ファイルは Terraform が内部で使用するメタデータを保存します。例えば、状態を作成する際に使用された Terraform バージョンやリソース依存関係などです。

Terraform状態ファイルの詳細については、State (HashiCorp)をご覧ください。

Megaport リソースに関する Terraform stateの理解

Terraform state は、設定ファイルとネットワークにデプロイされた Megaport リソースをマッピングする重要なコンポーネントです。terraform apply コマンドを実行すると、Terraform は terraform.tfstate という状態ファイルを作成し、管理しているすべてのリソース、その構成、および相互依存性を追跡します。

Megaport Terraform Provider 状態ファイルには何が含まれていますか?

Megaport リソースについては、状態ファイルが次の情報を追跡します:

  • リソースIDおよびUID
  • ポート構成
  • VXC 設定
  • MCR ルーター構成
  • パートナー接続
  • ロケーション情報

主要な状態管理の概念

  • 既存のリソースのインポート – すでに Portal を通じて設定された Megaport サービスがある場合、terraform import コマンドを使用して、それらを Terraform 管理下に置きます:

    例1: 既存のPortをインポートする

    terraform import megaport_port.my_port "example-uid-41d4-a716-446655440000"
    

    例2: 既存のVXCをインポートする

    terraform import megaport_vxc.my_vxc "example-uid-426f-9247-bb680e5fe0c8"
    

    詳細については、既存のプロダクションサービスをインポートする を参照してください。

  • 誤った削除を防ぐ – 本番サービスを保護するために:

    • 変更を適用する前に常に terraform plan コマンドを実行します。
    • 変更の範囲を制限するために -target フラグを使用することを検討ください。
    • 重要なリソースの破壊を防ぐためにライフサイクルブロックを追加します。詳細については、Manage resource lifecycle (HashiCorp) を参照してください。
       resource "megaport_port" "production_port" {
       # Port configuration...
    
       lifecycle {
       prevent_destroy = true
       }
    }
    
  • チーム環境での状態ファイルの保存 – デフォルトでは、Terraform は状態情報をローカルに保存します。

    チーム環境での Terraform 状態ファイルの保存には、共同作業、バージョン管理、およびセキュリティのためにリモートストレージスペースを使用することを推奨します。

    • リモートステートストレージ(Terraform Cloud、S3など)を使用します。
    • 同時変更を防ぐためにステートロッキングを有効にします。
    • 状態ファイルには機密情報が含まれているため、暗号化を考慮してください。
  • 状態ファイルのメンテナンス – 時折、次のようなコマンドを使用する必要があるかもしれません:

    • terraform state list で管理されているすべてのリソースを確認します。
    • terraform state show で特定のリソースを調べます。
    • terraform state rm でリソースを破壊することなく状態から削除します。
  • 状態のドリフトの処理 – Terraform の状態ファイルは、その管理するすべてのインフラストラクチャを追跡します。Terraform 以外でこれらのリソースを手動で変更すると、状態ファイルが不正確になる可能性があります。この状況はドリフトと呼ばれます。

    Terraform のインフラストラクチャの記録が現実と一致しない場合、Terraform は不一致を修正しようとし、リソースの意図しない削除または再作成を行う可能性があります。詳細については、Manage resource drift (HashiCorp) を参照してください。

    Terraform 以外で Megaport リソースに変更が加えられた場合:

    • terraform refresh コマンドを使用して、現在のリソース構成で状態を更新します。
    • 不正な変更を検出するために、定期的に terraform plan コマンドを実行することを考慮してください。

推奨されるプラクティス

Terraform で最適な結果を得るために、次のようなプラクティスをお勧めします:

  • 状態ファイルを定期的にバックアップする – 失うと元に戻せない。
  • 構成ファイルをバージョン管理する – ただし、機密データを含む状態ファイルを保存しないようにしてください。詳細については、Sensitive Data in State (HashiCorp) を参照してください。
  • 複雑な構成をモジュール化する – このアプローチは、より整理された再利用可能な構造を促進することで、リソース管理を改善します。
  • PortalでMegaportサービスをロックする – Terraform 状態はリソース管理の真実の情報源です。Portal および Terraform で本番サービスへの矛盾する変更を防ぐために、本番サービスのロックを推奨します。詳細については、Megaport サービスのロックs を参照してください。

詳細については、Learn Terraform recommended practices (HashiCorp) を参照してください。

参考資料