provisioning-2/modules/ec2/main.tf

99 lines
3.1 KiB
Terraform
Raw Normal View History

2025-07-03 17:09:15 +09:00
# ---------------------------
# EC2 Keypairの設定
# ---------------------------
# 秘密鍵のアルゴリズム設定
resource "tls_private_key" "private_key" {
algorithm = "RSA"
rsa_bits = 2048
}
# 生成するkeypair秘密鍵と公開鍵のパスを指定
locals {
public_key_file = "${path.root}/.keypair/${var.name_prefix}${var.env}-${var.key_name}.id_rsa.pub"
private_key_file = "${path.root}/.keypair/${var.name_prefix}${var.env}-${var.key_name}.id_rsa"
}
# 鍵の生成
resource "local_file" "private_key_pem" {
filename = local.private_key_file
content = tls_private_key.private_key.private_key_pem
}
# 公開鍵をAWSのkeypairにインポート
resource "aws_key_pair" "key_pair" {
key_name = "${var.name_prefix}${var.env}-${var.key_name}"
public_key = tls_private_key.private_key.public_key_openssh
}
# ---------------------------
# EC2 インスタンス
# ---------------------------
# Amazon Linux2023のAMIを取得
data "aws_ssm_parameter" "amazon_linux2023" {
name = "/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64"
}
# ネットワークインターフェイスの作成
resource "aws_network_interface" "ni_web1" {
subnet_id = var.aws_subnet_public_1a_id
private_ips = [var.web1_private_ip]
# セキュリティグループの指定
security_groups = [var.ec2_sg_id]
tags = {
Name = "${var.name_prefix}${var.env}-${var.ni_web1_name}"
}
}
resource "aws_network_interface" "ni_web2" {
subnet_id = var.aws_subnet_public_1c_id
private_ips = [var.web2_private_ip]
# セキュリティグループの指定
security_groups = [var.ec2_sg_id]
tags = {
Name = "${var.name_prefix}${var.env}-${var.ni_web2_name}"
}
}
# EC2インスタンスの作成
resource "aws_instance" "ec2_web1" {
# AMIの指定
ami = data.aws_ssm_parameter.amazon_linux2023.value
# インスタンスタイプの指定
instance_type = "t3.micro"
# アベイラビリティーゾーンの指定
availability_zone = "ap-northeast-1a"
# ネットワークインターフェイスの指定
network_interface {
network_interface_id = aws_network_interface.ni_web1.id
device_index = 0
}
# キーペアの指定
key_name = aws_key_pair.key_pair.key_name
# user dataの指定Wordpressのインストール
user_data = file("${path.module}/install_wordpress.sh")
tags = {
Name = "${var.name_prefix}${var.env}-${var.ec2_web1_name}"
}
}
resource "aws_instance" "ec2_web2" {
# AMIの指定
ami = data.aws_ssm_parameter.amazon_linux2023.value
# インスタンスタイプの指定
instance_type = "t3.micro"
# アベイラビリティーゾーンの指定
availability_zone = "ap-northeast-1c"
# ネットワークインターフェイスの指定
network_interface {
network_interface_id = aws_network_interface.ni_web2.id
device_index = 0
}
# キーペアの指定
key_name = aws_key_pair.key_pair.key_name
# user dataの指定Wordpressのインストール
user_data = file("${path.module}/install_wordpress.sh")
tags = {
Name = "${var.name_prefix}${var.env}-${var.ec2_web2_name}"
}
}