Terraformでファイルを圧縮するにはarchive_file
を使って、ファイルを圧縮します.
対応している圧縮フォーマットはzip形式のみのようです.
https://www.terraform.io/docs/providers/archive/d/archive_file.html
TL; DR
準備
- macOS ... 10.13.4
- Terraform ... v0.11.7
今回の検証に使ったソースコードはリポジトリにコミットしてあります.
https://github.com/corrupt952/survey/tree/master/terraform/archive-file
単一ファイルを圧縮する
単一ファイルを圧縮する場合は、source_file
にファイルのパスを指定します.
data "archive_file" "archive_file" { type = "zip" source_file = "${path.module}/data.tf" output_path = "${path.module}/dist/archive_file.zip" }
作成されたzipファイルをMacのアーカイブユーティリティで展開すると、ファイルが直接展開されます.
ディレクトリを指定して圧縮してみる
ディレクトリを指定して圧縮する場合は、source_dir
にディレクトリのパスを指定します.
data "archive_file" "archive_dir" { type = "zip" source_dir = "${path.module}/archive_dir" output_path = "${path.module}/dist/archive_dir.zip" }
作成されたzipファイルをMacのアーカイブユーティリティで展開すると、
ディレクトリ構造を維持して展開されますが、ディレクトリ内に単一ファイルしかない場合は異なります.
ディレクトリ内に単一ファイルしかない場合は、単一ファイルを圧縮するで書いたのと同様にファイルが直接展開されます.
Terraformコード内でファイル内容を指定する
Terraformコード内に直接ファイル内容をsource
ブロックを作り、filename
とcontent
を指定します.
data "archive_file" "archive_sources" { type = "zip" output_path = "${path.module}/dist/archive_sources.zip" source { filename = "README.md" content = "# Archive sources" } source { filename = "content.txt" content = "content" } }
こちらもsource
を単数、複数指定した場合の展開の挙動は、ディレクトリ指定した時と同じです.