LoginSignup
57
37

More than 5 years have passed since last update.

[翻訳]Terraform_Commands(CLI)大全

Posted at

はじめに

正直、terraformってapplyとplanとinitくらいしか使ってなかった。
もっと色々使っていこうと思って、見てみた。

英語読むのめんどくせーーーとなっている人の助けになればと思い公開した

注意事項

  • 基本的にGoogle翻訳のまんまです。
  • 一応、意味が分かるようには訳してるつもりですが、ちょいちょい意味分からない部分もあります。
    誤訳がある可能性があるので、最後はちゃんと公式ドキュメント Commands(CLI) を読みましょう

Index

Terraform Commands(CLI)

Terraformは非常に使いやすいコマンドラインインターフェイス(CLI)によって制御されます。Terraformは単一のコマンドラインアプリケーションです。このアプリケーションは、"apply"または"plan"などのサブコマンドを受け取ります。

terraform CLIは適切に動作するコマンドラインアプリケーションです。誤ったケースでは、ゼロ以外の終了ステータスが返されます。おそらく期待通りに-hと--helpに応答します。

使用可能なコマンドのリストをいつでも表示するには、引数なしでterraformを実行してください。

$ terraform
Usage: terraform [--version] [--help] <command> [args]

The available commands for execution are listed below.
The most common, useful commands are shown first, followed by
less common or more advanced commands. If you're just getting
started with Terraform, stick with the common commands. For the
other commands, please read the help and docs before usage.

Common commands:
    apply              Builds or changes infrastructure
    console            Interactive console for Terraform interpolations
    destroy            Destroy Terraform-managed infrastructure
    fmt                Rewrites config files to canonical format
    get                Download and install modules for the configuration
    graph              Create a visual graph of Terraform resources
    import             Import existing infrastructure into Terraform
    init               Initialize a new or existing Terraform configuration
    output             Read an output from a state file
    plan               Generate and show an execution plan
    providers          Prints a tree of the providers used in the configuration
    push               Upload this Terraform module to Terraform Enterprise to run
    refresh            Update local state file against real resources
    show               Inspect Terraform state or plan
    taint              Manually mark a resource for recreation
    untaint            Manually unmark a resource as tainted
    validate           Validates the Terraform files
    version            Prints the Terraform version
    workspace          Workspace management

All other commands:
    debug              Debug output management (experimental)
    force-unlock       Manually unlock the terraform state
    state              Advanced state management

特定のコマンドのヘルプを表示するには、関連するサブコマンドに-hフラグを渡します。たとえば、graphサブコマンドに関するヘルプを表示するには次のようにします。

$ terraform graph -h
Usage: terraform graph [options] PATH

  Outputs the visual graph of Terraform resources. If the path given is
  the path to a configuration, the dependency graph of the resources are
  shown. If the path is a plan file, then the dependency graph of the
  plan itself is shown.

  The graph is outputted in DOT format. The typical program that can
  read this format is GraphViz, but many web services are also available
  to read this format.

Shell Tab-completion

コマンドシェルにbashまたはzshを使用すると、Terraformはすべてのコマンド名と(今のところ)いくつかのコマンド引数に対してタブ補完をサポートできます。

シェルプロファイルに必要なコマンドを追加するには、次のコマンドを実行します。
terraform -install-autocomplete

インストール後、完了する前にシェルを再起動するか、プロファイルスクリプトを再読み込みする必要があります。

補完フックをアンインストールするには、シェルプロファイルで手動で変更されていないものと仮定して、次のコマンドを実行します。
terraform -uninstall-autocomplete

現在、Terraformのすべてのサブコマンドですべての引数に対して完全なタブ補完がサポートされているわけではありません。私たちは時間の経過とともにタブ補完範囲を改善する予定です。

Upgrade and Security Bulletin Checks

Terraform CLIコマンドは、HashCorpサービスのCheckpointとやりとりして、新しいバージョンと現在のバージョンに関する重要なセキュリティ情報の可用性をチェックします。

これの効果が見られる1つの場所は、テラフォームのバージョンであり、デフォルトでは新しいバージョンが利用可能になったときに出力に表示されます。

ユーザーまたはホストの識別に使用できない匿名情報のみがCheckpointに送信されます。匿名のIDが送信され、警告メッセージの重複を防ぎます。匿名IDとチェックポイント自体の使用は完全にオプションであり、無効にすることができます。Checkpoint自体は、環境変数CHECKPOINT_DISABLEを空でない値に設定することによって、すべてのHashiCorp製品で完全に無効にすることができます。また、CLI設定ファイルの設定を使用して、チェックポイント機能を無効にすることもできます。このファイルでは、次のチェックポイント関連の設定がサポートされています。

  • disable_checkpoint - チェックポイント呼び出しを完全に無効にするには、trueに設定します。これは、上記のCHECKPOINT_DISABLE環境変数に似ています。
  • disable_checkpoint_signature - チェックポイント要求での匿名シグネチャの使用を無効にするには、trueに設定します。これにより、Terraformはセキュリティ情報を確認できますが、これらの要求では匿名の署名は送信されません。

Terraformで使用されるCheckpointクライアントコードは、任意の利害関係者が検討できるようになっています。

Command: apply

terraform apply コマンドは、構成の所望の状態に到達するために必要な変更、または terraform plan 実行計画によって生成される所定の動作のセットを適用するために使用される。

Usage


Usage: terraform apply [options] [dir-or-plan]

デフォルトでは、applyは現在のディレクトリで構成をスキャンし、変更を適切に適用します。ただし、別の構成または実行計画へのパスを提供することができます。明示的な実行計画ファイルを使用してplanを分割し、自動化システム内の別々のステップに適用することができます。

コマンドラインフラグはすべてオプションです。使用可能なフラグのリストは次のとおりです。

  • -backup = path - バックアップファイルへのパス。既定値は ".backup"拡張子で-state-outになります。 " - "に設定すると無効になります。
  • -lock=true - ロックがサポートされているときに状態(state)ファイルをロックします。
  • -lock-timeout = 0s - 状態ロックを再試行する期間。
  • -input = true - 変数を直接入力しない場合は入力を求めます。
  • -auto-approve - 適用前にプランの対話式承認をスキップします。
  • -no-color - 色付きの出力を無効にします。
  • -parallelism = n - Terraformがグラフを表示する際の同時操作数を制限します。
  • -refresh = true - planとapplyの前に各リソースの状態を更新します。適用するためにプランファイルが直接与えられている場合、これは効果がありません。
  • -state = path - 状態ファイルへのパス。デフォルトは "terraform.tfstate"です。リモート状態(Remote State)が使用されている場合は無視されます。
  • -target = resource - ターゲットとするリソースアドレス。詳細については、terraform planのターゲティングドキュメントを参照してください。
  • -var 'foo = bar' - Terraform configurationで変数を設定します。このフラグは複数回設定できます。変数値はHCLと解釈されるため、リストとマップの値はこのフラグで指定できます。
  • -var-file = foo - 変数ファイルからTerraform configurationの変数を設定します。terraform.tfvarsまたは任意の.auto.tfvarsファイルが現在のディレクトリに存在する場合、自動的にロードされます。terraform.tfvarsが最初に読み込まれ、.auto.tfvarsファイルがアルファベット順に読み込まれます。-var-fileで指定されたファイルは、作業ディレクトリのファイルから自動的に設定された値を上書きします。このフラグは複数回使用できます。

Command: console

terraform consoleコマンドは、補間(interpolations)を使用するための対話式コンソールを作成します。

Usage


Usage: terraform console [options] [dir]

補間を試すための対話型コンソールが開きます。これは、既存のstateと対話するだけでなく、構成(configuration)でそれらを使用する前に補間のテストに役立ちます。

状態ファイルが存在しない場合、コンソールは引き続き機能し、サポートされている補間機能を試すために使用できます。1 + 5などの基本的な計算を入力してみてください。

dir引数は、特定のTerraform設定ディレクトリのコンソールを開くために使用できます。これにより、そのディレクトリからの状態(state)と構成(configuration)がロードされます。これはデフォルトで現在の作業ディレクトリになります。consoleコマンドでは、Terraformの状態(state)や設定(configuration)が機能する必要はありません。

コマンドラインフラグはすべてオプションです。使用可能なフラグのリストは次のとおりです。

  • -state = path - 状態(state)ファイルへのパス。デフォルトはterraform.tfstateです。状態ファイルは存在する必要はありません。

exitコマンドを使用するか、Control-CまたはControl-Dを使用してコンソールを閉じることができます。

Scripting


terraform consoleコマンドは、非対話型スクリプトで改行で区切られたコマンドをパイプすることで使用できます。先にエラーが発生しない限り、最終コマンドの出力のみが出力されます。

例を以下に示します。

$ echo "1 + 5" | terraform console
6

Remote State


terraform consoleコマンドは、リモートであっても設定された状態を読み込みます。これは、CI環境または他のリモートシナリオでの状態の読み込みのスクリプティングに最適です。

リモート状態を構成したら、terraform remote pullコマンドを実行して、状態をローカルに同期させます。terraform consoleコマンドは、この状態を操作に使用します。

現在、コンソールはどのような方法でも状態を変更することができないため、これは一方向の操作であり、リモート状態の競合を心配する必要はありません。

Command: destroy

terraform destroyコマンドは、Terraform管理インフラストラクチャを破壊するために使用されます。

Usage


Usage: terraform destroy [options] [dir]

Terraformによって管理されるインフラストラクチャは破壊されます。これは破壊する前に確認を求めます。

このコマンドは、applyコマンドが受け入れるすべての引数とフラグを受け取りますが、planファイルの引数は例外です。

-auto-approveが設定されている場合、破棄の確認は表示されません。

"依存関係"に影響を与える代わりに-targetフラグは、指定されたターゲットに依存するすべてのリソースも破棄します。

terraform destroyコマンドの動作は、同等のterraform plan -destroyコマンドを使用していつでもプレビューできます。

Command: env

terraform envコマンドは推奨されていません。代わりに、terraform workspaceコマンドを使用する必要があります。

Command: fmt

terraform fmtコマンドは、Terraform設定ファイルを標準形式とスタイルに書き換えるために使用します。

Usage


Usage: terraform fmt [options] [DIR]

デフォルトでは、fmtは現在のディレクトリで構成ファイルをスキャンします。引数dirが指定されていれば、指定されたディレクトリをスキャンします。dirが単一のダッシュ( - )の場合、fmtは標準入力(STDIN)から読み込みます。

コマンドラインフラグはすべてオプションです。使用可能なフラグのリストは次のとおりです。

  • -list = true - 書式が異なるファイルを一覧表示します(STDINを使用すると無効になります)
  • -write = true - 結果をSTDOUTではなくソースファイルに書き込みます(STDINまたは-checkを使用している場合は無効)
  • -diff = false - 書式変更の差分を表示する
  • -check = false - 入力がフォーマットされているかどうかを確認します。終了ステータスは、すべての入力が適切にフォーマットされている場合は0になり、そうでない場合は0ではなくなります。

Command: force-unlock

定義された構成(configuration)の状態を手動でロック解除します。

これにより、インフラストラクチャは変更されません。このコマンドは、現在の構成の状態に対するロックを解除します。このロックの動作は、使用されているバックエンドによって異なります。ローカル状態(state)ファイルは、別のプロセスによってロック解除することはできません。

Usage


Usage: terraform force-unlock LOCK_ID [DIR]

定義された構成の状態を手動でロック解除します。

これにより、インフラストラクチャは変更されません。このコマンドは、現在の構成の状態に対するロックを解除します。このロックの動作は、使用されているバックエンドによって異なります。ローカル状態(state)ファイルは、別のプロセスによってロック解除することはできません。

Options:

  • -force - ロック解除確認の入力を求めない。

Command: get

terraform getコマンドは、ルートモジュールに記載されているモジュールのダウンロードと更新に使用されます。

Usage


Usage: terraform get [options] [dir]

モジュールはローカルの.terraformフォルダにダウンロードされます。このフォルダはバージョン管理にコミットするべきではありません。.terraformフォルダは、このコマンドに与えられたdir引数に関係なく、あなたの現在の作業ディレクトリに対して作成されます。

モジュールが既にダウンロードされていて、-updateフラグが設定されていない場合、Terraformは何も行いません。その結果、このコマンドを複数回実行することは安全(かつ高速)です。

コマンドラインフラグはすべてオプションです。使用可能なフラグのリストは次のとおりです。

  • -update - 指定されている場合、既にダウンロードされているモジュールのアップデートがチェックされ、アップデートがあればダウンロードされます。
  • dir - ルートモジュールのパスを設定します。

Command: graph

terraform graphコマンドは、構成または実行計画の視覚的表現を生成するために使用されます。出力はDOT形式で出力され、GraphVizがグラフを生成するために使用することができます。

Usage


Usage: terraform graph [options] [DIR]

DIR(または省略されている場合はカレントディレクトリ)の設定ファイルに従って、Terraformリソースのビジュアル依存グラフを出力します。

グラフはDOT形式で出力されます。この形式を読むことができる典型的なプログラムはGraphVizですが、多くのWebサービスもこの形式を読むことができます。

-typeフラグは、表示されるグラフのタイプを制御するために使用できます。Terraformは異なる操作のために異なるグラフを作成します。サポートされているタイプのリストについては、以下のオプションを参照してください。デフォルトのタイプは、設定が与えられている場合は "plan"で、プランファイルが引数として渡された場合は "apply"です。

オプション:

  • -draw-cycles - グラフの任意のサイクルを色付きのエッジでハイライト表示します。これは、サイクルエラーを診断するときに役立ちます。
  • -no-color - 指定すると、出力には色が含まれません。
  • -type = plan - 出力するグラフのタイプ。できること:plan、plan-destroy、apply、legacy。

Generating Images


terraform graphの出力はDOT形式であり、GraphVizが提供するドットを使用して簡単に画像に変換できます。

$ terraform graph | dot -Tsvg > graph.svg

次に、グラフの出力例を示します。

graph-example-8a4f085e.png

Command: import

terraformインポートコマンドは、既存のリソースをTerraformにインポートするために使用されます。

Usage


Usage: terraform import [options] ADDRESS ID

インポートは既存のリソースをIDから見つけ出し、指定されたADDRESSのTerraform stateにインポートします。

ADDRESSは有効なリソースアドレスでなければなりません。どんなリソースアドレスも有効なので、importコマンドはリソースをモジュールにインポートすることも、あなたの状態のルートに直接インポートすることもできます。

IDはインポートされるリソースの種類に依存します。たとえば、AWSインスタンスの場合はインスタンスID(i-abcd1234)ですが、AWS Route53ゾーンの場合はゾーンID(Z12ABC4UGMOZ2N)です。 ID形式の詳細については、プロバイダのマニュアルを参照してください。確信が持てない場合は、IDを試してみてください。 IDが無効な場合は、エラーメッセージが表示されます。

コマンドラインフラグはすべてオプションです。使用可能なフラグのリストは次のとおりです。

  • -backup = path - 既存の状態ファイルをバックアップするパス。デフォルトは ".backup"拡張子を持つ-state-outパスです。バックアップを無効にするには " - "に設定します。
  • -config = path - インポートするプロバイダを設定するTerraform設定ファイルのディレクトリへのパス。これはデフォルトで作業ディレクトリになります。このディレクトリにTerraform構成ファイルが含まれていない場合は、手動入力または環境変数を使用してプロバイダを構成する必要があります。
  • -input = true - プロバイダ設定の入力を要求するかどうかを指定します。
  • -lock = true - ロックがサポートされているときに状態ファイルをロックします。
  • -lock-timeout = 0s - 状態ロックを再試行する期間。
  • -no-color - 指定すると、出力には色が含まれません。
  • -provider = provider - インポートに使用する指定されたプロバイダ。値は、 "aws.eu"などのTYPE.ALIAS形式のプロバイダエイリアスである必要があります。これは、インポートされるリソースのプレフィックスに基づいて通常のプロバイダにデフォルト設定されます。通常これを指定する必要はありません。
  • -state = path - 読み込むソース状態ファイルへのパス。設定されているバックエンド、つまり "terraform.tfstate"がデフォルトです。
  • -state-out = path - 書き込み先の状態ファイルへのパス。これが指定されていない場合、ソース状態ファイルが使用されます。新しいパスまたは既存のパスにすることができます。
  • -var 'foo = bar' - Terraform設定で変数を設定します。このフラグは複数回設定できます。変数値はHCLと解釈されるため、リストとマップの値はこのフラグで指定できます。これは、-configフラグでのみ有効です。
  • -var-file = foo - 変数ファイルからTerraform設定の変数を設定します。terraform.tfvarsまたは任意の.auto.tfvarsファイルが現在のディレクトリに存在する場合、自動的にロードされます。terraform.tfvarsが最初に読み込まれ、.auto.tfvarsファイルがアルファベット順に読み込まれます。-var-fileで指定されたファイルは、作業ディレクトリのファイルから自動的に設定された値を上書きします。このフラグは複数回使用できます。これは、-configフラグでのみ有効です。

Provider Configuration


Terraformは、インポートに使用されているプロバイダを構成する構成ファイルを読み込もうとします。設定ファイルがない場合、またはその特定のプロバイダの設定が存在しない場合、Terraformはアクセス資格情報の入力を求めます。環境変数を指定して、プロバイダを構成することもできます。

Terraformが設定ファイルを読み込む際に唯一の制限は、インポートプロバイダの設定が可変でない入力に依存してはならないことです。たとえば、プロバイダ構成はデータソースに依存することはできません。

実際の例として、AWSリソースをインポートしていて、以下の内容の設定ファイルがある場合、Terraformはこのファイルを使用してAWSプロバイダを設定します。

variable "access_key" {}
variable "secret_key" {}

provider "aws" {
  access_key = "${var.access_key}"
  secret_key = "${var.secret_key}"
}

-config = ""(空の文字列)を指定することによって、Terraformに設定を明示的にロードさせないようにすることができます。これは、構成が有効でない可能性があるため、プロバイダーを手動で構成する場合に便利です。

Example: AWS Instance


この例では、AWSインスタンスをインポートします。
$ terraform import aws_instance.foo i-abcd1234

Example: Import to Module


次の例では、AWSインスタンスをモジュールにインポートします。
$ terraform import module.foo.aws_instance.bar i-abcd1234

Command: init

terraform initコマンドは、Terraform設定ファイルを含む作業ディレクトリを初期化するために使用されます。これは、新しいTerraform設定を書き込んだり、バージョンコントロールから既存のTerraformを複製した後に実行する最初のコマンドです。このコマンドを複数回実行すると安全です。

Usage


Usage: terraform init [options] [DIR]

このコマンドは、使用する作業ディレクトリを準備するために、いくつかの異なる初期化手順を実行します。これらの詳細については以下のセクションで説明しますが、ほとんどの場合、これらの個別のステップについて心配する必要はありません。

このコマンドは、構成の変更に伴って作業ディレクトリを最新の状態にするために、複数回実行するのが常に安全です。後続の実行でエラーが発生することがありますが、このコマンドは既存の構成や状態を削除しません。

引数が指定されていない場合は、現在の作業ディレクトリの設定が初期化されます。現在の作業ディレクトリを構成のルートディレクトリに設定してTerraformを実行し、DIR引数を省略することをお勧めします。

General Options


次のオプションは、すべての(またはいくつかの)初期化ステップに適用されます。

  • -input = true 必要に応じて入力を求めます。 falseの場合、入力が必要な場合はエラーになります。
  • -lock = false 状態関連操作中の状態ファイルのロックを無効にします。
  • -lock-timeout = <duration> Terraformが状態ロックを取得するのを待機する時間を上書きします。デフォルトは0秒(ゼロ秒)で、ロックがすでに別のプロセスによって保持されている場合は即座に失敗(failure)します。
  • -no-color コマンド出力のカラーコードを無効にします。
  • -upgrade モジュールとプラグインをそれぞれのインストール手順の一部としてアップグレードすることを選択します。詳細については、以下のセクションを参照してください。

Copy a Source Module


デフォルトでは、terraform initは作業ディレクトリにすでに設定が含まれているとみなし、その設定を初期化しようとします。

必要に応じて、initは空のディレクトリに対して-from-module = MODULE-SOURCEオプションを指定して実行できます。この場合、他の初期化ステップが実行される前に、指定されたモジュールがターゲットディレクトリにコピーされます。

この特別な操作モードは、2つのユースケースをサポートします。

  • バージョンコントロールのソースを指定すると、バージョンコントロールから設定をチェックアウトし、そのディレクトリの作業ディレクトリを初期化するための略語として役立ちます。
  • ソースが設定例を参照している場合は、ローカルディレクトリにコピーして新しい設定の基礎として使用できます。

日常的に使用する場合は、バージョンコントロールシステムの独自のコマンドを使用して、バージョンコントロールから構成を個別にチェックアウトすることをお勧めします。このようにして、必要に応じてバージョン管理システムに余分なフラグを渡したり、terraform initを実行する前に他の準備ステップ(設定の生成や認証情報の有効化など)を実行することができます。

Backend Initialization


initの間に、バックエンド設定のためにルート設定ディレクトリが参照され、選択されたバックエンドは指定された設定を使用して初期化されます。

すでに初期化されたバックエンドでinitを再実行すると、新しいバックエンド設定を使用するように作業ディレクトリが更新されます。変更された内容によっては、ワークスペースの状態の移行を確認するためのインタラクティブなプロンプトが表示されることがあります。-force-copyオプションを指定すると、これらのプロンプトが表示されず、移行に関する質問に「yes」と回答します。-reconfigureオプションは既存の構成を無視し、既存の状態の移行を防ぎます。

バックエンド設定をスキップするには、-backend = falseを使用します。他のinitの手順では、初期化されたバックエンドが必要なので、このフラグは、特定のバックエンドに対して作業ディレクトリが既に初期化されている場合にのみ使用することをお勧めします。

-backend-config = ...オプションは、バックエンド設定が動的または機密で設定ファイルで静的に指定できない状況で、バックエンドの部分的な設定に使用できます。

Child Module Installation


initの間、モジュールブロックの設定が検索され、参照されたモジュールのソースコードがソース引数で指定された場所から取得されます。

すでにインストールされているモジュールでinitを再実行すると、最後のinitから設定に追加されたモジュールのソースがインストールされますが、すでにインストールされているモジュールは変更されません。この動作を変更するには、-upgradeを使用して、すべてのモジュールを最新の使用可能なソースコードに更新します。

子モジュールのインストールをスキップするには、-get = falseを使用します。他のいくつかのinitステップは、モジュールツリーが完了したときにのみ完了できるので、作業ディレクトリがすでにその子モジュールで初期化されている場合にのみ、このフラグを使用することをお勧めします。

Plugin Installation


initの間、プロバイダへの直接参照と間接参照の両方について設定が検索され、プロバイダのプラグインはプラグインリポジトリから取得されます。ダウンロードされたプラグインは、作業ディレクトリのサブディレクトリにインストールされるため、その作業ディレクトリのローカルです。

すでにインストールされているプラ​​グインを使用してinitを再実行すると、最後のinit以降に設定に追加されたすべてのプロバイダに対してのみプラグインがインストールされます。-upgradeを使用して、すでにインストールされているプラ​​グインを、設定で指定されたバージョンの制約に準拠する最新のバージョンに追加更新します。

プラグインのインストールをスキップするには、-get-plugins = falseを使用します。

自動プラグインのインストールの動作は、必要なプロバイダをローカルディレクトリに抽出し、追加オプション-plugin-dir = PATHを使用することで上書きすることができます。このオプションを指定すると、指定されたディレクトリのみが参照され、Terraformがプラグインリポジトリへのリクエストを作成したり、他のローカルディレクトリにあるプラグインを探すことを防ぎます。空の文字列を-plugin-dirに渡すと、以前に記録されたパスはすべて削除されます。

カスタムプラグインは、自動的にインストールされたプラグインと共に、初期化されているディレクトリの中のterraform.d / plugins / OS_ARCH /に配置することで使用できます。ここで見つかったプラグインは、設定で必要な制約を満たしていれば優先されます。initコマンドは、必要に応じて他のプラグインを自動的にダウンロードし続けます。プラグインが自動的にダウンロードされてインストールされると、デフォルトでコンテンツは正式なHashiCorpリリースの署名と照合され、ダウンロード中に破損したり改ざんされたりしていないことが保証されます。Terraformにこれらのチェックを許可することをお勧めしますが、必要に応じて-verify-plugins = falseオプションを使用して無効にすることができます。

Running terraform init in automation


Terraformを変更管理および配備パイプラインの重要な部分として使用するチームでは、実行間の一貫性を確保し、バージョン管理フックとの統合などのその他の興味深い機能を提供するために、何らかの自動化でTerraformの実行を調整することが望ましい場合があります。

このような環境でinitを実行する際には、オプションでローカルでプラグインを使用可能にして、繰り返し再インストールすることを避けるなど、特別な懸念があります。詳細については、オートメーションでのTerraformの実行を参照してください。

Command: output

terraform outputコマンドは、出力ファイルの値を状態ファイルから抽出するために使用されます。

Usage


Usage: terraform output [options] [NAME]
追加の引数がなければ、ルートモジュールのすべての出力が出力されます。出力NAMEが指定された場合、その出力の値のみが出力されます。

コマンドラインフラグはすべてオプションです。使用可能なフラグのリストは次のとおりです。

  • -json - 指定すると、出力はJSONオブジェクトとしてフォーマットされ、出力ごとにキーが付きます。 NAMEを指定すると、指定された出力のみが返されます。これをjqなどのツールにパイプして後で処理することができます。
  • -state = path - 状態ファイルへのパス。デフォルトは "terraform.tfstate"です。リモート状態が使用されている場合は無視されます。
  • -module = module_name - 出力が必要なモジュールパス。デフォルトではこれがルートパスです。他のモジュールは、ピリオド区切りのリストで指定することができます。例: "foo"はモジュール "foo"を参照しますが、 "foo.bar"は "foo"モジュールの "bar"モジュールを参照します。

Examples


これらの例では、次のTerraform出力スニペットを前提としています。

output "lb_address" {
  value = "${aws_alb.web.public_dns}"
}

output "instance_ips" {
  value = ["${aws_instance.web.*.public_ip}"]
}

すべての出力を一覧表示するには:

$ terraform output

ロードバランサのDNSアドレスを照会するには、次のようにします。

$ terraform output lb_address
my-app-alb-1657023003.us-east-1.elb.amazonaws.com

すべてのインスタンスIPアドレスを照会するには:

$ terraform output instance_ips
test = [
    54.43.114.12,
    52.122.13.4,
    52.4.116.53
]

リスト内の特定の値を照会するには、-jsonとjqなどのJSONコマンドライン・パーサーを使用します。たとえば、最初のインスタンスのIPアドレスを照会するには、次のようにします。

$ terraform output -json instance_ips | jq '.value[0]'

Command: plan

terraform planコマンドは、実行計画の作成に使用されます。Terraformは、明示的に無効にしない限り、リフレッシュを実行した後、設定ファイルで指定された目的の状態を達成するために必要なアクションを決定します。

このコマンドは、実際のリソースや状態を変更することなく、一連の変更の実行計画が期待通りのものかどうかを確認する便利な方法です。たとえば、バージョン管理の変更をコミットする前に、terraform planを実行して、期待通りの動作をするという確信を得ることができます。

オプションの-out引数を使用すると、生成されたプランを後でterraform applyで実行できるようにファイルに保存できます。これは、Terraformを自動化で実行する場合に便利です。

Usage


Usage: terraform plan [options] [dir-or-plan]
デフォルトでは、planはフラグを必要とせず、リフレッシュする構成ファイルと状態ファイルを現在のディレクトリで探します。

コマンドに既存の保存されたプランが引数として指定されている場合、保存されたプランの内容が出力されます。このシナリオでは、planコマンドは指定されたプランを変更しません。これは、プランファイルを検査するために使用できます。

コマンドラインフラグはすべてオプションです。使用可能なフラグのリストは次のとおりです。

  • -destroy - 設定されている場合は、すべての既知のリソースを破棄する計画を生成します。
  • -detailed-exitcode - コマンドが終了したときに詳細な終了コードを返します。提供された場合、この引数は終了コードとその意味を変更して、結果プランに含まれるものについてより詳細な情報を提供します。
    • 0 =空のdiffで成功(変更なし)
    • 1 =エラー
    • 2 =空でないdiffで成功しました(現在の変更)
  • -input = true - 変数を直接入力しない場合は入力を求めます。
  • -lock = true - ロックがサポートされているときに状態ファイルをロックします。
  • -lock-timeout = 0s - 状態ロックを再試行する期間。
  • -module-depth = n - 出力に表示するモジュールの深さを指定します。これは計画自体には影響せず、出力のみが表示されます。デフォルトでは、これは-1で、すべて展開されます。
  • -no-color - 色付きの出力を無効にします。
  • -out = path - 生成された実行計画を保存するパス。このプランは、このプランに示されている変更のみが適用されることを確実にするために、terraform applyで使用することができます。下記の保存された計画に関する警告を読んでください。
  • -parallelism = n - Terraformがグラフを表示する際の同時操作数を制限します。
  • -refresh = true - 違いを確認する前に状態を更新します。
  • -state = path - 状態ファイルへのパス。デフォルトは "terraform.tfstate"です。リモート状態が使用されている場合は無視されます。
  • -target = resource - ターゲットとするリソースアドレス。このフラグは複数回使用できます。詳細は以下を参照してください。
  • -var 'foo = bar' - Terraform設定で変数を設定します。このフラグは複数回設定できます。変数値はHCLと解釈されるため、リストとマップの値はこのフラグで指定できます。
  • -var-file = foo - 変数ファイルからTerraform設定の変数を設定します。terraform.tfvarsまたは任意の.auto.tfvarsファイルが現在のディレクトリに存在する場合、自動的にロードされます。terraform.tfvarsが最初に読み込まれ、.auto.tfvarsファイルがアルファベット順に読み込まれます。-var-fileで指定されたファイルは、作業ディレクトリのファイルから自動的に設定された値を上書きします。このフラグは複数回使用できます。

Resource Targeting


-targetオプションを使用すると、Terraformの注意をリソースのサブセットのみに集中させることができます。リソースアドレス構文は、制約を指定するために使用されます。リソースアドレスは次のように解釈されます。

  • 指定されたアドレスにリソース仕様がある場合、指定されたリソースのみが対象となります。指定されたリソースがcountを使用し、アドレスに明示的なインデックスが指定されていない場合、指定されたリソース名を共有するすべてのインスタンスが対象となります。
  • 指定されたアドレスはリソース仕様を持たず、モジュールパスを指定するだけで、ターゲットは指定されたモジュール内のすべてのリソースと指定されたモジュールのすべての子孫モジュールに適用されます。

このターゲティング機能は、間違いからの回復やTerraformの制限を回避するなどの例外的な状況に備えられています。ルーチン操作に-targetを使用することは推奨されません。これは、構成のドリフトが検出されず、実際のリソースの状態が構成にどのように関係しているかについて混乱を招く可能性があるためです。

非常に大きな構成の分離された部分を操作する手段として-targetを使用する代わりに、大規模な構成をそれぞれ独立して適用できるいくつかの小さな構成に分割することを推奨します。データソースを使用して、他の構成で作成されたリソースに関する情報にアクセスし、複雑なシステムアーキテクチャーを独立して更新できるより管理可能な部分に分解することができます。

Security Warning


保存されたプランファイル(-outフラグ付き)は、構成、状態、差分、および変数をエンコードします。変数は多くの場合、秘密を格納するために使用されます。したがって、計画ファイルに潜在的に秘密を格納することができます。

Terraform自体はプランファイルを暗号化しません。プランファイルを転送する場合、または長期間休止状態にする場合は、プランファイルを暗号化することを強くお勧めします。

Terraformの将来のバージョンでは、計画ファイルのセキュリティが強化されます。

Command: providers

terraform providersコマンドは、現在の設定で使用されているプロバイダに関する情報を表示します。

プロバイダの依存関係は、いくつかの異なる方法で作成されます。

  • 構成にプロバイダブロックを明示的に使用します。オプションでバージョン制約が含まれます。
  • 構成内のリソースまたはデータブロック内の特定のプロバイダに属するリソースの使用。
  • 現在の状態の特定のプロバイダに属するリソースインスタンスの存在。たとえば、特定のリソースが構成から削除された場合、そのインスタンスが破棄されるまで、そのプロバイダに依存関係を作成し続けます。

このコマンドは、特定のプロバイダがなぜ必要なのかを理解する助けとして、現在のすべての依存関係の概要を示します。

Usage


Usage: terraform providers [config-path]

明示的な設定パスを渡して、現在の作業ディレクトリを使用するデフォルトを上書きします。

Command: push

重要:terraform pushコマンドは廃止され、旧バージョンのTerraform Enterpriseでのみ動作します。

ということで、これは飛ばす

Command: refresh

terraform refreshコマンドは、Terraformが実際のインフラストラクチャについて知っている(状態ファイルを介して)状態を調整するために使用されます。これは、最後の既知の状態からのドリフトを検出し、状態ファイルを更新するために使用できます。

これは、インフラストラクチャを変更するのではなく、状態ファイルを変更します。状態が変更された場合、これにより、次回のplanまたはapply時に変更が発生する可能性があります。

Usage


Usage: terraform refresh [options] [dir]

デフォルトでは、refreshにはフラグが必要なく、リフレッシュする構成ファイルと状態ファイルを現在のディレクトリで検索します。

コマンドラインフラグはすべてオプションです。使用可能なフラグのリストは次のとおりです。

  • -backup = path - バックアップファイルへのパス。既定値は ".backup"拡張子で-state-outになります。 " - "に設定すると無効になります。
  • -input = true - 変数を直接入力しない場合は入力を求めます。
  • -lock = true - ロックがサポートされているときに状態ファイルをロックします。
  • -lock-timeout = 0s - 状態ロックを再試行する期間。
  • -no-color - 指定すると、出力には色が含まれません。
  • -state = path - 状態ファイルを読み書きするためのパス。デフォルトは "terraform.tfstate"です。リモート状態が使用されている場合は無視されます。
  • -state-out = path - 更新された状態ファイルを書き込むためのパス。デフォルトでは、-stateパスが使用されます。リモート状態が使用されている場合は無視されます。
  • -target = resource - ターゲットとするリソースアドレス。操作はこのリソースとその依存関係に限定されます。このフラグは複数回使用できます。
  • -var 'foo = bar' - Terraform設定で変数を設定します。このフラグは複数回設定できます。変数値はHCLと解釈されるため、リストとマップの値はこのフラグで指定できます。
  • -var-file = foo - 変数ファイルからTerraform configurationの変数を設定します。terraform.tfvarsまたは任意の.auto.tfvarsファイルが現在のディレクトリに存在する場合、自動的にロードされます。terraform.tfvarsが最初に読み込まれ、.auto.tfvarsファイルがアルファベット順に読み込まれます。-var-fileで指定されたファイルは、作業ディレクトリのファイルから自動的に設定された値を上書きします。このフラグは複数回使用できます。

Command: show

terraform showコマンドは、状態ファイルまたはプランファイルから人間が読める出力を提供するために使用されます。これは計画された操作が期待されることを確実にするために計画を検査するため、またはTerraformが見ているように現在の状態を検査するために使用することができます。

Usage


Usage: terraform show [options] [path]

showは、Terraformの状態ファイルまたはプランファイルへのパスで使用できます。パスが指定されていない場合は、現在の状態が表示されます。

コマンドラインフラグはすべてオプションです。使用可能なフラグのリストは次のとおりです。

  • -module-depth = n - 出力に表示するモジュールの深さを指定します。デフォルトでは、これは-1で、すべて展開されます。
  • -no-color - 色付きの出力を無効にします。

State Command

terraform stateコマンドは、高度な状態管理に使用されます。Terraformの使用状況がさらに高度化するにつれて、Terraformの状態を変更する必要が生じる場合があります。状態を直接変更するのではなく、terraform state コマンドを多くの場合に使用することができます。

このコマンドはネストされたサブコマンドです。つまり、さらにサブコマンドがあります。これらのサブコマンドは、以下にリストされています。

  • list
  • mv
  • pull
  • push
  • rm
  • show

Usage


Usage: terraform state <subcommand> [options] [args]

Remote State


Terraform stateサブコマンドはすべて、ローカル状態の場合と同じようにリモート状態で動作します。読取りおよび書込みは、各読取りおよび各書込みが完全なネットワーク往復(roundtrip)を行うので、通常よりも長くかかることがあります。それ以外の場合、バックアップはディスクに書き込まれ、CLIの使用法はローカル状態の場合と同じです。

Backups


状態を変更するすべてのterraform stateサブコマンドは、バックアップファイルを書き込みます。これらのバックアップファイルのパスは、-backupで制御できます。

読み取り専用のサブコマンド(listなど)は、状態を変更していないため、バックアップファイルを書き込みません。

状態変更のバックアップを無効にすることはできません。状態ファイルの機密性により、Terraformはすべての状態変更コマンドに強制的にバックアップファイルを書き込ませます。

Command-Line Friendly


stateサブコマンドの出力とコマンドライン構造は、grep、awkなどのUnixコマンドラインツールで使いやすいように設計されています。その結果、出力はWindows内の同等のPowerShellコマンドにも適しています。

高度なフィルタリングと変更を行うには、Terraformの状態サブコマンドを他のコマンドラインツールと一緒にpipeすることをお勧めします。

Command: taint

terraform taintコマンドは、手動でTerraform管理リソースを汚染されたものとしてマークし、次回の適用時に破棄して再作成するよう強制します。

このコマンドはインフラストラクチャを変更しませんが、リソースを汚染されたものとしてマークするために状態ファイルを変更します。リソースが汚染されているとマークされると、次のplanはそのリソースが破壊され再作成されることを示し、次のapplyがこの変更を実装します。

リソースの再作成を強制することは、リソースの属性には表示されない再作成の特定の副作用が必要な場合に役立ちます。たとえば、プロビジョニングを再実行すると、ノードが異なる場合や、マシンをベースイメージから再起動すると、新しい起動スクリプトが実行されます。

再作成のためにリソースを汚染すると、新たに汚染されたリソースに依存するリソースに影響する可能性があることに注意してください。たとえば、サーバーのIPアドレスを使用するDNSリソースは、汚染されたサーバーの潜在的に新しいIPアドレスを反映するように変更する必要があります。この場合、planコマンドはこれを表示します。

Usage


Usage: terraform taint [options] name

name引数は、汚染されたものとしてマークするリソースの名前です。この引数の形式は、aws_instance.fooなどのTYPE.NAMEです。

コマンドラインフラグはすべてオプションです。使用可能なフラグのリストは次のとおりです。

  • -allow-missing - 指定すると、リソースがなくてもコマンドは成功します(終了コード0)。このコマンドでもエラーは発生する可能性がありますが、重大なエラーが発生した場合のみです。
  • -backup = path - バックアップファイルへのパス。既定値は ".backup"拡張子で-state-outになります。 " - "に設定すると無効になります。
  • -lock = true - ロックがサポートされているときに状態ファイルをロックします。
  • -lock-timeout = 0s - 状態ロックを再試行する期間。
  • -module = path - 汚染するリソースが存在するモジュールパス。デフォルトではこれがルートパスです。他のモジュールは、ピリオド区切りのリストで指定することができます。例: "foo"はモジュール "foo"を参照しますが、 "foo.bar"は "foo"モジュールの "bar"モジュールを参照します。
  • -no-color - 色付きの出力を無効にします。
  • -state = path - 状態ファイルを読み書きするためのパス。デフォルトは "terraform.tfstate"です。リモート状態が使用されている場合は無視されます。
  • -state-out = path - 更新された状態ファイルを書き込むためのパス。デフォルトでは、-stateパスが使用されます。リモート状態が使用されている場合は無視されます。

Example: Tainting a Single Resource


この例では、単一のリソースを汚染します。

$ terraform taint aws_security_group.allow_all
The resource aws_security_group.allow_all in the module root has been marked as tainted!

Example: Tainting a Resource within a Module


この例では、モジュール内のリソースのみを汚染します。

$ terraform taint -module=couchbase aws_instance.cb_node.9
The resource aws_instance.couchbase.11 in the module root.couchbase has been marked as tainted!

Command: validate

terraform validateコマンドは、terraformファイルの構文を検証するために使用されます。Terraformは、ディレクトリ内のすべてのterraformファイルの構文チェックを実行し、いずれかのファイルが検証されない場合はエラーを表示します。

このコマンドでは、書式設定(タブ、スペース、改行、コメントなど)はチェックされません。

次のことが報告されます:

  • 無効なHCL構文(末尾の引用符や等号がないなど)
  • 無効なHCL参照(たとえば、存在しない変数名や属性)
  • 同じプロバイダが複数回宣言されました
  • 同じモジュールが複数回宣言されました
  • 無効なモジュール名
  • サポートされていない場所で使用される補間(例:variable、depends_on、module.source、provider)
  • 変数の欠損値(-var foo = ...フラグ、-var-file = foo.varsフラグ、TF_VAR_foo環境変数、terraform.tfvars、または構成のデフォルト値のいずれも)

Usage


Usage: terraform validate [options] [dir]

デフォルトでは、validateはフラグを必要とせず、現在のディレクトリで設定を調べます。

コマンドラインフラグはすべてオプションです。使用可能なフラグは次のとおりです。

  • -check-variables = true - true(デフォルト)に設定すると、コマンドは必要なすべての変数が指定されているかどうかをチェックします。
  • -no-color - 色付きの出力を無効にします。
  • -var 'foo = bar' - Terraform設定で変数を設定します。このフラグは複数回設定できます。変数値はHCLと解釈されるため、リストとマップの値はこのフラグで指定できます。
  • -var-file = foo - 変数ファイルからTerraform設定の変数を設定します。"terraform.tfvars"が存在する場合、自動的に最初に読み込まれます。var-fileで指定されたファイルは、 "terraform.tfvars"の値を上書きします。このフラグは複数回使用できます。

Command: untaint

terraform untaintコマンドは、Terraform管理のリソースの汚染を手動で解除し、その状態のプライマリインスタンスとしてリストアします。これは、手作業によるterraform taint(汚染)、またはリソース上で失敗したプロビジョニングの結果を取り消します。

このコマンドはインフラストラクチャを変更しませんが、状態ファイルを変更して、リソースを汚染されたものとしてマークを解除します。

汚染された(Tainted)インデックスに関する注記:特定のエッジのケースでは、単一のリソースに対して複数の汚染されたインスタンスが存在することがあります。この場合、プライマリとして復元する汚染されたインスタンスを選択するには、-indexフラグが必要です。terraform showコマンドを使用すると、状態を調べ、リストアしたいインスタンスを保持しているインデックスを特定できます。ほとんどの場合、汚染されたインスタンスは1つしかなく、-indexフラグは省略できます。

Usage


Usage: terraform untaint [options] name

name引数は、未汚染としてマークするリソースの名前です。この引数の形式は、aws_instance.fooなどのTYPE.NAMEです。

コマンドラインフラグはすべてオプションです(場合によっては-indexを除いて、上記を参照)。使用可能なフラグのリストは次のとおりです。

  • -allow-missing - 指定すると、リソースがなくてもコマンドは成功します(終了コード0)。このコマンドでもエラーは発生する可能性がありますが、重大なエラーが発生した場合のみです。
  • -backup = path - バックアップファイルへのパス。既定値は ".backup"拡張子で-state-outになります。 " - "に設定すると無効になります。
  • -index = n - 指定されたリソースの状態に複数の汚染されたインスタンスが存在する場合、単一の汚染されたインスタンスを選択します。このフラグは、複数の汚染インスタンスが存在する場合に必要です。ほとんどの場合、リソースごとに1つの汚れたインスタンスが最大限存在するため、このフラグは安全に省略できます。
  • -lock = true - ロックがサポートされているときに状態ファイルをロックします。
  • -lock-timeout = 0s - 状態ロックを再試行する期間。
  • -module = path - 未汚染のリソースが存在するモジュールパス。デフォルトではこれがルートパスです。他のモジュールは、ピリオド区切りのリストで指定することができます。例: "foo"はモジュール "foo"を参照しますが、 "foo.bar"は "foo"モジュールの "bar"モジュールを参照します。
  • -no-color - 色付きの出力を無効にします。
  • -state = path - 状態ファイルを読み書きするためのパス。デフォルトは "terraform.tfstate"です。remote stateが使用されている場合は無視されます。
  • -state-out = path - 更新された状態ファイルを書き込むためのパス。デフォルトでは、-stateパスが使用されます。remote stateが使用されている場合は無視されます。

Command: workspace

terraform workspaceコマンドは、ワークスペースを管理するために使用されます。
このコマンドは、さらにサブコマンドのコンテナです。これらのサブコマンドは、以下にリストされています。

  • list
  • select
  • new
  • delete

Usage


Usage: terraform workspace <subcommand> [options] [args]

CLI Configuration File (.terraformrc/terraform.rc)

CLI設定ファイルは、すべてのTerraform作業ディレクトリに適用されるCLI動作のユーザごとの設定を構成します。これはインフラストラクチャの設定とは別のものです。

Location


設定(configuration)は、ホストオペレーティングシステムに依存する単一のファイルに配置されます。

  • Windowsでは、ファイルの名前をterraform.rcとし、関連するユーザーの「Application Data」ディレクトリに配置する必要があります。このディレクトリの物理的な場所は、Windowsのバージョンとシステム構成によって異なります。 $ env:PowerShellのAPPDATAを使用して、システム上の場所を探します。
  • 他のすべてのシステムでは、ファイルの名前は.terraformrc(ピリオドに注意してください)にして、関連するユーザーのホームディレクトリに直接配置する必要があります。

Windowsでは、ファイル名の拡張子を隠すWindowsエクスプローラのデフォルトの動作に注意してください。Terraformは、Windowsエクスプローラが名前をterraform.rcとして表示する場合でも、CLI設定ファイルとしてterraform.rc.txtという名前のファイルを認識しません。ファイル名を確認するには、PowerShellまたはコマンドプロンプトのdirを使用します。

Configuration File Syntax


構成ファイルでは、.tfファイルと同じHCL構文が使用されますが、属性とブロックは異なります。次の例は、一般的な構文を示しています。これらの各設定の意味については、次のセクションを参照してください。

plugin_cache_dir   = "$HOME/.terraform.d/plugin-cache"
disable_checkpoint = true

Available Settings


CLI設定ファイルでは、次の設定を行うことができます。

  • disable_checkpoint - trueに設定すると、HashCorpが提供するネットワークサービスにアクセスする必要があるアップグレードおよびセキュリティ情報のチェックを無効にします。
  • disable_checkpoint_signature - trueに設定すると、上で説明したアップグレードとセキュリティ情報のチェックが許可されますが、警告メッセージの重複排除に使用される匿名IDの使用は無効になります。
  • plugin_cache_dir - プラグインキャッシュを有効にし、プラグインキャッシュディレクトリの場所を文字列として指定します。
  • credentials - Terraform Enterpriseのプライベートモジュールレジストリで使用するクレデンシャルを提供します。これは、Terraformをコマンドラインで実行する場合にのみ必要です。 Terraform Enterpriseによって管理される実行は、プライベートモジュールに自動的にアクセスできます。

この設定は繰り返し可能なブロックです。ブロックラベルはホスト名(app.terraform.ioまたはプライベートインストールのホスト名)で、ブロック本体にトークン属性が含まれています。Terraformがそのホスト名からモジュールデータを要求するたびに、そのトークンで認証されます。

credentials "app.terraform.io" {
  token = "xxxxxx.atlasv1.zzzzzzzzzzzzz"
}

注意:資格情報のホスト名は、モジュールソースのホスト名と一致する必要があります。Terraform Enterpriseインスタンスが複数のホスト名で使用できる場合は、それらのいずれかを一貫して使用してください。(SaaSバージョンのTerraform Enterpriseは、より新しいホスト名app.terraform.ioとその履歴ホスト名atlas.hashicorp.comの両方でAPI呼び出しに応答します)

Deprecated Settings


次の設定は下位互換性のためにサポートされていますが、もはや使用を推奨しません。

  • providers - 名前付きプロバイダごとに特定のプラグインの場所を指定できる設定ブロック。このメカニズムはプラグインごとにバージョン番号を指定することができず、プラグインバージョン管理のメカニズムとは連携しないため、非推奨になっています。代わりに、プラグイン実行可能ファイルをサードパーティのプラグインディレクトリに配置します。
57
37
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
57
37