Ssoon
[T101-2주차] 02 왜 Terraform 인가? - (6) 웹 서버 클러스터 배포 본문
CloudNet@ 팀의 가시다님이 진행하는 Terraform 101 Study 2주차 정리입니다. |
ASG (Auto Scaling Group)
1. main.tf - launch configuraion 생성
- EC2 인스턴스를 어떻게 구성할 것인가 ?
data "aws_ami" "ssoon_amazonlinux2" {
most_recent = true
filter {
name = "owner-alias"
values = ["amazon"]
}
filter {
name = "name"
values = ["amzn2-ami-hvm-*-x86_64-ebs"]
}
owners = ["amazon"]
}
resource "aws_launch_configuration" "ssoon_lauch_config" {
name_prefix = "t101-ssoon_lauch_config-"
image_id = data.aws_ami.ssoon_amazonlinux2.id
instance_type = "t2.micro"
security_groups = [aws_security_group.ssoon_sg.id]
associate_public_ip_address = true
user_data = <<-EOF
#!/bin/bash
wget https://busybox.net/downloads/binaries/1.31.0-defconfig-multiarch-musl/busybox-x86_64
mv busybox-x86_64 busybox
chmod +x busybox
RZAZ=$(curl http://169.254.169.254/latest/meta-data/placement/availability-zone-id)
IID=$(curl 169.254.169.254/latest/meta-data/instance-id)
LIP=$(curl 169.254.169.254/latest/meta-data/local-ipv4)
echo "<h1>RegionAz($RZAZ) : Instance ID($IID) : Private IP($LIP) : Web Server</h1>" > index.html
nohup ./busybox httpd -f -p 80 &
EOF
lifecycle {
create_before_destroy = true
}
}
- create_before_destroy
- 기본적으로 Terraform이 원격 API 제한으로 인해 제자리(in-place)에서 업데이트할 수 없는 리소스 인수(argument)를 변경해야 하는 경우 Terraform은 대신 기존 객체(object)를 파괴한 다음 새로 구성된 인수(arguments)로 새 대체 객체(object)를 생성합니다.
- create_before_destroy meta-argument 는 이 동작을 변경하여 새 대체 객체(object)가 먼저 생성되고 대체 객체(object)가 생성된 후 이전 객체(object)가 소멸되도록 합니다.
2. main.tf - ASG 생성
resource "aws_autoscaling_group" "ssoon_asg" {
name = "ssoon_asg"
launch_configuration = aws_launch_configuration.ssoon_lauch_config.name
vpc_zone_identifier = [aws_subnet.ssoon_subnet1.id, aws_subnet.ssoon_subnet2.id]
min_size = 2
max_size = 5
tag {
key = "Name"
value = "T101_Ssoon_asg"
propagate_at_launch = true
}
}
- propagate_at_launch
- (필수) 이 ASG를 통해 시작된 Amazon EC2 인스턴스로 태그 전파 활성화
terraform state list 로 Launch configuration 과 Auto Scaling group 배포 된 것을 확인합니다.
======================================================================
Terraform Up&Running 추가내용
======================================================================
3. data.tf - subnet_ids
- ASG가 EC2 를 어느 VPC 에 배포할 지 지정
- data 소스를 사용하여 AWS 계정에서 subnet 목록을 참조
★ Data Sources
data "<PROVIDER>_<TYPE>" "<NANE>" {
[CONFIG ...]
}
- 데이터 소스를 통해 Terraform은 Terraform 외부에서 정의되거나 다른 별도의 Terraform 구성에 의해 정의되거나 기능에 의해 수정된 정보를 사용할 수 있습니다.
- PROVIDER : AWS .. 공급자
- TYPE : 사용하려는 data source 의 유형
- NAME : terraform 코드에서 이 data source 를 참조하는 데 사용할 수 있는 식별자
data.<PROVIDER>_<TYPE>.<NAME>.<ATTRIBUTE>
- data source 에서 data 를 가져오는 속성 참조 구문입니다.
=======================================================================================================
1. 기본 VPC 의 데이터를 조회합니다.
=======================================================================================================
data "aws_vpc" "myasg" {
default = true
}
=======================================================================================================
2. 해당 VPC 내 Subnet 을 조회합니다.
=======================================================================================================
data "aws_subnets" "mysubnet" {
filter {
name = "vpc-id"
values = [data.aws_vpc.myasg.id]
}
}
=======================================================================================================
3. 2번 data 소스에서 Subnet ID 를 가져옵니다.
=======================================================================================================
resource "aws_autoscaling_group" "myasg" {
launch_configuration = aws_launch_configuration.mylaunchconfig.name
vpc_zone_identifier = data.aws_subnets.mysubnet.id
'Terraform 101 Study' 카테고리의 다른 글
[T101-2주차] VPC + 보안그룹 + EC2 배포 (0) | 2022.10.25 |
---|---|
최고의(?) 클라우드 인프라 다이어그램 Brainboard (1) | 2022.10.25 |
[T101] 02 왜 Terraform 인가? - (5) 구성 가능한 웹 서버 배포 (0) | 2022.10.18 |
[T101] 02 왜 Terraform 인가? - (4) 단일 웹 서버 배포 (0) | 2022.10.18 |
[T101] 02 왜 Terraform 인가? - (3) 버전 관리 (0) | 2022.10.18 |
Comments