data "aws_ami" "ubuntu" { most_recent = true owners = ["099720109477"] # Canonical filter { name = "name" values = ["ubuntu/images/hvm-ssd/ubuntu-jammy-22.04-amd64-server-*"] } filter { name = "virtualization-type" values = ["hvm"] } } resource "tls_private_key" "app" { algorithm = "RSA" rsa_bits = 4096 } resource "local_file" "app_private_key" { filename = "${pathexpand("~")}/.ssh/cibello-prod-key" content = tls_private_key.app.private_key_pem file_permission = "0600" } resource "aws_key_pair" "app" { key_name = "cibello-prod-key" public_key = tls_private_key.app.public_key_openssh } resource "aws_eip" "app" { domain = "vpc" tags = { Name = "cibello-prod-ip" } } resource "aws_instance" "app" { ami = data.aws_ami.ubuntu.id instance_type = "t3.small" subnet_id = aws_subnet.public.id vpc_security_group_ids = [aws_security_group.web.id] key_name = aws_key_pair.app.key_name iam_instance_profile = aws_iam_instance_profile.app.name root_block_device { volume_size = 30 volume_type = "gp3" encrypted = true delete_on_termination = true } user_data = <<-EOF #!/bin/bash set -e apt-get update apt-get install -y ca-certificates curl gnupg git install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg chmod a+r /etc/apt/keyrings/docker.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" > /etc/apt/sources.list.d/docker.list apt-get update apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin usermod -aG docker ubuntu systemctl enable docker --now EOF tags = { Name = "cibello-prod-app" } } resource "aws_eip_association" "app" { instance_id = aws_instance.app.id allocation_id = aws_eip.app.id }