AnsibleとTerraformには、Moduleと呼ばれる機能があります。
ただし、名前が同じなだけで内容は異なります。
概要 | Ansible | Terraform |
---|---|---|
コードの要素 | Module タスクの単位 | Resource リソースの単位 |
再利用可能なコードの単位 | Role タスクの集合 | Module リソースの集合 |
AnsibleのModuleとTerraformのResource
どちらもリソースの構築や設定を行うコードの要素です。
- Ansible
AnsibleのModuleは、Playbookのtasksに記載するコードの単位です。
ターゲットノードに、Moduleの処理内容を実行します。
以下の例では、ローカルホストに、yumモジュールでhttpdの最新版をインストールします。
- hosts: localhost tasks: - name: Install the latest version of Apache ansible.builtin.yum: name: httpd state: latest
- Terraform
TerraformのResourceは、TFファイルに記載するコードの要素です。
Terraformで構築するリソースを記載します。
以下の例では、AWSのEC2インスタンスを、マシンイメージはUbuntu、インスタンスタイプはt3.micro、インスタンス名はHelloWorldで構築します。
resource "aws_instance" "web" { ami = data.aws_ami.ubuntu.id instance_type = "t3.micro" tags = { Name = "HelloWorld" } }
AnsibleのRoleとTerraformのModule
どちらもコードを再利用可能な形で外に切り出したものです。
プログラミングで言う関数のようなものです。
- Ansible
AnsibleのRoleは、タスクや変数ファイル、ハンドラーなどを再利用可能な形で、仕様に基づいたディレクトリやファイル構造に分割したものです。
Roleのタスクを参照することで、Roleの変数ファイル、ハンドラーなどを自動的に読み込みます。
以下の例は、再利用可能な形にしたcommonロールをPlaybook.ymlで呼び出すディレクトリ・ファイル構造です。
$ tree . ├── playbook.yml └── roles └── common ├── handlers │ └── main.yml ├── tasks │ └── main.yml └── vars └── main.yml 5 directories, 4 files
- Terraform
TerraformのModuleは、リソースを再利用可能な形で外に切り出したものです。
カレントディレクトリのTFファイルで、Moduleディレクトリ内にあるTFファイルの実行結果を参照します。
以下の例は、再利用可能な形にしたcommonモジュールをカレントディレクトリのTFファイルで呼び出すディレクトリ構造です。
$ tree . ├── modules │ └── common │ └── main.tf ├── output.tf ├── terraform.tf └── variable.tf 2 directories, 4 files