この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
Network MirrorおよびFilesystem Mirrorはバージョン0.13.2からの新機能です。
Providerのミラーを定義できる機能です。ミラーサイトからProviderをダウンロードできるようになります。これにより、ファイアウォールなどが原因でProviderのソースにアクセスができない場合でもTerraformを利用することが可能になります。
Network Mirrorなし
通常、つまりNetwork Mirrorsを使わない場合は、Providerのダウンロード元はTerraform
ブロック内のrequired_providers
のsource
値で指定します。
terraform {
required_providers {
mycloud = {
source = "mycorp/mycloud"
version = "~> 1.0"
}
}
}
上記の例だと、registry.terraform.io/mycorp/mycloud
からダウンロードしてきます。 (詳しくは こちら)
Network Mirrorを使うとどうなるか見てみましょう。
Network Mirrorあり
.terraformrc
provider_installation {
network_mirror {
url = "https://hogehoge.com/providers/"
include = ["example.com/*/*"]
}
direct {
exclude = ["example.com/*/*"]
}
}
network_mirror
ブロックを見てください。上記のように書くと、include値で指定されたsourceを持つproviderは、そのsourceからではなくurl値に書かれた場所からダウンロードされます。
また、この network_mirror
はHTTPSでurl値の場所にアクセスしに行きますが、ローカルにソースがある場合は filesystem_mirror
も利用できます。
設定は.terraformrc
ファイルで
さて、上記ミラーの設定を書くprovider_installation
ブロックですが、.terraformrc
というファイルに書きます。このファイルは、terraformコマンドを実行するディレクトリではなく、ユーザーのホームディレクトリに配置する必要があります。
※ 上記はWindows以外での場合です。Windowsの場合はterraform.rc
というファイル名にして、ユーザーの%APPDATA%
ディレクトリに配置します。
やってみる
存在しないproviderをrequireして、filesystem_mirror
を利用してローカルからダウンロードしてみます。
まずtfファイルには以下のように書いています。barが存在しないproviderです。
terraform {
required_version = "= 0.14.2"
required_providers {
aws = {
source = "hashicorp/aws"
version = "3.20.0"
}
bar = {
source = "hogehoge.com/fuga/bar"
version = "1.0.0"
}
}
}
ホームディレクトリに置くterraform.rc
を以下のように書きます。
terraform.rc
provider_installation {
filesystem_mirror {
path = "/Users/kazue.masaki/hogehoge-mirror"
include = ["hogehoge.com/*/*"]
}
direct {
exclude = ["hogehoge.com/*/*"]
}
}
filesystem_mirror.path
で指定したディレクトリ以下は以下のようにしています。HOSTNAME/NAMESPACE/TYPE/terraform-provider-TYPE_VERSION_TARGET.zip
という形式に合わせる必要があります。
$ tree ~/hogehoge-mirror/
/Users/kazue.masaki/hogehoge-mirror/
└── hogehoge.com
└── fuga
└── bar
└── terraform-provider-bar_1.0.0_darwin_amd64.zip
この状態でterraform init
すると…
$ terraform init
(略)
Initializing provider plugins...
- Finding hogehoge.com/fuga/bar versions matching "1.0.0"...
- Installing hashicorp/aws v3.20.0...
- Installed hashicorp/aws v3.20.0 (signed by HashiCorp)
- Installing hogehoge.com/fuga/bar v1.0.0...
- Installed hogehoge.com/fuga/bar v1.0.0 (unauthenticated)
(略)
ミラーからダウンロードしてインストールできたようです。
terraform providers mirror
コマンド
network_mirror
やfilesystem_mirror
を使う場合は、まずはじめに任意の場所にソースを配置する必要があります。その支援をするコマンドも存在します。
terraform providers mirror
コマンドです。
tfファイルに以下のようにawsのproviderを使うと書いた状態で、terraform providers mirror
コマンドを実行してみます。
terraform {
required_version = "= 0.14.2"
required_providers {
aws = {
source = "hashicorp/aws"
version = "3.20.0"
}
}
}
$ terraform providers mirror ~/test-mirror-dir
- Mirroring hashicorp/aws...
- Selected v3.20.0 to meet constraints 3.20.0
- Downloading package for darwin_amd64...
- Package authenticated: signed by HashiCorp
$ tree ~/test-mirror-dir/
/Users/kazue.masaki/test-mirror-dir/
└── registry.terraform.io
└── hashicorp
└── aws
├── 3.20.0.json
├── index.json
└── terraform-provider-aws_3.20.0_darwin_amd64.zip
ダウンロードできましたね。