ABOUT ME

Today
Yesterday
Total
  • [T102 3주차] (2) 테라폼 프로바이더(Provider)
    카테고리 없음 2023. 7. 22. 14:37
    cloudNet@ 팀의 가시다 님이 진행하는 테라폼 102 스터디 3주차 정리입니다.

    테라폼 동작의 원리

    출처:https://malwareanalysis.tistory.com/619

    테라폼 동작 순서

    테라폼은 코드를 읽어 코드가 실행가능한지 분석(terraform plan)=>
    그 후, 대상에서 지원하는 API를 사용하여 코드를 대상에 반영(terraform apply)

     

     

    테라폼 동작 원리

    테라폼 내부(아키텍처)는 테라폼 공식문서에서 설명합니다. 테라폼은 코어와 플러그인으로 구성되어 있습니다.

        코어는 테라폼 코드를 읽어 코드 문법검사와 실행 순서를 결정합니다. 실행 순서 형태를 리소스 종속성 그래프(resource dependency graph)라고 부릅니다.

        코어는 테라폼 코드 실행을 플러그인에게 요청합니다.

        플러그인은 provider 설정을 읽어 적절한 API를 호출합니다. API호출 로직은 client library에 구현합니다.

     

    ● 테라폼 프로바이더란?(Proveider)

    출처:https://docmoa.github.io/04-HashiCorp/03-Terraform/01-Information/00-introduction.html

    프로바이더는 테라폼 코어와 연동되는 플러그인으로, 각 플랫폼에서 제공하거나 누구나 개발해서 테라폼과 연결할 수 있습니다. 이런 플러그인들을 프로바이더라고 부릅니다.

    • AWS/Azure/GCP 같은 퍼블릭 IaaS 클라우드 환경 프로바이더
    • 오픈스텍, VMware 같은 프라이빗 IaaS나 VM환경 프로바이더
    • Heroku, 쿠버네티스, 람다같은 PaaS 프로바이더
    • Datadog, Fastly, Github 같은 SaaS 프로바이더

    프로바이더는 필요에 따라 인프라, 플랫폼, 서비스를 연계해서 사용하게도 가능합니다. 예를들어 앞서 인프라를 수행했다고 보고, Day2 에 쿠버네티스 연결이 필요하면 기존 설정을 확장해서 추가 리소스와 자원을 구성합니다. 그리고 그 위에 서비스가 DNS를 요구하거나 CDN을 요구하면 이런 서비스를 추가로 애드온 하게 됩니다.

    테라폼 문서 (opens new window)에보면 이미 100여개 이상의 프로바이더가 존재하고 커뮤니티의 프로바이더 까지 합치면 테라폼으로 관리가능한 코드기반 자원들은 무궁무진합니다.

     

     

    ● 실습

    -main.tf 파일 생성

    provider "aws" {
      region = "ap-southeast-1"
    }

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

    resource "aws_instance" "app_server1" {
      ami           = "ami-06b79cf2aee0d5c92"
      instance_type = "t2.micro"
    }

    resource "aws_instance" "app_server2" {
      provider      = aws.seoul
      ami           = "ami-0ea4d4b8dc1e46212"
      instance_type = "t2.micro"
    }

    -실행

    $terraform init && terraform plan
    # 실행 성공 후 AWS EC2 인스턴스가  생성됨
    $terraform apply -auto-approve 


    #
    $terraform state list
    AWS 인스턴스 2개가 생성됨

    $echo "aws_instance.app_server1.public_ip" | terraform console
    첫번째 인스턴스의 IP

    $echo "aws_instance.app_server2.public_ip" | terraform console
    두번째 인스턴스의 IP

    $aws ec2 describe-instances --filters Name=instance-state-name,Values=running --output table
    인스턴스 1 싱가포르 리전에 생성됨을 확인할 수 있음

    $aws ec2 describe-instances --filters Name=instance-state-name,Values=running --output table --region ap-southeast-1

    인스턴스 2 서울 리전에 생성됨을 확인할 수 있음



    # 삭제
    $terraform destroy -auto-approve

     

     

     

     

Designed by Tistory.