-
[Terraform] CDKTF Docker Provisioning DemoDevOps/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 $USERCreate 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 --localDocker Provider 설치
pipenv install cdktf-cdktf-provider-docker cdktf provider add kreuzwerker/dockerPython 기반 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 deployPlan 된 내용에서 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 destroyPlan 결과

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