brunch

You can make anything
by writing

- C.S.Lewis -

by Master Seo Dec 03. 2019

193. 테라폼으로 VPC 생성하기


<1>  현황

신규 서비스가 생기면  2시간 걸려 VPC와 IAM 계정 생성함.

 기본 인프라 구축에 2시간이 소요된다.


문제점

신규 서비스가 여러 건 생기면 기본 인프라 제공 시간이 지연된다.


개선방향

테라폼이나 Cloudformation으로  자동화하여  30분 이내 구축해보자



<2> Tool  범위



<3>  설정 순서



<4>  API계정으로 VPC 만들기


1.  구성


리눅스 서버 (API  계정) -----  AWS (VPC 만들기)




2. 환경 구성


1)  리눅스 서버 만들기


2)  AWS에 로그인하여 AWS API계정과  API 계정에 권한 할당하기


access_key와 secret_key를 확인한다.


계정과 암호이므로 외부에 노출되지 않도록 주의해야 한다.




3) 리눅스 로그인하여 aws configure 설정한다.


[root@ip-10-0-0-32 ~]# aws configure
AWS Access Key ID [****************NYXG]:
AWS Secret Access Key [****************OFjC]:
Default region name [None]: ap-northeast-2
Default output format [None]:

[root@ip-10-0-0-32 ~]# aws s3 ls
2019-11-26 11:24:44 seo-s3.serverchk.com
2019-11-26 12:28:04 seo1-s3.serverchk.com


3.  생성하려는 VPC구성도

목표

Public, Private, DB 서브넷으로 구성된 VPC

AZ이중화

일단은  간단하게 만들어 본다.



4.  만들어야 할 것들

1)  vpc  1개 , subnet 1개

2)  igw

3)  route table



<4>  테라폼 설치

1. 최신 버전  0.12 버전

www.terraform.io/downloads.html


1) linux

wget   https://releases.hashicorp.com/terraform/0.12.18/terraform_0.12.18_linux_amd64.zip

unzip terraform_0.12.18_linux_amd64.zip

mv terraform /usr/bin

terraform -v


2) mac

$ brew install terraform

terraform version


2.  provider지정과  테라폼  초기화

[root@ip-10-0-0-32 tera]# pwd
/root/tera


1)      tera]  #  vi  aws-provider.tf


provider "aws" {

  access_key = "<ACCESS_KEY>"

  secret_key = "<SECRET_KEY>"

  region     = "ap-northeast-2"

}



2) 테라폼을 사용하기 위해서는 테라폼 초기화 작업이 필요하다.

# terraform init

[root@ip-10-0-0-32 tera]# ls -al

total 4
drwxr-xr-x 3 root root 47 Dec 2 17:20.
dr-xr-x--- 6 root root 205 Dec 2 17:16..
-rw-r--r-- 1 root root 147 Dec 2 17:18 aws-provider.tf
drwxr-xr-x 3 root root 21 Dec 2 17:20. terraform
[root@ip-10-0-0-32 tera]#


3) 리눅스 서버에  vsftp 설치해서 pem -> pub키로 변환해 key.tf 만들기

 yum install vsftpd*

/usr/sbin/vsftpd

Pem키 올리기

aws에서 ftp 허용 필요


[root@ip-10-0-0-32 tera]# chmod 700 tera1.pem

[root@ip-10-0-0-32 tera]# ssh-keygen -y -f tera1.pem >> tera1.pub


4) key.tf 파일 작성
[root@ip-10-0-0-32 tera]# more key.tf
resource "aws_key_pair" "terraform-key" {
key_name = "tera1"
public_key = "${file("./tera1.pub")}"
}


5)  terraform import로 SSH 키를 테라폼에 등록

[root@ip-10-0-0-32 tera]# terraform import aws_key_pair.terraform-key tera1


6) terraform.tfstate 파일에  public key를 직접 입력

" zzzzzzzzzzfadsasdas"


4. 리소스가 생성 가능한지 계획

terraform plan

오류 시

Error: Could not satisfy plugin requirements

Plugin reinitialization required. Please run “terraform init”.


5.  vpc 만든다

terraform apply

Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
aws_vpc.test-vpc: Creating...
aws_vpc.test-vpc: Creation complete after 1s [id=vpc-07b2035435d821020]
aws_subnet.test-subnet-c: Creating...
aws_internet_gateway.test-gateway: Creating...
aws_subnet.test-subnet-c: Creation complete after 0s [id=subnet-0d19833d9839335f1]
aws_internet_gateway.test-gateway: Creation complete after 0s [id=igw-06f4a86b059a94454]
aws_route_table.test-route-table: Creating...
aws_route_table.test-route-table: Creation complete after 1s [id=rtb-09d1f3bd8b4358921]
aws_route_table_association.my-subnet-association: Creating...
aws_route_table_association.my-subnet-association: Creation complete after 0s [id=rtbassoc-05a775a823cebc002]



6. 확인

VPC


Subnet


Route


IGW




7. 설정 파일

[root@ip-10-0-0-32 network-config]# ls

gateway.tf routes.tf terraform.tfstate vpc-subnet.tf


[root@ip-10-0-0-32 network-config]# more vpc-subnet.tf
resource "aws_vpc" "test-vpc" {
cidr_block = "10.0.0.0/16"
tags = {
Name = "test-vpc"
}
}
resource "aws_subnet" "test-subnet-c" {
vpc_id = "${aws_vpc.test-vpc.id}"
cidr_block = "10.0.1.0/24"
availability_zone = "ap-northeast-2c"
}


[root@ip-10-0-0-32 network-config]# more gateway.tf
resource "aws_internet_gateway" "test-gateway" {
vpc_id = "${aws_vpc.test-vpc.id}"
tags = {
Name = "test-gateway"
}
}


[root@ip-10-0-0-32 network-config]# more routes.tf
resource "aws_route_table" "test-route-table" {
vpc_id = "${aws_vpc.test-vpc.id}"
route {
cidr_block = "0.0.0.0/0"
gateway_id = "${aws_internet_gateway.test-gateway.id}"
}
tags = {
Name = "test-route-table"
}
}
resource "aws_route_table_association" "my-subnet-association" {
subnet_id = "${aws_subnet.test-subnet-c.id}"
route_table_id = "${aws_route_table.test-route-table.id}"
}

연관 자료

AWS CLI로  VPC 만들기 https://brunch.co.kr/@topasvga/747

AWS CLI로 서버 만들기 https://brunch.co.kr/@topasvga/872

AWS CLI로 서버 생성법  https://brunch.co.kr/@topasvga/345

테라폼으로 VPC 만들기 https://brunch.co.kr/@topasvga/780


감사합니다.

매거진의 이전글 192.(미션) Autoscaling,자동 서버 투입

매거진 선택

키워드 선택 0 / 3 0
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari