Terraform으로 인프라의 코딩을 체험해 보자 ~ 그 ③ VPC 환경을 만들어 그 안에 EC2 인스턴스를 만들어 보자
라는 일련의 흐름을 체험했습니다.
이번에는 VPC를 만들고 그 안에 EC2 인스턴스를 시작한다는 점과 일반적으로 되어 온 구성을 만들어 보겠습니다.
전제 지식
이번, 아래와 같은
{awsのリソース名}.{リソースの名前}.id
라든지 잘 나옵니다.예. 여기서는
"${aws_vpc.test_vpc.id}"
로 test_vpc
라는 이름이 붙은 vpc 리소스의 id 를 당겨 왔습니다.resource "aws_subnet" "public-1a" {
vpc_id = "${aws_vpc.test_vpc.id}"
cidr_block = "10.0.0.0/24"
availability_zone = "ap-northeast-1a"
tags {
Name = "test_1a"
}
}
이와 같이, terrafom에서는, 다른 자원의 ID나 name등을 상술한 룰로 사용할 수가 있습니다.
조속히 만들어 보자
이번은 이제 전제를 말하는 것보다, 실제의 terraform의 파일을 보는 편이 빠르다고 생각하기 때문에 봅니다.
구성
terraform-test/
├── aws.tf
├── main.tf
├── terraform.tfstate
└── terraform.tfvars
aws.tf
terraform.tfvars
terraform.tfstate
terraform
로 인프라를 구축하면 자동으로 생성됩니다 아 ws. tf
variable "aws_access_key" {}
variable "aws_secret_key" {}
variable "region" {}
provider "aws" {
access_key = "${var.aws_access_key}"
secret_key = "${var.aws_secret_key}"
region = "${var.region}"
}
마인. tf
# VPCの設定
resource "aws_vpc" "test_vpc" {
cidr_block = "10.0.0.0/16"
instance_tenancy = "default"
tags {
Name = "test_vpc_"
}
}
## 以下サブネットの設定(各AZ毎に設定する)
resource "aws_subnet" "public-1a" {
vpc_id = "${aws_vpc.test_vpc.id}"
cidr_block = "10.0.0.0/24"
availability_zone = "ap-northeast-1a"
tags {
Name = "test_1a"
}
}
resource "aws_subnet" "public-1c" {
vpc_id = "${aws_vpc.test_vpc.id}"
cidr_block = "10.0.1.0/24"
availability_zone = "ap-northeast-1c"
tags {
Name = "test_2a"
}
}
## ゲートウェイの設定
resource "aws_internet_gateway" "igw_for_test_vpc" {
vpc_id = "${aws_vpc.test_vpc.id}"
}
## 以下ルーティングテーブルの設定
resource "aws_route_table" "public-route" {
vpc_id = "${aws_vpc.test_vpc.id}"
route {
cidr_block = "0.0.0.0/0"
gateway_id = "${aws_internet_gateway.igw_for_test_vpc.id}"
}
}
resource "aws_route_table_association" "puclic-1a" {
subnet_id = "${aws_subnet.public-1a.id}"
route_table_id = "${aws_route_table.public-route.id}"
}
resource "aws_route_table_association" "puclic-1c" {
subnet_id = "${aws_subnet.public-1c.id}"
route_table_id = "${aws_route_table.public-route.id}"
}
# セキュリティグループ
resource "aws_security_group" "test_vpc_sg" {
name = "test_vpc_sg"
description = "testing security group for test_vpc"
vpc_id = "${aws_vpc.test_vpc.id}"
ingress {
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
from_port = 443
to_port = 443
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
tags {
Name = "test_vpc"
}
}
# EC2インスタンス
resource "aws_instance" "test_rikkey" {
# Amazon Linux AMI
ami = "ami-4af5022c"
instance_type = "t2.micro"
# 予め作っておいたkey pairの名前を指定する(存在しないとエラーになります)
key_name = "test_key_pair"
vpc_security_group_ids = ["${aws_security_group.test_vpc_sg.id}"]
subnet_id = "${aws_subnet.public-1a.id}"
ebs_block_device = {
device_name = "/dev/sdf"
volume_type = "gp2"
volume_size = "30"
}
tags {
Name = "test-vpc"
}
}
# EIP
resource "aws_eip" "eip_for_test_rikkey" {
instance = "${aws_instance.test_rikkey.id}"
vpc = true
}
apply 해보자
$ terraform apply
aws_vpc.test_vpc: Refreshing state... (ID: vpc-c4dbefa0)
aws_subnet.public-1a: Refreshing state... (ID: subnet-1a18da53)
aws_internet_gateway.igw_for_test_vpc: Refreshing state... (ID: igw-3e6ca65a)
aws_subnet.public-1c: Refreshing state... (ID: subnet-15f4f34d)
aws_security_group.test_vpc_sg: Refreshing state... (ID: sg-86e993e0)
aws_route_table.public-route: Refreshing state... (ID: rtb-543ce333)
aws_route_table_association.puclic-1a: Refreshing state... (ID: rtbassoc-9bc6cefc)
aws_route_table_association.puclic-1c: Refreshing state... (ID: rtbassoc-1bded67c)
aws_instance.test_rikkey: Creating...
ami: "" => "ami-4af5022c"
associate_public_ip_address: "" => "<computed>"
availability_zone: "" => "<computed>"
ebs_block_device.#: "" => "1"
ebs_block_device.2659407853.delete_on_termination: "" => "true"
ebs_block_device.2659407853.device_name: "" => "/dev/sdf"
ebs_block_device.2659407853.encrypted: "" => "<computed>"
ebs_block_device.2659407853.iops: "" => "<computed>"
ebs_block_device.2659407853.snapshot_id: "" => "<computed>"
ebs_block_device.2659407853.volume_size: "" => "30"
ebs_block_device.2659407853.volume_type: "" => "gp2"
ephemeral_block_device.#: "" => "<computed>"
instance_state: "" => "<computed>"
instance_type: "" => "t2.micro"
ipv6_addresses.#: "" => "<computed>"
key_name: "" => "test_key_pair"
network_interface.#: "" => "<computed>"
network_interface_id: "" => "<computed>"
placement_group: "" => "<computed>"
primary_network_interface_id: "" => "<computed>"
private_dns: "" => "<computed>"
private_ip: "" => "<computed>"
public_dns: "" => "<computed>"
public_ip: "" => "<computed>"
root_block_device.#: "" => "<computed>"
security_groups.#: "" => "<computed>"
source_dest_check: "" => "true"
subnet_id: "" => "subnet-1a18da53"
tags.%: "" => "1"
tags.Name: "" => "test-vpc"
tenancy: "" => "<computed>"
vpc_security_group_ids.#: "" => "1"
vpc_security_group_ids.2953584881: "" => "sg-86e993e0"
aws_instance.test_rikkey: Still creating... (10s elapsed)
aws_instance.test_rikkey: Still creating... (20s elapsed)
aws_instance.test_rikkey: Creation complete (ID: i-00eb71e709f8b1f25)
aws_eip.eip_for_test_rikkey: Creating...
allocation_id: "" => "<computed>"
association_id: "" => "<computed>"
domain: "" => "<computed>"
instance: "" => "i-00eb71e709f8b1f25"
network_interface: "" => "<computed>"
private_ip: "" => "<computed>"
public_ip: "" => "<computed>"
vpc: "" => "true"
aws_eip.eip_for_test_rikkey: Creation complete (ID: eipalloc-8abadcb0)
Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
The state of your infrastructure has been saved to the path
below. This state is required to modify and destroy your
infrastructure, so keep it safe. To inspect the complete state
use the `terraform show` command.
State path:
좋아 보인다.
완성 된 결과를 확인하십시오.
다음 번 예고
점점 terraform의 기법이나 규칙도 익숙해 왔기 때문에,
일반적인 web서버의 구성이나, S3/SQS등의 서비스도 terraform로 만들어 갑니다.
Reference
이 문제에 관하여(Terraform으로 인프라의 코딩을 체험해 보자 ~ 그 ③ VPC 환경을 만들어 그 안에 EC2 인스턴스를 만들어 보자), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ritukiii/items/4d6f9af5e2c92421582e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)