BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース HashiCorp Terraformに簡潔な差分フォーマッターと機密データの難読化が加わる

HashiCorp Terraformに簡潔な差分フォーマッターと機密データの難読化が加わる

原文(投稿日:2021/02/09)へのリンク

HashicorpはTerraform 0.14を一般向け提供としてリリースした。このリリースでは、出力を変更中の要素のみに制限する新しい簡潔なdiff形式が導入されている。その他、機密データを非表示にする機能、プロバイダーの依存関係のロックファイルを生成する機能が改善されている。

簡潔なdiff形式は新しい実験的なものである。デフォルトでは、Terraformがこれから行う変更を理解する助けとなるように設計されている。terraform planterraform applyterraform show <planfile>で使用されるレンダリングされた差分が更新され、プランファイル内の変更されていない無関係なファイルが非表示になる。各親スコープの最後に、非表示の要素の数が表示される。

 # test_resource.foo will be updated in-place
  ~ resource "test_resource" "foo" {
        id       = "foo_123"
      ~ checksum = 28987129 -> (known after apply)
      - mode     = "test" -> null
        name     = "Foo Test"
        tags     = []
      ~ totals   = {
          - "bar" = 5 -> null
          + "baz" = 5
            # (2 unchanged elements hidden)
        }
      ~ values   = [
          - "alpha",
          - "gamma",
          + "alpaca",
          + "goblin",
          + "zephyr",
            # (23 unchanged elements hidden)
        ]
        # (5 unchanged attributes hidden)
				
        # (3 unchanged blocks hidden)
    }

これらの変更により、すべての識別フィールド(idnametags)が常に表示される。プリミティブ(stringnumberbool)を使用すると、フィールドは、変更、追加、削除された場合にのみ表示される。mapsetobjectlisttupleタイプでは、追加あるいは削除された要素のみが表示される。

このリリースでは、入力変数とモジュール出力をセンシティブとして定義できるようになった。これにより、TerraformはCLI出力からの値を編集する。これは、ロギングやバージョン管理などのTerraform出力をそれを利用するシステムへ晒されることを防ぐためである。変数をセンシティブとして定義するには、sensitive引数をtrueに設定する。

variable "user_information" {
  type = object({
    name    = string
    address = string
  })
  sensitive = true
}

resource "some_resource" "a" {
  name    = var.user_information.name
  address = var.user_information.address
}

これにより、planの値が難読化され、出力にapplyされる。

Terraform will perform the following actions:

  # some_resource.a will be created
  + resource "some_resource" "a" {
      + name    = (sensitive)
      + address = (sensitive)
    }

Plan: 1 to add, 0 to change, 0 to destroy.

これは、プランの値を難読化するだけであることに注意してください。そのままの状態で記録される。これは、状態にアクセスできる人なら誰でも機密データを見ることができることを意味する。状態の機密データを最適に処理する方法の詳細については、Terraformのドキュメントを参照してください。

このリリースには、terraform initの実行時に自動的に生成される依存関係ロックファイルも含まれている。ロックファイルは現在、プロバイダーに焦点を合わせている。Terraform 0.13以降、顧客が管理するリモートレジストリ、あるいはサードパーティのリモートレジストリからプロバイダーをインストールできる。この新しいロックファイルは、ワークフローを以前の実行から複製できるようにするのに役立つ。そのため、生成されたロックファイルをソース管理にコミットすることをお勧めする。新しいプロバイダーへのアップグレードは、terraform init -upgradeで実行できる。

Hashicorpは、当面の間、状態ファイルの上位互換性も約束している。Terraform 0.14.0では、Terraformの将来のバージョンと状態ファイルを共有できるようになる。ただし、新しい状態ファイル形式が必要な場合、将来のリリースでこれを変更する必要があるかもしれないことが注記されている。

詳細については、Terraformの変更ログを参照してください。これらの新機能を含む形で、HashiCorp Learnチュートリアルも更新されている。このリリースは、Terraformサイトからダウンロードできる。

この記事に星をつける

おすすめ度
スタイル

BT