mito’s blog

IT技術メインの雑記。思い立ったが吉日。

[Ansible][Terraform]AnsibleとTerraformのModuleの違い

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