Terraform (AWS) sprint

cch_chan·2022년 4월 18일
0

AWS

목록 보기
4/5

Prerequisites (mac 기준)

terraform CLI 설치

teraform -install-autocoplete

AWS CLI 설치

curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip"
unzip awscli-bundle.zip
sudo ./awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws

IAM 본인 인증 환경변수 설정하기

export AWS_ACCESS_KEY_ID = "<YOUR_AWS_ACCESS_KEY_ID>"
export AWS_SECRET_ACCESS_KEY="<YOUR_AWS_SECRET_ACCESS_KEY>"
export AWS_DEFAULT_REGION="<YOUR_AWS_DEFAULT_REGION>"

기본 명령어

인프라 구축

  • main.tf 작성
  • terraform init 디렉토리를 초기화
    새 구성을 생성하거나 기존 구성을 체크아웃할때 사용
  • terraform plan 생성이 가능한지 확인 바뀐 코드 확인
  • terraform apply 인프라 생성

인프라 변경

  • main.tf 수정
  • terraform apply 기존 상태파일에 저장된 ec2를 삭제하고 변경된 인프라 생성 backend의 .tfstate 저장됨

인프라 삭제

  • terraform destroy 해당 코드 설정으로 생성한 모든 리소스 삭제
    Terraform plan -destroy 삭제 플렌 확인도 가능

구성형식지정 및 유효성검사

  • terraform fmt 구성을 포맷
  • terraform validate 구성이 구문적으로 유효하고 내부적 일관성이 있는지 확인
    유효하면 Success! 반환

상태 검사

  • terraform show 현재 상태 검사

인프라 가져오기
terraform import aws_instance.web i-12345678
aws_instance.web는 EC2 인스턴스에 지정하는 이름
i-12345678는 AWS에서 만든 인스턴스 ID
i-12345678 인스턴스를 aws_instance.web라는 이름으로 가져오겠다는 뜻

입력변수 정의

  • 인스턴스 이름을 정의하는 변수 추가 variables.tf
variable "instance_name" {
  description = "Value of the Name tag for the EC2 instance"
  type        = string
  default     = "ExampleAppServerInstance"
}
  • 이름을 지정해주는 태그 추가
tags = {
    Name = var.instance_name
  }
  • terraform apply -var "instance_name=AnotherName" 원하는 이름으로 변경

Sprint Full Stack 애플리케이션 구성


IaC 코드를 작성하려면 먼저 AWS Management Console을 이용해 먼저 최종 인프라 상태를 만들어놓고, 잘 작동하는지 확인한 다음, 이를 해당하는 리소스를 하나씩 코드로 옮기는 방법을 사용하는 방식을 사용
모든 리소스를 만들 때에는 반드시 이름을 붙여놓도록 합시다.
STEP 1: DB 인스턴스에 사용할 Amazon VPC 생성

  • VPC 및 서브넷 생성
  • VPC 보안 그룹 생성
    • 퍼블릭 웹 서버가 사용할 VPC 보안 그룹을 만들어야 합니다.
    • 프라이빗 DB 웹 서버가 사용할 VPC 보안 그룹을 만들어야 합니다.
  • DB 서브넷 그룹 생성
    RDS 인스턴스가 사용할 VPC 서브넷 그룹을 만들어야 합니다.

자습서 : https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/CHAP_Tutorials.WebServerDB.CreateVPC.html

STEP 2: EC2 인스턴스 생성
제시 사양

  • AMI: Ubuntu Server 18
    인스턴스 타입: t2.micro
    사용자 데이터
#!/bin/bash
echo "Hello, World" > index.html
nohub busybox httpd -f -p ${var.server_port} &

키 페어: 수동으로 만들고 EC2에 할당합니다.

STEP 3: DB 인스턴스 생성
자습서에 표시된 사양대로 RDS 인스턴스를 생성합니다.
자습서 : https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/CHAP_Tutorials.WebServerDB.CreateDBInstance.html

STEP 4: 애플리케이션 로드 밸런서 및 Auto Scaling Group 적용
Auto Scaling Group은 최소 2개, 최대 10개로 설정해놓습니다.

  • 애플리케이션 로드 밸런서 생성
  • 오토스케일링 적용

IaC 작성

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/lb
테라폼 tf문법에 맞춰서 콘솔로 만든것을 재현

Error 해결

  • ec2 dns 안생겨서 인터넷 연결 안되는 문제
    public subnet에 서브넷설정에서 퍼블릭 ipv4 주소 자동할당 체크 필요
    (안해주면 ec2에 dns가 안달림)

  • 로드밸런서 Unhealthy -> healthy

    1. 로드밸런서와 대상그룹을 연결
    2. 사용자데이터를 넣어둬도 대상그룹에서 언헬시가 떠서 직접 ssh에서 들어가서 코드를 입력하니 healshy로 변경
echo "Hello, World" > index.html
sudo busybox httpd -f -p 80 &
  • Error: error creating route: one of carrier_gateway_id, egress_only_gateway_id, gateway_id, instance_id, local_gateway_id, nat_gateway_id, network_interface_id, transit_gateway_id, vpc_endpoint_id, vpc_peering_connection_id must be specified
    route table cider를 굳이 적어주지 않아도됨 (자동으로 들어감)
profile
꾸준히 새로운 기술을 배워나가는중입니다.

0개의 댓글