Terraformの「モジュール」という単語が指すものを整理する
Terraform の基本的な概念である「モジュール」だが、コンテキストによって指すものが異なる。
特に初学者は混乱しやすいので整理しておきたい。
要約
大きくは次の2つ。
- module block
- 再利用可能な設定要素としての module
この中で 2.) がコンテキストによってさまざまな呼ばれ方をする。
"reusable configuration components" としての module, re-usable modules
cf. https://developer.hashicorp.com/terraform/intro
cf. https://developer.hashicorp.com/terraform/language/meta-arguments/module-providers
cf. https://developer.hashicorp.com/terraform/language/modules/develop/publish
公開モジュールとローカルモジュール
cf. https://developer.hashicorp.com/terraform/intro/use-cases
cf. https://developer.hashicorp.com/terraform/intro/terraform-editions
cf. https://developer.hashicorp.com/terraform/intro/phases/adopt
Published modules
cf. https://developer.hashicorp.com/terraform/language/modules/develop/publish
module block
cf. https://developer.hashicorp.com/terraform/intro/phases/adopt
cf. https://developer.hashicorp.com/terraform/language/modules
cf. https://developer.hashicorp.com/terraform/language/modules/syntax
cf. https://developer.hashicorp.com/terraform/language/modules/sources
cf. https://developer.hashicorp.com/terraform/language/meta-arguments/depends_on
root module と child modules, Published Module
cf. https://developer.hashicorp.com/terraform/language/modules
cf. https://developer.hashicorp.com/terraform/language/meta-arguments/module-providers
cf. https://developer.hashicorp.com/terraform/language/meta-arguments/module-providers
cf. https://developer.hashicorp.com/terraform/language/meta-arguments/depends_on
cf. https://developer.hashicorp.com/terraform/language/meta-arguments/for_each
cf. https://developer.hashicorp.com/terraform/language/modules/develop/structure
parent module
cf. https://developer.hashicorp.com/terraform/language/meta-arguments/module-providers
nested module, internal modules
cf. https://developer.hashicorp.com/terraform/language/modules/develop/structure
モジュール構造の文脈で出てくる
Nested modules should exist under the modules/ subdirectory.
Any nested module with a README.md is considered usable by an external user. If a README doesn't exist, it is considered for internal use only.
Nested modules should be used to split complex behavior into multiple small modules that advanced users can carefully pick and choose.
If a repository or package contains multiple nested modules, they should ideally be composable by the caller, rather than calling directly to each other and creating a deeply-nested tree of modules.
submodules
cf. https://developer.hashicorp.com/terraform/language/modules/develop/structure
descendant modules
cf. https://developer.hashicorp.com/terraform/language/modules/develop/providers
shared module
cf. https://developer.hashicorp.com/terraform/language/modules/develop/composition
Data-only Modules
cf. https://developer.hashicorp.com/terraform/language/modules/develop/composition
shim module
cf. https://developer.hashicorp.com/terraform/language/modules/develop/refactoring
private modules
cf. https://developer.hashicorp.com/terraform/language/modules/develop/refactoring
関連
module registry
cf. https://developer.hashicorp.com/terraform/intro/phases/scale
module sources
cf. https://developer.hashicorp.com/terraform/language/modules
Developing Modules
cf. https://developer.hashicorp.com/terraform/language/modules
Registry modules
cf. https://developer.hashicorp.com/terraform/language/modules/sources
module call, calling module
cf. https://developer.hashicorp.com/terraform/language/meta-arguments/module-providers
cf. https://developer.hashicorp.com/terraform/language/meta-arguments/depends_on
module dependencies
cf. https://developer.hashicorp.com/terraform/language/meta-arguments/depends_on
module structure
cf. https://developer.hashicorp.com/terraform/language/modules/develop/structure
Module repositories
cf. https://developer.hashicorp.com/terraform/language/style
minimal module, simple module
complex module
cf. https://developer.hashicorp.com/terraform/language/modules/develop/structure
Module Composition
cf. https://developer.hashicorp.com/terraform/language/modules/develop/composition