ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [T102 2주차] (2) 테라폼의 기본 문법(스터디 실습 (VPC + 보안그룹 + EC2 배포)
    테라폼(Terraform) 스터디 2023. 7. 15. 22:01
    cloudNet@ 팀의 가시다 님이 진행하는 테라폼 102 스터디 2주차 정리입니다.

    1. VPC 배포 : vpc.tf ( 테라폼 파일생성)

    provider "aws" {
      region  = "ap-northeast-2"
    }

    resource "aws_vpc" "myvpc" {
      cidr_block       = "10.10.0.0/16"

      tags = {
        Name = "t101-study"
      }
    }

    테라폼 초기화 & 실행계획 & 적용

     
    terraform init && terraform plan && terraform apply -auto-approve
    cs

     

    VPC 생성완료

    #결과

    vpc.tf 에서정의한 변수로 VPC 생성

     

     

    2. 보안그룹 생성 및 배포: sg.tf ( 테라폼 파일생성)

    resource "aws_security_group" "mysg" {
      vpc_id      = aws_vpc.myvpc.id
      name        = "T101 SG"
      description = "T101 Study SG"
    }

    resource "aws_security_group_rule" "mysginbound" {
      type              = "ingress"
      from_port         = 80
      to_port           = 80
      protocol          = "tcp"
      cidr_blocks       = ["0.0.0.0/0"]
      security_group_id = aws_security_group.mysg.id
    }

    resource "aws_security_group_rule" "mysgoutbound" {
      type              = "egress"
      from_port         = 0
      to_port           = 0
      protocol          = "-1"
      cidr_blocks       = ["0.0.0.0/0"]
      security_group_id = aws_security_group.mysg.id
    }

     

     

    3. :EC2 생성: ec2.tf 파일 생성 ( 테라폼 파일생성)

    data "aws_ami" "my_amazonlinux2" {
      most_recent = true
      filter {
        name   = "owner-alias"
        values = ["amazon"]
      }

      filter {
        name   = "name"
        values = ["amzn2-ami-hvm-*-x86_64-ebs"]
      }

      owners = ["amazon"]
    }

    resource "aws_instance" "myec2" {

      depends_on = [
        aws_internet_gateway.myigw
      ]

      ami                         = data.aws_ami.my_amazonlinux2.id
      associate_public_ip_address = true
      instance_type               = "t2.micro"
      vpc_security_group_ids      = ["${aws_security_group.mysg.id}"]
      subnet_id                   = aws_subnet.mysubnet1.id

      user_data = <<-EOF
                  #!/bin/bash
                  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

      user_data_replace_on_change = true

      tags = {
        Name = "t101-myec2"
      }
    }

    output "myec2_public_ip" {
      value       = aws_instance.myec2.public_ip
      description = "The public IP of the Instance"
    }

    테라폼 초기화 & 실행계획 & 적용( sg.tf &ec2.tf 한번에 실행)

     
    terraform init && terraform plan && terraform apply -auto-approve
    cs

     

     

    #결과 =>EC2 생성 확인 

    AWS 콘솔에서 확인

    • 삭제(실습으로 만들어 둔 AWS 리소스 삭제):
    terraform destroy -auto-approve

     

Designed by Tistory.