コードとしてのインフラ(IaC:インフラ・アズ・コード)により、IT インフラをスケーラブルかつ一貫して自動化し、管理できます。大手テクノロジー企業やクラウド・プロバイダがさまざまな IaC ツールを提供するなか、HashiCorp の Terraform は、クラウド・リソースのプロビジョニングと管理に対する明確なアプローチを際立たせています。Terraform の一連のコマンドの興味深い特徴は、インフラの状態が構成ファイルと確実に整合する上で重要な役割を果たす terraform refresh です。
この記事では、terraform refresh、インフラ管理における重要性、それを効果的に活用する方法について詳しく解説します。
Terraform Refresh について
terraform refresh は、Terraform が管理するインフラの現状と Terraform の状態ファイルを同期します。Terraform の状態ファイルを、インフラに必要な構成の概要を示す青写真として想像してみてください。ただし、手動での変更は、時間の経過とともに Terraform の管理の及ばないインフラに直接行われる場合があります。terraform refresh は、実際の変更を反映するために状態ファイルを更新することで、このギャップを埋めます。
terraform refresh の主な目的は、リソースの実際の状態と、構成ファイルで定義されている目的の状態との間のずれ(ドリフト)を検出することです。このドリフトは、Terraform 以外のインフラへの手動の変更や、インフラ環境自体の変更によって発生する可能性があります。
Terraform Refresh の使い方
terraform refresh の使い方は、簡単です。コマンド構文は、次のとおりです。
$ terraform refresh
このコマンドは、Terraform 構成で現在管理されている全てのリソースの状態ファイルを更新するように Terraform に指示します。terraform refresh は状態ファイルを更新するだけで、実際のインフラには変更が加えられません。
AWS S3 バケット・インスタンスをプロビジョニングする Terraform 構成があるとします。サンプル構成ファイル(main.tf):
provider "aws" {
region = "us-west-2"
}
resource "aws_s3_bucket" "example" {
bucket = "my-unique-bucket-name"
acl = "private"
}
この設定を適用して S3 バケットを作成するには、以下を実行します。
$ terraform init
$ terraform apply
AWS コンソールまたは API を介して S3 バケットに直接変更を加えると、terraform refresh を実行することで状態ファイルが更新され、変更が反映されます。
$ terraform refresh
追加オプションとフラグ
- 入力:false に設定すると、Terraform がユーザー入力を必要とする場合にインタラクティブな入力を無効にします。
- 状態:操作に使用するカスタム状態ファイルを指定します。
以下にその使用例を示します。
$ terraform refresh -input=false -state="custom_state.tfstate"
Terraform Refresh のメリット
インフラ管理ワークフローに terraform refresh を組み込むことには、次のようなメリットがあります。
- 計画の精度向上:状態ファイルを更新することで、terraform refresh は、terraform plan の出力が、インフラを Terraform 構成と整合させるために必要な変更を正確に反映します。これにより、古い状態情報に基づいて不要な変更を提案するリスクがなくなります。
- インフラの可視性の向上:terraform refresh は、インフラの現在の状態を明確に把握します。この透明性により、コードと実際のインフラの不一致を特定し、必要に応じて是正措置を取ることができます。
- インフラ管理の合理化:terraform refresh は、Terraform の状態ファイルを最新の状態に維持することで、インフラ管理を簡素化します。状態ファイルには基盤となるインフラが正確に反映されているため、構成の変更を自信を持って適用できます。
Terraform Refresh のベストプラクティス
terraform refresh を使用する際に留意すべきベストプラクティスを以下に示します。
- Terraform v0.15.4 以前:以前のバージョンでは、terraform refresh は直接状態ファイルを更新しました。しかし、この動作は現在、安全性の懸念から非推奨とされています。terraform apply -refresh-only を使用することをお勧めします。このアプローチでは、更新を完了する前に確認を求めることができるため、状態ファイルに適用される前に変更を確認できます。
- -auto-approve:一部のドキュメントでは、terraform refresh を伴う自動承認フラグを参照している場合がありますが、このフラグは非推奨であるため、避ける必要があります。確認をバイパスし、意図しない結果を招く可能性があります。
- 計画的使用:terraform refresh は、特に terraform plan や terraform apply コマンドを実行する前に、戦略的に使用することが推奨されます。これにより、最新のインフラの状態が計画に反映されます。
- バージョン管理の統合:Terraform 構成を Git のようなバージョン管理システムと統合することを検討してください。これにより、Terraform コードの変更を追跡し、必要に応じて以前のバージョンに戻すことができます。これは、terraform refresh で予期しない不一致が明らかになった場合に特に重要になります。
- 限定的なスコープ更新:Terraform 構成内の特定のリソースまたはモジュールのみを更新する場合は、terraform refresh に -target フラグを活用できます。この的を絞ったアプローチは、大規模で複雑なインフラ展開の管理に役立ちます。
- 潜在的な影響を理解する:terraform refresh は状態ファイルを更新しますが、インフラは変更されません。ただし、状態を更新すると、目的の状態(Terraform 構成で定義)とインフラの実際の状態の違いがわかります。状態ファイルの更新後に発生した不一致に対処する準備をしてください。
まとめ
terraform refresh は、Terraform 構成と実際のインフラの一貫性を維持する上で重要な役割を果たします。状態ファイルの同期を維持することで、計画が正確であり、インフラ管理が合理化されます。
Terraform が管理するインフラを補完する高度なストレージ・ソリューションとして、Kubernetes 向けの Portworx や、さまざまなコンテナ・ワークロード向けの Pure Cloud Block Store などのピュア・ストレージ製品をご検討ください。これらのソリューションは、堅牢なデータ管理機能を提供し、クラウド・インフラの信頼性と効率性をさらに向上させます。