# 보통 provider.tf로 파일을 생성
# AWS Provider
provider "aws" {
region = "ap-northeast-2"
version = "~> 3.0"
}
Provider 안에서 다양한 Arguments를 가진다.
AWS resource를 다루기 위한 파일들을 다운로드 하는 역할을 한다.
# main.tf, vpc.tf 등 원하는 형태로 파일이름을 사용
# Create a VPC
resource "aws_vpc" "example" {
cidr_block = "10.0.0.0/16"
# cidr_block 이외에도 수많은 인자가 존재
}
테라폼으로 VPC를 생성하는 코드(AWS VPC를 만드는 코드)
VPC 역시 다양한 Argument와 다른 구성요소가 존재하지만, 여기서는 간단히 형태만 보고 넘어간다.
# terraform.tfstate라는 파일명을 가진다.
{
"version": 4,
"terraform_version": "0.12.24",
"serial": 3,
"lineage": "3c77XXXX-2de4-7736-1447-038974a3c187",
"outputs": {},
"resources": [
{...},
{...}
]
}
테라폼 state이다.
현재 인프라의 상태를 의미하는 것은 아니다.
state는 원격 저장소인 'backend'에도 저장될 수 있다.
스테이트 파일과 현재 인프라의 상태를 똑같이 유지하는 것이 keypoint!
resource "aws_vpc" "default" {
cidr_block = "10.0.0.0/16"
# cidr_block 이외에도 수많은 인자가 존재
}
output "vpc_id" {
value = aws_vpc.default.id
}
output "cidr_block" {
value = aws_vpc.default.cidr_block
}
테라폼 output이다.
VPC 역시 다양한 Arguement와 다른 구성요소가 존재하지만, 여기서는 간단하게 형태만 보고 넘어간다.
aws vpc 코드를 만들면, vpc ID나 cidr 값들이 생기는데 그런것들을 참조해서 vpc_id란 형태의 변수를 스테이트 파일로 저장한다.
리모트를 사용해서 재사용 할 수 있다.
module "vpc" {
source = "../_modules/vpc"
cidr_block = "10.0.0.0/16"
}
테라폼 module이다.
module은 한 번 만들어진 테라폼 코드로 같은 형태를 반복적으로 만들어낼때 주로 사용된다.
# remote는 원격 참조 개념으로 이해
data "terraform_remote_state" "vpc" {
backend = "remote"
config = {
bucket = "terraform-s3-bucket"
region = "ap-northeast-2"
key = "terraform/vpc/terraform.tfstate"
}
}
테라폼 module이다.
remote state는 key 값에 명시한 state에서 변수를 가져온다.
AWS는 기본 방화벽 솔루션으로 시큐리티 그룹으로 확인
내 클라이언트 IP가 시큐리티 그룹으로 포함 되어 있어야 접속 가능
private subnet이 아닌 public subnet인지 확인을 한 뒤에 접속 시도
public subnet인지 확인은 해당 서브넷이 연결된 라우팅 테이블 확인