見出し画像

【106】【AWS】【Terraform】すぐに使えるEC2インスタンスの設定

この記事は terraformですぐに使えるEC2インスタンスの設定を書いた記事です。
Terraformを使って、EC2インスタンスを作成し、仮想サーバーを構築しましょう。
コード全文はページの下部にあります。

そもそもTerraformが使えない

まずVPCとサブネットを作成します

次にインターネットゲートウェイとルートテーブルを設定します

EC2インスタンスを作成します。(セキュリティグループとキーペアも作成します)

コード全文です

main.tr

terraform {
required_providers {
 aws = {
  source  = "hashicorp/aws"
  version = "~> 3.27"
 }
}
required_version = ">= 0.14.9"
}
provider "aws" {
profile = "default"
region  = "ap-northeast-1"
}
resource "aws_instance" "app_server" {
// このamiはUbuntuです
ami           = "ami-0df99b3a8349462c6"
// ami = "ami-02892a4ea9bfa2192"
instance_type = "t3.micro"
key_name      = aws_key_pair.auth.id
associate_public_ip_address = true
subnet_id = aws_subnet.public.id
vpc_security_group_ids = [aws_security_group.docker_ubuntu.id]
tags = {
 Name = "ExampleAppServerInstance"
}
}
resource "aws_key_pair" "auth" {
key_name   = var.key_name
public_key = var.public_key
}
//ストレージのサイズの変更
resource "aws_ebs_volume" "example" {
availability_zone = "ap-northeast-1a"
size              = 20
tags = {
 Name = "terraform_example_1004"
}
}
resource "aws_security_group" "docker_ubuntu" {
name = "docker_ubuntu"
vpc_id = aws_vpc.docker_ubuntu.id
ingress {
 from_port = "22"
 protocol = "tcp"
 to_port = "22"
 cidr_blocks = ["0.0.0.0/0"]
}
egress {
 from_port = 0
 protocol = "-1"
 to_port = 0
 cidr_blocks = ["0.0.0.0/0"]
}
}

route_table_public.tf

resource "aws_route_table" "public" {
 vpc_id = aws_vpc.docker_ubuntu.id
 tags = {
   Name = "docker_ubuntu_route_table_public"
 }
}
resource "aws_internet_gateway" "docker_ubuntu" {
 vpc_id = aws_vpc.docker_ubuntu.id
 tags = {
   Name = "terraform_igw_docker_ubuntu"
 }
}
//ルート
//0.0.0.0/0にigwをつなぐ
resource "aws_route" "public" {
 route_table_id = aws_route_table.public.id
 gateway_id = aws_internet_gateway.docker_ubuntu.id
 destination_cidr_block = "0.0.0.0/0"
}
//サブネットの関連付け
resource "aws_route_table_association" "public" {
 route_table_id = aws_route_table.public.id
 subnet_id = aws_subnet.public.id
}
//サブネット
resource "aws_subnet" "public" {
 cidr_block = "10.0.1.0/24"
 vpc_id = aws_vpc.docker_ubuntu.id
 //  このサブネットで起動したインスタンスに自動的に
 //  IPアドレスを割り当ててくれる
 map_public_ip_on_launch = true
 availability_zone = "ap-northeast-1a"
 tags = {
   Name = "docker_ubuntu_subnet_public_basic_1a"
 }
}

variable.tf

variable "key_name" {
 description = <<DESCRIPTION
your_key.pubを入力してください。
.pubがつく公開鍵の方です。
秘密鍵と間違えないように。
DESCRIPTION
}
variable "public_key" {
 description = <<DESCRIPTION
cat ~/.ssh/your_key.pub
で出力された値を直打ちして下さい。
(パス名のみだと、私の環境ではエラーがでました。)
DESCRIPTION
}

vpc.ft

resource "aws_vpc" "docker_ubuntu" {
 cidr_block = "10.0.0.0/16"
//  DNSサーバーによる名前解決を有効にする
 enable_dns_support = true
//  パブリックDNSホスト名を自動的に割り当てる
 enable_dns_hostnames = true
 tags = {
   Name = "docker_ubuntu"
 }
}

作成したけど接続出来ない?

参考文献

実践Terraform AWSにおけるシステム設計とベストプラクティス (技術の泉シリーズ(NextPublishing)) オンデマンド (ペーパーバック) 

Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂3版

最後に
私がブログを書く目的は、素晴らしい本や、素晴らしい方々の技術記事を知って頂きたいからです。ぜひ、上記の参考文献を見て下さい。(noteなので広告とかは一切ありません。)

現在、株式会社grabssに行くために最後の悪あがきをしています!!

過去の活動

30日間でブログ記事を100件投稿しました。
トータルの投稿数
この記事は106件目の投稿です。

よろしければ、スキボタン及びサポートお願いします。勉強の励みになります。


この記事が気に入ったらサポートをしてみませんか?