今日は使い道は限定されますが意外と便利なツールterraform-bundle
の紹介です。
terraform-bundleって?
Terraformではコア部分とAWS/GCP/Azureといった各プラットフォーム固有の処理を担当する部分(プロバイダー)とで実行ファイルが分かれています。
通常、HashiCorp社により配布されているプロバイダーはterraform init
時に必要な分だけ自動でhttps://releases.hashicorp.com
からダウンロードされるようになっています。
また、サードパーティにより配布されているプロバイダーについては手動でプラグイン格納ディレクトリ(~/.terraform.d/plugins
配下など)に配置する必要があります。
これらのプロバイダーをあらかじめダウンロードしておき、Terraform本体とパッケージングするためのツールがterraform-bundle
です。
Terraform本体のソースに同梱されており、誰でも利用できるようになっています。
いつ使うの?
例えばオンプレミス上でTerraformやTerraform Enterpriseを利用する場合で、外部との接続が制限されている場合などに利用します。
また、カスタムプロバイダーの開発者であれば自身が開発したプロバイダーを配布するのに利用するといったこともあると思います。
使い方
インストール
現在はterraform-bundle
はバイナリでの配布は行われていません。
このため、Go言語の開発環境を用意した上で自前でビルドする必要があります。
Goの開発環境を用意し、以下のコマンドを実行することでインストールできます。
$ go install github.com/hashicorp/terraform/tools/terraform-bundle
これで$GOPATH/bin
配下にバイナリが作成されているはずです。適切にPATHを通す/PATHが通った場所に配置してください。
パッケージング
まず定義ファイルを用意する必要があります。
以下のような定義ファイルを作成しておきます。
ファイル名はなんでも良いですが、ここではexample.hcl
としておきます。
terraform { version = "0.11.8" } providers { vsphere = ["~> 1.8"] arukas = ["~> 1.0"] sakuracloud = ["1.6"] }
この例では、Terraform本体のバージョンが0.11.8
、バンドルするプロバイダーとしてvsphere
とarukas
、sakuracloud
を指定しています。
バンドルしたいプロバイダーはproviders
ブロック内に記載していく形です。
プロバイダーにはバージョン番号を複数指定可能で、複数指定した場合は対応するバージョンそれぞれがバンドルされることとなります。
HashiCorp社により配布されていないカスタムプロバイダーもバンドルできますが、こちらはもう一つ作業が必要です。
カスタムプロバイダーをバンドルする場合
HashiCorp社が配布しているプロバイダーについてはterraform-bundle
でパッケージングする際に自動でダウンロードしてくれますが、
カスタムプロバイダーの場合はカレントディレクトリにplugins
というディレクトリを作成してその配下にプロバイダーの実行ファイルを格納しておく必要があります。
(terraform-bundle
実行時のオプションでディレクトリの変更も可能)
この例の場合はさくらのクラウド向けプロバイダーの実行ファイルをplugins
ディレクトリに格納しておきます。
パッケージング実行
準備ができたら以下のコマンドでパッケージングします。
$ terraform-bundle package example.hcl
これでカレントディレクトリにterraform_0.11.8-bundlexxxx_darwin_amd64.zip
というような名前のファイルが作成されるはずです。
このファイルをTerraformを実行したい環境に持っていって展開するだけです。
なお、デフォルトではterraform-bundle
を実行した環境(OS/ARCH)向けにパッケージングされます。
変更する場合はオプションで-os
と-arch
を指定してください。
オンプレ版のTerraform Enterpriseで利用する場合は-os=linux -arch=amd64
と指定します。
終わりに
ということで、terraform-bundle
の紹介でした。
以上です。