CLOVER🍀

That was when it all began.

Terraformで使う外部モジュールが、内部でサブモジュールを使用していた場合の挙動を確認する

これは、なにをしたくて書いたもの?

Terraformを使っていると、自分でモジュールを作ることがあります。

最初は、自前のルートモジュール内にサブモジュールを作り、こんな感じで使うのだと思います。

module "my_module" {
  source = "./modules/my_module"

  ...
}

ですが、モジュール自体が外部(Terraform RegistryやGitリポジトリ)にあった時に、その中でサブモジュールを使っていた場合に
どういう挙動になるか確認したことがなかったので、1度見ておこうかな、と。

環境

今回の環境は、こちらです。

$ terraform version
Terraform v0.12.28
+ provider.mysql v1.9.0

Terraform ProviderにはMySQL Providerを使うので、この時に使うMySQLは8.0.20、サーバーは172.17.0.2で動作しているものと
します。

また、モジュールは自前のGitLabで管理することにします。GitLabのバージョンは13.1.4、サーバーは192.168.0.3で動作している
ものとします。

お題

MySQLデータベースとユーザー、権限を作成するモジュールを作り、GitLab上に保存します。この時、ユーザーと権限は
サブモジュールとして構成します。

モジュールのソースとして、汎用Gitリポジトリを使う感じですね。

Module Sources / Generic Git Repository

このモジュールおよびサブモジュールがふつうに使えるかどうかを確認してみたいと思います。

なお、今回利用するGitLabは自前でインストールしたものですが、リポジトリの種類としてはPublicリポジトリを使います。
要するに、リポジトリを参照するのに認証は不要です。

モジュールを作成する

では、最初にモジュールを作成しましょう。

最初に、ルートモジュールから。
main.tf

resource "mysql_database" "this" {
  name = var.database_name

  default_character_set = "utf8mb4"
  default_collation     = "utf8mb4_ja_0900_as_cs_ks"
}

module "user" {
  source = "./modules/user"

  database_name = mysql_database.this.name

  user_name        = var.user_name
  user_password    = var.user_password
  user_host        = var.user_host
  grant_privileges = var.grant_privileges
}

mysql_databaseリソースでデータベースを作成し、ユーザーや権限はサブモジュールの構成にしています。

Input Variables。
variables.tf

variable "database_name" {
  type = string
}

variable "user_name" {
  type = string
}

variable "user_password" {
  type = string
}

variable "user_host" {
  type    = string
  default = "%"
}

variable "grant_privileges" {
  type    = list(string)
  default = ["ALL"]
}

バージョンの指定。
versions.tf

terraform {
  required_version = ">= 0.12.28"

  required_providers {
    mysql = ">= 1.9.0"
  }
}

続いて、サブモジュールの方へ。
modules/user/main.tf

resource "mysql_user" "user" {
  user               = var.user_name
  host               = var.user_host
  plaintext_password = var.user_password
}

resource "mysql_grant" "grant" {
  user       = mysql_user.user.user
  host       = var.user_host
  database   = var.database_name
  privileges = var.grant_privileges
}

Input Variables。
modules/user/variables.tf

variable "user_name" {
  type = string
}

variable "user_password" {
  type = string
}

variable "user_host" {
  type    = string
  default = "%"
}

variable "database_name" {
  type = string
}

variable "grant_privileges" {
  type    = list(string)
  default = ["ALL"]
}

これをGitリポジトリ(GitLab)に登録して、準備は完了です。

リポジトリ名は「hello-module-git-source」とします。

モジュールを使ってみる

それでは、このモジュールを使ってみましょう。

別のディレクトリに、Terraformのリソース定義ファイルを用意します。
main.tf

terraform {
  required_version = "0.12.28"
}

provider "mysql" {
  endpoint = "172.17.0.2:3306"
  username = "root"
  password = "password"

  version = "1.9.0"
}

module "mysql_database_user" {
  source = "git::http://192.168.0.3/kazuhira/hello-module-git-source.git"

  database_name = "my_database"
  user_name     = "user"
  user_password = "password"
}

モジュールは、GitLab上のリポジトリを指すようになっています。

module "mysql_database_user" {
  source = "git::http://192.168.0.3/kazuhira/hello-module-git-source.git"

  database_name = "my_database"
  user_name     = "user"
  user_password = "password"
}

initしてapplyしてみます。

$ terraform init
$ terraform apply

特に何事もなく実行できました。

module.mysql_database_user.mysql_database.this: Creating...
module.mysql_database_user.module.user.mysql_user.user: Creating...
module.mysql_database_user.module.user.mysql_user.user: Creation complete after 0s [id=user@%]
module.mysql_database_user.mysql_database.this: Creation complete after 0s [id=my_database]
module.mysql_database_user.module.user.mysql_grant.grant: Creating...
module.mysql_database_user.module.user.mysql_grant.grant: Creation complete after 0s [id=user@%:`my_database`]

Apply complete! Resources: 3 added, 0 changed, 0 destroyed.

まあ、これでできなかったらどうしよう感はあったので、いいのですが。

どうなっている?

ここで、「.terraform」ディレクトリの中にダウンロードされたモジュールを見てみます。

$ find .terraform/modules/mysql_database_user -type f | grep -v '.git'
.terraform/modules/mysql_database_user/versions.tf
.terraform/modules/mysql_database_user/main.tf
.terraform/modules/mysql_database_user/variables.tf
.terraform/modules/mysql_database_user/modules/user/main.tf
.terraform/modules/mysql_database_user/modules/user/variables.tf

ふつうにファイルがありますね。

ドキュメントを見ても、git cloneするようなことが書かれています。

Terraform installs modules from Git repositories by running git clone, and so it will respect any local Git configuration set on your system, including credentials.

Module Sources / Generic Git Repository

こう見ると、サブモジュールの方はgit cloneされたディレクトリ内のローカルパスとして動いているような気がします。

Module Sources / Local Paths

合ってるんでしょうか?

サブモジュールを使う

興味が出たので、もうちょっと追ってみましょう。

このGitリポジトリにあるサブモジュールを直接使えるのでしょうか?

使えるようです。

Module Sources / Modules in Package Sub-directories

パスの指定方法はソースごと違いがある(Terraform Registryとそれ以外?)ようですが、Gitリポジトリならこんな感じに。
main.tf

terraform {
  required_version = "0.12.28"
}

provider "mysql" {
  endpoint = "172.17.0.2:3306"
  username = "root"
  password = "password"

  version = "1.9.0"
}

resource "mysql_database" "this" {
  name = "my_database2"
}

module "mysql_database_user" {
  source = "git::http://192.168.0.3/kazuhira/hello-module-git-source.git//modules/user"

  database_name = mysql_database.this.name
  user_name     = "user"
  user_password = "password"
}

「//」が2つ付きます。

  source = "git::http://192.168.0.3/kazuhira/hello-module-git-source.git//modules/user"

あとはinitしてapply。

$ terraform init
$ terraform apply

問題なく実行できます、と。

Terraform Registryからダウンロードした場合の形式は?

今回、Gitリポジトリからモジュールをインストールしました。この場合、git cloneしたと思われる内容が展開されていたわけですが、
Terraform Registryからインストールした場合はどうなるのでしょう?

1番使われるのは、この形態だと思うので。

今回は、内部にサブモジュールを含んでいる、AWSのSecurity Group用のモジュールで確認してみます。
あくまで、initまでの確認です。

GitHub - terraform-aws-modules/terraform-aws-security-group: Terraform module which creates EC2-VPC security groups on AWS

動かす気はないので、これくらいを用意して
main.tf

terraform {
  required_version = "0.12.28"
}

provider "aws" {
  version = "2.70.0"
}

module "security_group" {
  source = "terraform-aws-modules/security-group/aws"
  version = "3.12"
}

init。

$ terraform init

ファイルがごっそりダウンロードされてくる感じなんですね。まあ、Terraformの内部ディレクトリの話なので変わることも
あるのでしょうが、今の時点だとこうです、と。モジュールのソースをGitリポジトリにしても、Terraform Registryにしても、
同じように使えそうな雰囲気ですね。

$ find .terraform/modules/security_group -type f
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/rules.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/versions.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/LICENSE
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/.editorconfig
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/variables.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/.pre-commit-config.yaml
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/CHANGELOG.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/update_groups.sh
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/.gitignore
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/Makefile
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/.chglog/CHANGELOG.tpl.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/.chglog/config.yml
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/nfs/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/nfs/versions.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/nfs/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/nfs/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/nfs/variables.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/nfs/auto_values.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/ssh/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/ssh/versions.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/ssh/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/ssh/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/ssh/variables.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/ssh/auto_values.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/kafka/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/kafka/versions.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/kafka/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/kafka/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/kafka/variables.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/kafka/auto_values.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/ipsec-4500/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/ipsec-4500/versions.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/ipsec-4500/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/ipsec-4500/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/ipsec-4500/variables.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/ipsec-4500/auto_values.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/alertmanager/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/alertmanager/versions.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/alertmanager/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/alertmanager/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/alertmanager/variables.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/alertmanager/auto_values.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/mssql/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/mssql/versions.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/mssql/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/mssql/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/mssql/variables.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/mssql/auto_values.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/http-80/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/http-80/versions.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/http-80/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/http-80/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/http-80/variables.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/http-80/auto_values.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/https-443/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/https-443/versions.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/https-443/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/https-443/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/https-443/variables.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/https-443/auto_values.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/nomad/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/nomad/versions.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/nomad/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/nomad/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/nomad/variables.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/nomad/auto_values.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/docker-swarm/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/docker-swarm/versions.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/docker-swarm/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/docker-swarm/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/docker-swarm/variables.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/docker-swarm/auto_values.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/mysql/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/mysql/versions.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/mysql/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/mysql/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/mysql/variables.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/mysql/auto_values.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/ntp/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/ntp/versions.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/ntp/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/ntp/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/ntp/variables.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/ntp/auto_values.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/redis/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/redis/versions.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/redis/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/redis/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/redis/variables.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/redis/auto_values.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/splunk/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/splunk/versions.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/splunk/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/splunk/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/splunk/variables.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/splunk/auto_values.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/_templates/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/_templates/versions.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/_templates/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/_templates/variables.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/zipkin/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/zipkin/versions.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/zipkin/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/zipkin/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/zipkin/variables.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/zipkin/auto_values.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/http-8080/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/http-8080/versions.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/http-8080/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/http-8080/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/http-8080/variables.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/http-8080/auto_values.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/graphite-statsd/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/graphite-statsd/versions.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/graphite-statsd/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/graphite-statsd/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/graphite-statsd/variables.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/graphite-statsd/auto_values.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/kibana/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/kibana/versions.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/kibana/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/kibana/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/kibana/variables.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/kibana/auto_values.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/ipsec-500/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/ipsec-500/versions.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/ipsec-500/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/ipsec-500/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/ipsec-500/variables.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/ipsec-500/auto_values.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/storm/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/storm/versions.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/storm/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/storm/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/storm/variables.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/storm/auto_values.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/puppet/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/puppet/versions.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/puppet/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/puppet/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/puppet/variables.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/puppet/auto_values.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/web/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/web/versions.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/web/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/web/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/web/variables.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/web/auto_values.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/cassandra/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/cassandra/versions.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/cassandra/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/cassandra/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/cassandra/variables.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/cassandra/auto_values.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/rdp/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/rdp/versions.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/rdp/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/rdp/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/rdp/variables.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/rdp/auto_values.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/openvpn/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/openvpn/versions.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/openvpn/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/openvpn/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/openvpn/variables.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/openvpn/auto_values.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/logstash/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/logstash/versions.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/logstash/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/logstash/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/logstash/variables.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/logstash/auto_values.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/squid/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/squid/versions.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/squid/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/squid/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/squid/variables.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/squid/auto_values.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/prometheus/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/prometheus/versions.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/prometheus/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/prometheus/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/prometheus/variables.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/prometheus/auto_values.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/grafana/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/grafana/versions.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/grafana/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/grafana/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/grafana/variables.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/grafana/auto_values.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/memcached/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/memcached/versions.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/memcached/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/memcached/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/memcached/variables.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/memcached/auto_values.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/kubernetes-api/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/kubernetes-api/versions.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/kubernetes-api/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/kubernetes-api/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/kubernetes-api/variables.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/kubernetes-api/auto_values.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/https-8443/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/https-8443/versions.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/https-8443/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/https-8443/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/https-8443/variables.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/https-8443/auto_values.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/redshift/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/redshift/versions.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/redshift/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/redshift/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/redshift/variables.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/redshift/auto_values.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/zookeeper/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/zookeeper/versions.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/zookeeper/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/zookeeper/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/zookeeper/variables.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/zookeeper/auto_values.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/oracle-db/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/oracle-db/versions.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/oracle-db/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/oracle-db/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/oracle-db/variables.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/oracle-db/auto_values.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/winrm/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/winrm/versions.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/winrm/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/winrm/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/winrm/variables.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/winrm/auto_values.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/carbon-relay-ng/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/carbon-relay-ng/versions.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/carbon-relay-ng/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/carbon-relay-ng/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/carbon-relay-ng/variables.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/carbon-relay-ng/auto_values.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/consul/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/consul/versions.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/consul/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/consul/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/consul/variables.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/consul/auto_values.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/postgresql/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/postgresql/versions.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/postgresql/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/postgresql/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/postgresql/variables.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/postgresql/auto_values.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/ldaps/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/ldaps/versions.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/ldaps/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/ldaps/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/ldaps/variables.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/ldaps/auto_values.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/rabbitmq/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/rabbitmq/versions.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/rabbitmq/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/rabbitmq/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/rabbitmq/variables.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/rabbitmq/auto_values.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/activemq/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/activemq/versions.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/activemq/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/activemq/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/activemq/variables.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/activemq/auto_values.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/mongodb/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/mongodb/versions.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/mongodb/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/mongodb/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/mongodb/variables.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/mongodb/auto_values.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/minio/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/minio/versions.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/minio/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/minio/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/minio/variables.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/minio/auto_values.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/elasticsearch/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/elasticsearch/versions.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/elasticsearch/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/elasticsearch/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/elasticsearch/variables.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/modules/elasticsearch/auto_values.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/examples/computed/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/examples/computed/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/examples/computed/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/examples/disabled/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/examples/disabled/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/examples/disabled/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/examples/dynamic/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/examples/dynamic/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/examples/dynamic/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/examples/complete/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/examples/complete/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/examples/complete/main.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/examples/http/outputs.tf
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/examples/http/README.md
.terraform/modules/security_group/terraform-aws-security-group-3.12.0/examples/http/main.tf