Linuxの作業環境が欲しくて作成した。
Terraformコード例
provider.tf
tfstateを保存するためのS3バケットを事前に作成しておく必要があります。手動でざっと作ればOKです。
provider "aws" {
region = "ap-northeast-1"
}
terraform {
required_version = "1.12.2"
required_providers {
aws = {
source = "hashicorp/aws"
version = "6.9.0"
}
}
backend "s3" {
bucket = "terraform-state"
key = "terraform.tfstate"
region = "ap-northeast-1"
encrypt = true
}
}
vpc.tf
VPC、サブネット、インターネットゲートウェイなどの作成。
# VPCの作成
resource "aws_vpc" "main" {
cidr_block = "10.10.0.0/16"
enable_dns_hostnames = true
enable_dns_support = true
tags = {
Name = "main-vpc"
}
}
# インターネットゲートウェイの作成
resource "aws_internet_gateway" "main" {
vpc_id = aws_vpc.main.id
tags = {
Name = "main-igw"
}
}
# パブリックサブネットの作成
resource "aws_subnet" "public" {
vpc_id = aws_vpc.main.id
cidr_block = "10.10.32.0/24"
availability_zone = "ap-northeast-1a"
map_public_ip_on_launch = true
tags = {
Name = "public-subnet"
Type = "Public"
}
}
# パブリック用ルートテーブルの作成
resource "aws_route_table" "public" {
vpc_id = aws_vpc.main.id
route {
cidr_block = "0.0.0.0/0"
gateway_id = aws_internet_gateway.main.id
}
tags = {
Name = "public-route-table"
}
}
# パブリックサブネットとルートテーブルの関連付け
resource "aws_route_table_association" "public" {
subnet_id = aws_subnet.public.id
route_table_id = aws_route_table.public.id
}
# 出力値の定義
output "vpc_id" {
description = "VPCのID"
value = aws_vpc.main.id
}
output "public_subnet_id" {
description = "パブリックサブネットのID"
value = aws_subnet.public.id
}
output "internet_gateway_id" {
description = "インターネットゲートウェイのID"
value = aws_internet_gateway.main.id
}
output "public_route_table_id" {
description = "パブリックルートテーブルのID"
value = aws_route_table.public.id
}
EC2.tf
EC2本体を作成するコード。公開鍵は自身のものに置き換える。
インスタンスを使用しないときはシャットダウンしておく想定。お金がかかるので。
# 最新のUbuntu LTS AMIを取得
data "aws_ami" "ubuntu" {
most_recent = true
owners = ["099720109477"] # Canonical
filter {
name = "name"
values = ["ubuntu/images/hvm-ssd/ubuntu-*-amd64-server-*"]
}
filter {
name = "virtualization-type"
values = ["hvm"]
}
filter {
name = "state"
values = ["available"]
}
}
# SSH用セキュリティグループの作成
resource "aws_security_group" "ssh" {
name_prefix = "ssh-sg"
description = "SSH access security group"
vpc_id = aws_vpc.main.id
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
description = "SSH access"
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
description = "All outbound traffic"
}
tags = {
Name = "ssh-security-group"
}
}
# キーペアの作成(事前にキーペアを作成している場合は、このリソースを削除して既存のキーペア名を指定してください)
resource "aws_key_pair" "main" {
key_name = "main-key"
public_key = file("~/.ssh/id_ed25519.pub") # 事前にSSHキーペアを生成しておく必要があります
tags = {
Name = "main-key-pair"
}
}
# EC2インスタンスの作成
resource "aws_instance" "ubuntu" {
ami = data.aws_ami.ubuntu.id
instance_type = "t3.micro"
key_name = aws_key_pair.main.key_name
vpc_security_group_ids = [aws_security_group.ssh.id]
subnet_id = aws_subnet.public.id
# ルートボリュームの設定
root_block_device {
volume_type = "gp3"
volume_size = 8
encrypted = true
}
user_data_base64 = base64encode(<<-EOF
#!/bin/bash
apt-get update
apt-get upgrade -y
EOF
)
tags = {
Name = "php-practice"
OS = "Ubuntu"
}
その他
-
私はAWS CloudShellからEC2インスタンスにログインしてます
-
ubuntuの場合は初期の一般ユーザはubuntu。下記SSHログインコマンド
ssh 10.0.0.100 -l ubuntu