ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Terraform] CDKTF Docker Provisioning Demo
    DevOps/Terraform 2022. 11. 29. 13:07

    테라폼 공식 홈페이지에 제공되는 CDKTF 기반 Docker Provisioning

     

     

    Docker Install

    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
     echo \
      "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
      $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
      sudo apt-get update
    sudo apt-get install docker-ce docker-ce-cli containerd.io
    
    # 설치 확인
    docker -v
    
    # 접속 사용자 Docker 권한 추가
    sudo usermod -aG docker $USER

     

    Create Project 

    # cdktf-docker 폴더 생성 및 이동
    mkdir learn-cdktf-docker
     cd learn-cdktf-docker

     

    사용할려는 언어를 지정해야 한다.

    각 언어를 사용하기 위해선 로컬에 해당  프로그래밍 언어가 설치되어 있어야 한다.

    # TypeScript
    cdktf init --template=typescript --local
    
    # Python
    cdktf init --template=python --local
    
    # Go
    cdktf init --template=go --local
    
    # C#
    cdktf init --template=csharp --local
    
    # Java
    cdktf init --template=java --local

     

     

    파이썬을 사용하기 위해 파이썬 설치

     

    버전 필수 사항은 Python 3.7 이상, pipenv 5.29 이상을 요구하고 있음으로 버전에 유의하여 설치해야한다.

    sudo add-apt-repository ppa:deadsnakes/ppa
    sudo apt update 
    sudo apt install python3.11
    sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 2
    
    sudo apt install pip3
    
    PYTHON_BIN_PATH="$(python3 -m site --user-base)/bin"
    PATH="$PATH:$PYTHON_BIN_PATH"
    
    sudo apt install pipenv

    빌드 언어 지정 

    Python을 사용

    cdktf init --template=python --local

     

    Docker Provider 설치 

    pipenv install cdktf-cdktf-provider-docker
    cdktf provider add kreuzwerker/docker

     

    Python 기반 Code 작성

    기존의 main.py 파일은 삭제한 후 아래 코드로 새로 main.py 생성

    main.py

    #!/usr/bin/env python
    
    from constructs import Construct
    from cdktf import App, TerraformStack
    from cdktf_cdktf_provider_docker.image import Image
    from cdktf_cdktf_provider_docker.container import Container
    from cdktf_cdktf_provider_docker.provider import DockerProvider
    
    
    class MyStack(TerraformStack):
        def __init__(self, scope: Construct, ns: str):
            super().__init__(scope, ns)
    
            DockerProvider(self, 'docker')
    
            docker_image = Image(self, 'nginxImage',
                name='nginx:latest',
                keep_locally=False)
    
            Container(self, 'nginxContainer',
                name='tutorial',
                image=docker_image.name,
                ports=[{
                    'internal': 80,
                    'external': 8000
                }])
    
    
    app = App()
    MyStack(app, "learn-cdktf-docker")
    
    app.synth()

    위의 코드는 아래 HCL문법과 동일한 구성을 가지고 있다.

    resource "docker_image" "nginx" {
      name         = "nginx:latest"
      keep_locally = false
    }
    
    resource "docker_container" "nginx" {
      image = docker_image.nginx.latest
      name  = "tutorial"
      ports {
        internal = 80
        external = 8000
      }
    }

     

    Deploy Container

    cdktf deploy

    Plan 된 내용에서 Approve를 하여 리소스를 생성한다.

    옵션 의미
    Approve Plan 된 내용을 적용
    Dismiss Plan 된 내용을 적용하지 않음, 스택이 Plan을 할 필요 없음
    Stop Plan 된 내용을 적용하지 않음, 현재 스택을 완료시킴

     

    리소스와 서비스가 정상 구동되었는지 확인

    docker ps
    
    sudo apt install curl
    
    curl localhost:8000

    docker ps 결과
    curl localhost:8000 결과

     

    해당 리소스와 서비스가 정상적으로 구동된 것을 확인 할 수 있다.

     

    Demo가 끝났으므로 해당 리소스를 제거하면된다.

     

    기존 HCL 문법과 같이 destroy를 사용하여 리소스를 제거하면 된다.

    cdktf destroy

    Plan 결과

    Deploy와 같이 Plan 된 내용을 확인 후 리소스를 삭제하면 된다.

     

    리소스 삭제 확인

    docker ps
    
    curl localhost:8000

    'DevOps > Terraform' 카테고리의 다른 글

    [Terraform] CDKTF 개요 및 환경 구성  (0) 2022.11.29
    [TF]Terraform 반복문  (0) 2021.12.22
    [TF]Terraform 조건문  (0) 2021.12.21
    [TF]Terraform Count, Foreach  (0) 2021.12.19
    [TF]Terraform Variable & Local & Output  (0) 2021.12.19
Designed by Tistory.