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_ami
、instance_type
、instance_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
}
}
安裝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建立的執行個體。
沒有留言:
張貼留言