AdSense

網頁

2022/1/10

Terraform 建立EC2模組 create ec2 module

Terraform 建立並使用EC2 module部署一個AWS EC2個體。


在「Terraform 建立EC2範例」中僅使用root module的main.tf來建立EC2個體,本範例則依此修改為module的形式。


範例

在專案根目錄修增一個ec2目錄,並在裡面新增一個main.tf檔。

/
├──ec2/
│  └──main.tf
└──main.tf

Root Module

把根目錄的root module main.tf的內容修改如下。新增一個module block名為services

source指向ec2目錄表示要呼叫的module位置。

instance_amiinstance_typeinstance_name三個引數為要傳給被呼叫module的輸入變數(input variables)。

main.tf

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 3.27"
    }
  }

  required_version = ">= 0.14.9"
}

provider "aws" {
  profile = "default"
  region  = "ap-northeast-1" // Tokyo
}

module "services" {
  source = "./ec2"

  instance_ami  = "ami-0e60b6d05dc38ff11"
  instance_type = "t2.micro"
  instance_name = "TerraformProvisionDemo"
}


Child Module

把原本在root module main.tf中的EC2 resource移到ec2/main.tf中並修改如下。新增三個variable block分別對應services module的輸入變數並把resouce的屬性值改帶入variable的值。

ec2/main.tf

variable "instance_ami" {
  description = "ec2 instance ami."
  type        = string
}

variable "instance_type" {
  description = "ec2 instance type"
  type        = string
  default     = "t2.micro"
}

variable "instance_name" {
  description = "ec2 instance name"
  type        = string
}

resource "aws_instance" "app_server" {
  ami           = var.instance_ami
  instance_type = var.instance_type

  tags = {
    Name = var.instance_name
  }
}

github


安裝module

只要新增、修改、刪除module block都必須重新執行terraform init來初始化terraform使其安裝module。如果沒重新初始化而直接執行terraform plan會出現Error: Module not installed錯誤。

~/../terraform-demo$ terraform plan
╷
│ Error: Module not installed
│
│   on main.tf line 1:
│    1: module "services" {
│
│ This module is not yet installed. Run "terraform init" to install all modules
│ required by this configuration.


執行

輸入terraform apply執行計畫。

執行完後可在AWS console的EC2服務檢視instance,可看到透過Terraform建立的執行個體。




沒有留言:

AdSense