github : https://github.com/chadness12/Terraform-101-Study-Public/tree/main/week4
도전과제
[Challenge1]
- AWS DynamoDB / S3 를 원격저장소로 사용하기
(1) s3 및 DB 생성
- AWS S3/DynamoDB 백엔드
resource "aws_s3_bucket" "tfstate"{
bucket = "leechad-tfstate"
versioning {
enabled = true
}
}
resource "aws_dynamodb_table" "terraform_state_lock" {
name= "state-lock"
hash_key = "LockID"
billing_mode = "PAY_PER_REQUEST"
attribute{
name = "LockID"
type = "S"
}
}
(2) Terraform Backend설정
terraform {
backend "s3" {
bucket = "leechad-tfstate"
key = "work2/terraform.tfstate"
region = "ap-northeast-2"
encrypt = true
dynamodb_table = "state-lock"
}
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 4.0"
}
}
}
provider "aws" {
region = "ap-northeast-2"
}
(3) Terraform init
(4) s3 확인
[Challenge2]
- 리소스를 모듈화 해보고 반복 리소스 배포해보기
- 디렉토리 구조
tree .
.
├── leechad_vpc_module
│ ├── variable.tf
│ └── vpc.tf
├── main.tf
└── provider.tf
(1) vpc와 subnet을 생성하는 모듈 - leechad_vpc_moudle
- vpc.tf
resource "aws_vpc" "vpc" {
cidr_block = var.vpc_cidr
tags = {
Name = var.vpc_name
}
}
# (a) 변수로 입력한 cidr 입력값에 따라 subnet 개수 가 결정 됩니다 - 최대 4개
resource "aws_subnet" "subnet" {
vpc_id = aws_vpc.vpc.id
count = length(var.cidr_list)
cidr_block = var.cidr_list[count.index]
availability_zone = var.az_list[count.index]
tags = {
Name = "Challange2_subnet_${var.az_list[count.index]}"
}
}
output "vpc_id" {
value = aws_vpc.vpc.id
}
- variable.tf
variable "vpc_name" {
type = string
}
variable "vpc_cidr" {
type = string
}
variable "cidr_list" {
type = list(string)
}
variable "az_list" {
default = ["ap-northeast-2a", "ap-northeast-2b", "ap-northeast-2c", "ap-northeast-2d"]
}
(2) 모듈을 반복 사용해 2개의 vcp 생성
- main.tf
module "vpc_moudle1" {
source = "./leechad_vpc_module"
vpc_name = "Challenge2_1_vpc"
vpc_cidr = "192.172.0.0/16"
cidr_list = ["192.172.0.0/24", "192.172.1.0/24"]
}
module "vpc_moudle2" {
source = "./leechad_vpc_module"
vpc_name = "Challenge2_2_vpc"
vpc_cidr = "192.173.0.0/16"
cidr_list = ["192.173.0.0/24", "192.173.1.0/24"]
}
(3) Console 확인
[Challenge3]
- 공식 모듈 사용해 보기
(1) Security Group에 대한 모듈 사용
# 개인 모듈
module "vpc_moudle" {
source = "./leechad_vpc_module"
vpc_name = "Challenge3_vpc"
vpc_cidr = "192.172.0.0/16"
cidr_list = ["192.172.0.0/24", "192.172.1.0/24"]
}
# 공식 모듈 사용
module "vote_service_sg" {
# (a) terraform-aws-modules/security-group/aws 에서 모듈을 가져와서 사용
# 링크 : https://registry.terraform.io/modules/terraform-aws-modules/security-group/aws/latest
source = "terraform-aws-modules/security-group/aws"
name = "Challange3-sg"
vpc_id = module.vpc_moudle.vpc_id
ingress_with_cidr_blocks = [
{
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = "0.0.0.0/0"
}
]
}
- (a) : terraform-aws-modules/security-group/aws 에서 모듈을 가져와서 사용
(2) Console 확인
[Challenge 4]
- 자신의 깃허브를 모듈 소스로 사용
- Challenge 2에서 사용한 모듈을 사용
- 모듈 링크 : leechad_vpc_module
(1) main.tf
module "vpc_moudle" {
source = "github.com/chadness12/Terraform-101-Study-Public/leechad_vpc_module"
vpc_name = "Challenge4_vpc"
vpc_cidr = "192.172.0.0/16"
cidr_list = ["192.172.0.0/24", "192.172.1.0/24"]
}
(2) Console 확인
'Terraform > Study' 카테고리의 다른 글
Terraform-101-Study Week7 - [워크플로] (0) | 2023.08.19 |
---|---|
Terraform-101-Study Week6 - [협업, TFC] (0) | 2023.08.13 |
Terraform-101-Study Week3 - [조건문, 함수, 프로비저너, terraform_data, moved, 프로바이더] (0) | 2023.07.22 |
Terraform-101-Study Week2 [data, Variable, local, 반복문] (0) | 2023.07.15 |