Terraform 0.5.0 日本語訳(参考)

Terraform 0.5.0 日本語訳(参考) はてなブックマーク - Terraform 0.5.0 日本語訳(参考)


Terraform v0.5 がリリースされました。blog に紹介記事が上がっていましたので、例によって日本語訳を作成しました。例によって、参考程度にどうぞ。

Terraform 0.5 – HashiCorp
https://hashicorp.com/blog/terraform-0-5.html

■ Terraform 0.5

私達は Terraform 0.5 をリリースします。Terraformは安全かつ効率的にインフラの構築、連結、起動を行います。

Terraform は HashiCorp の中で現時点で最も成長しているプロジェクトであり、先月のメジャーリリースに続き、バージョン 0.5 のリリースに向けて非常に注力してきました。Terraform 0.5 では大きな機能の追加、コア部分の著しい改良、そして AWS リソースの大部分をサポートします。

Terraform 0.5 における主な機能は:

* マルチ・プロバイダ(あるいは、マルチリージョン)
* AWS 自動リトライや、AWS リソースに関する多くの機能や改良
* 基本テンプレート(Basic Templating)
* WinRM ベースのプロビジョニング
* 環境変数を Terraform 変数にセット

■ コミュニティ

機能の詳細に入る前にまず、Terraform コミュニティに感謝を表明します。Terraform コミュニティは信じられないほど速く成長しており、コミュニティによる貢献のお陰で、Terraform 0.5 のリリースに至りました。

Terraform 0.5 は 76 人のコントリビュータからのコミットが取り込まれています。皆さんの大半は、多くの時間を Terraform に対して貢献されています! この成長は単に多くの人が居るだけではなく、熱狂的とも言える貢献品質によってもたらされたのです。

更に付け加えると、Terraform には Radak Simko と Dave Cunningham という二人の新しいコミッターを迎えました。両者とも、現在ではプロジェクトの正式なメンバーです。彼らの力が無ければ、Terraform はここまで成長できなかったでしょう。

■ マルチ・プロバイダ(Multi-Provider)

Terraform 0.5 以前の大きな制約は、1つの設定ファイルで1つのプロバイダ(訳者注;プロバイダとは、AWS等のクラウドに対するリソース)上の設定しか出来なかった点です。ユースケース(使用例)として最も普及しているのは、AWS を異なったリージョンで使うために、複数回の設定をすることでした。そして各々のリージョン毎に Terraform おn設定を管理する必要があったのです。

Terraform 0.5 では、このような機能をサポートし、簡単に使えるようにしました:

# デフォルトのプロバイダ
provider "aws" {
    # ...
}

# 西海岸リージョン
provider "aws" {
    alias = "west"

    region = "us-west-2"
}

# インスタンスを西海岸リージョンで使う
resource "aws_instance" "foo" {
    provider = "aws.west"

    # ...
}

プロバイダを何回でも指定できるようになりました。その1つとして「atlas」を割り当てることもでき、全てのリソースにおける「provider」のメタ・フィールドとして参照できます。何も指定しない場合は「default」がその名称になります。

この機能はコミュニティ・メンバの Matt Good によって実装されました。

マルチ・プロバイダに関する詳細なドキュメントはこちらをご覧ください。
https://terraform.io/docs/configuration/providers.html

■ AWS 改良

2ヶ月前、HashiCorp はフルタイムで AWS 改良に取り組むため、Clint Shryock を雇いました。Terraform 4.0 では、Clint はオフィシャルな AWS SDK を使うように移行し始めました。Terraform 0.5 では、移行を終わらせています。

Terraform 0.5 には 100 人もの貢献者がおり、多くが AWS プロバイダの改良に関してでした。貢献者について付け加えると、上流の公式 AWS SDK において、AWS に対して指数関数的に API の自動リトライを行う機能が実装されました。この結果、Terraform 0.5 では AWS 機能のサポートにあたり多くの改良をもたらしました。

Terraform 0.5 では新しく 20 以上の AWS リソースをサポートし、既存のリソースに対しても多くの追加機能をサポートします。新しいリソースの詳細については、CHANGELOG をご覧ください。

Terraform 0.5 の自動リトライ機能により、Terraform 0.4 や以前のバージョンにおいて、大規模な利用者における rate limit に関する全ての問題が解消されました。rate limit エラーを受信すると、Terraform は自動的に一定期間待機してからリトライします。リトライの数は設定変更できます。

次に進む前に、あと1つ。Terraform が現在の AWS 上の、どのような API コールに対応していないかを伝えるための、自動化システムが動作するようになりました。AWS は非常に多くのサービスの集合であり、私達は最も有名なサービスに対する実装を優先しています。自動化システムによって、何が残っているか分かります。私達の目標は、すべての機能をカバーすることです。

■ テンプレーティング( Templating )

Terraform 0.5 は、他のリソースをテンプレートとして解釈し、入力する機能をサポートしました。この主な使用例は、あるリソース結果を基にして、他のリソースをプロビジョニングするスクリプトの実行です。

テンプレーティングは Terraform の新しいリソースとして扱える機能です。これは、先の使用例だけでなく、物理的に存在する(サーバ等の)何らかに対し、それらを管理対象と認識できれば、それをリソースと見なせます。しかしながら現時点では、テンプレートを使うことで、それらを論理的な何かを簡単に扱えるようにします。例を使って説明します:

# bash の初期設定スクリプト向けテンプレート
resource "template_file" "init" {
    filename = "init.tpl"

    vars {
        consul_address = "${aws_instance.consul.private_ip}"
    }
}

# ウェブサーバの作成
resource "aws_instance" "web" {
    # ...

    user_data = "${template_file.init.rendered}"
}

この「template_file」リソースで指定したファイルにおいて、任意の変数を扱えます。そのため、標準的な補完を用いて他のリソースも処理することができます。この処理結果は、他の階層下のリソースでも利用可能になります。

テンプレーティングに関する詳細なドキュメントは、こちらをお読みください。
https://terraform.io/docs/providers/template/index.html

■ WinRM

Terraform 0.5 は「remote-exec」と「file」プロビジョナーを WinRM でも使えるようになりました。これにより、Terraform によって Windows マシンの管理もしやすくなります。使い方は簡単で、既存のモデルとシームレスに扱えます:

provisioner "file" {
    source = "conf/myapp.conf"
    destination = "C:/App/myapp.conf"

    connection {
        type = "winrm"
        user = "Administrator"
        password = "${var.admin_password}"
    }
}

connectionのブロックで「type」という新しいパラメータを使うことで、どのような接続方法を使うか指定できるようになりました。標準では SSH 接続であり、従来の設定がそのまま有効になるようにしています。

WinRM に関する詳細ドキュメントはこちらをご覧ください。
https://terraform.io/docs/provisioners/connection.html

■ 環境変数を通した変数の設定

Terraform はバージョン 0.1 から環境変数をパラメータとして扱うことが出来ます。Terraform 0.5 では、これら変数をファイルやコマンドライン上のフラグで指定できるようになりました。

これらは Terraform でシークレット(訳者注:トークンやシークレットキー等、取り扱いに注意を要する情報)をファイルや環境変数で扱う上で、大きな改善をもたらします。

$ TF_VAR_image=foo terraform apply
...

環境変数に関する詳細は、こちらのドキュメントをご覧ください。
https://terraform.io/docs/configuration/variables.html

■ 結論

Terraform は、現時点における私達のプロジェクトの中で、最も成長しているプロジェクトです。私達のコミュニティが大きく成長するのと同様に、多くの大きな会社によって採用されはじめています。Terraform 0.5 は、Terraform 0.4 の安定性の上に、更なる安定性の向上や Terraform の互換性を大きく拡張するよう構築されました。

一番重要なのは、Terraform 0.5 では百以上ものプロバイダの改善が行われ、Terraform で特定のリソースが使えるようになるまで待っていた多くの皆さんに、広く使えるようになったことです。

ぜひダウンロードしてお試しください!

—-

(5/11追記)件名が”5.0″としていましたが、正しくは”0.5.0″です。修正しました。