https://www.bioerrorlog.work/entry/validate-terraform-variables
https://dev.classmethod.jp/articles/terraform-precondition-postcondition/
https://dev.classmethod.jp/articles/launch-ec2-from-latest-amazon-linux2-ami-by-terraform/
cat <<-'EOF' > variables.tf
variable "instance_type" {
type = string
description = "instance_type"
validation {
condition = contains(["t2.micro", "t3.micro"], var.instance_type)
error_message = "Only micro is allowed"
}
}
EOF
cat <<-'EOF' > main.tf
terraform {
required_version = "= 1.5.7"
required_providers {
aws = {
source = "hashicorp/aws"
version = "= 4.17.0"
}
}
}
provider "aws" {
region = "ap-northeast-1"
}
data aws_ssm_parameter amzn2_ami {
name = "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2"
}
data "aws_ec2_instance_type" "instance" {
instance_type = var.instance_type
lifecycle {
postcondition {
condition = self.ebs_optimized_support == "unsupported"
error_message = "${var.instance_type} EBS optimization check fail"
}
}
}
resource "aws_instance" "instance01"{
ami = data.aws_ssm_parameter.amzn2_ami.value
instance_type = var.instance_type
key_name = "key1"
tags = {
Name = "instance01"
}
lifecycle {
precondition {
condition = data.aws_ec2_instance_type.instance.free_tier_eligible
error_message = "${var.instance_type} is not part of the AWS Free Tier"
}
}
}
EOF
cat <<-'EOF' > outputs.tf
output "aws_instance_instance01_public_ip" {
value = "${aws_instance.instance01.*.public_ip}"
}
EOF
terraform init
terraform fmt
terraform -version
export TF_VAR_instance_type=m4.large
export TF_VAR_instance_type=t3.micro
export TF_VAR_instance_type=t2.micro
terraform apply -auto-approve
terraform destroy -auto-approve