出力変数とデータソースの比較
Terraformの出力とデータソースは一見類似しているように見えますが、IaC(インフラ・アズ・コード)ワークフローでは異なる目的を果たします。以下に、違いを明確化するための内訳を示します。
Terraform の出力変数
terraform output は、Terraform が管理するリソースに関する情報を明らかにします。出力値は、Terraform 構成内の既存のリソースの属性から得られます。出力は通常、次のような場合に使用されます。
- Terraform モジュールまたは構成間でのデータ共有
- 構成管理または監視のために情報を外部システムに渡す
- ハードコードされたデータではなく動的な値を参照することで、構成ロジックを簡素化
このようなシナリオの例としては、EC2 インスタンスのパブリック IP アドレスを抽出し、それを使用して別の Terraform モジュールでセキュリティ・グループ・ルールを構成する場合が挙げられます。
Terraform データソース
データソースは、外部ソースからデータを取得します。API やプラグインと連携し、クラウド・プロバイダ、構成管理ツール、その他の外部システムから情報を取得します。データソースは、次のような場合に利用されます。
- Terraform 自身が管理していない既存のリソースに関する情報へのアクセス
- 外部データを使用して Terraform リソースを動的に構成
- IaC と他のツールやプラットフォームの統合
例えば、データソースを使用して、クラウド・プロバイダ内の利用可能なリージョンのリストを取得してから、それらのリージョンにリソースを作成するとします。
簡単に言えば、出力変数とデータソースのどちらを使用するかは、必要なデータの原点によって異なります。
- Terraform 構成内で管理されるリソースからデータが発生した場合は、出力変数を使用します。
- データが外部システムに存在する場合、または動的に取得する必要がある場合は、データソースを使用します。
Terraform Output の使用に関するベストプラクティス
terraform output を使用する際は、以下のベストプラクティスを考慮する必要があります。
- わかりやすい名前を使用する:出力変数によって公開されるデータを反映する明確で簡潔な名前を選択します。「output1」や「data」のような一般的な名前は避けましょう。代わりに、「rds_instance_public_ip」や「webserver_security_group_id」のような名前を使用します。これにより、構成の読みやすさと保守性が向上します。
- 一貫した命名規則を使用する:Terraform コードベース全体で一貫した命名規則を維持します。これには、アンダースコアやハイフンを使用して分離し、全てのモジュールや構成で命名スキームを整合させることが含まれます。
- グループ関連の出力:関連する出力を論理的にグループ化します。例えば、データベース・インスタンスに関連する複数の出力(IP アドレス、ポート、ユーザー名)がある場合、それらを構成ファイル内の単一の見出しにグループ化します。これにより、組織が改善され、特定の情報を容易に見つけることができます。
- コメントの使用:各出力変数の目的と用途を説明する明確なコメントを含めます。これは、すぐに自己説明できない出力や、他のモジュールやチームで使用される出力に特に役立ちます。
- 不要な出力を回避:本来必要とされないデータの出力を定義することは避けてください。過剰な出力は、出力を乱雑にし、最も関連性の高い情報を特定することを困難にします。Terraform 構成内でデータを直接使用できるかどうか、あるいは代替アプローチがより効率的かどうかを評価します。
- シークレットの出力を避ける:可能であれば、機密データを Terraform 構成に完全に保存しないでください。HashiCorp Vault や環境変数の活用など、シークレットを管理する代替手段を検討してください。
- Terraform の sensitive 属性を使用する:シークレットに出力を避けられない場合は、output ブロック内の sensitive 属性を使用して、それらを機密としてマークします。これにより、terraform output コマンド実行時に値が表示されないよう指示できます。
以下に、sensitive 属性を追加した例を示します。
output "db_password" {
value = aws_db_instance.example.password
sensitive = true
}
|
まとめ
terraform output により、静的構成と動的インフラ間のギャップを埋めることができます。出力を活用することで、データ共有の合理化、タスクの自動化、検証の簡素化が可能になります。
インフラの可能性を最大限に引き出すには、Portworx などのピュア・ストレージのソリューションを使用して Terraform Kubernetes のデプロイメントに永続ストレージを有効にし、Pure Cloud Block Store を使用してクラウドベースのアプリケーションに理想的なストレージ・ソリューションを提供することを検討してください。