DevOps19 Terraform Backend 생성하기 (S3 버킷) 테라폼 backend용 s3 버킷 생성 provider "aws" { region = "ap-northeast-2" } resource "aws_s3_bucket" "example" { bucket = "iac-serverce1" tags = { Name = "iac-service1" Environment = "Dev" Management = "Terraform" CreatedBy = "hwan001" } } 2023. 10. 22. Dockerfile 작성하기 Dockerfile? Dockerfile은 원하는 Docker Container Image를 생성하기 위한 스크립트 파일이다. Docker는 build 옵션을 통해 Dockerfile에 나열된 명령문을 차례대로 수행하며 Container Image를 생성해준다. Dockerfile을 읽을 줄 안다는 것은 해당 이미지가 어떻게 구성되어 있는지 알 수 있다는 의미이다. Dockerfile 작성 방법 키워드 FROM: 시작점이 될 베이스 이미지를 지정한다. MAINTAINER: 이미지를 생성한 개발자의 정보를 표시한다. (1.13.0 이후에는 권장되지 않고, LABEL을 사용하는 것이 좋다.) LABEL: 이미지에 메타데이터를 추가한다. key-value 형태로 지정된다. RUN: 이미지 내에서 명령어를 실행.. 2023. 9. 16. 쿠버네티스 네임스페이스 확인하고 변경하기 네임스페이스 확인 kubectl get namespace 네임스페이스 변경하기 kubectl config set-context --current --namespace={NAMESPCE} 2023. 8. 27. [T1012] Week 6. 테라폼으로 협업하기 Git과 PR(Pull Request)을 활용한 협업 인프라의 규모가 확장되면서 여러 팀원들과 함께 작업하는 상황에서는 동일한 상태 파일을 공유하고 동기화하는 것이 중요해졌다. 유형 1은 직접 .tf 파일과 tfstate 파일을 공유하는 방식이다. 이런 방식으로 파일을 공유할 수는 있지만, 수동으로 관리하는 데에는 여러 번거로운 작업들이 포함된다. 이 과정에서 인간의 실수나 정보의 누락이 발생할 수 있기 때문에 이러한 문제점을 해결하고자 버전 관리 시스템(VCS)의 도입이 필요해졌다. 유형 2에서는 VCS(예: git, svn)를 사용하여 해당 파일들을 효율적으로 관리한다. 이를 통해 변경 이력을 체계적으로 추적할 수 있으며, 필요한 경우 이전 버전으로 쉽게 롤백할 수 있게 되었다. 유형 3은 git을 .. 2023. 8. 13. Jenkins에 설치된 플러그인 목록 얻기 젠킨스에 설치된 Plugin 목록 얻기 아래 명령어로 젠킨스에 설치된 플러그인의 목록을 얻을 수 있다. USERNAME과 PASSWORD은 젠킨스에 로그인이 가능한 계정 정보, SERVER IP와 PORT는 조회를 원하는 젠킨스 서버의 정보이다. 위 내용에 특수기호가 들어가는 경우는 \를 붙여 사용한다. (PASSWORD가 passwd! 일 경우, passwd\!) SERVER IP에는 https등을 제외하고 아이피만 넣어주어야 한다. JENKINS_HOST="USERNAME:PASSWORD@SERVER_IP:PORT"; curl -sSL "http://$JENKINS_HOST/pluginManager/api/xml?depth=1&xpath=/*/*/shortName|/*/*/version&wrapper.. 2023. 8. 10. [T1012] Week 4. State & module State file 상태 파일은 terraform apply시에 생성되는 .tfstate 파일이다. 해당 파일은 인프라의 상태를 json 형태로 가지고 있는데, 테라폼 내부에서만 사용하기 위한 파일이기 때문에 테라폼 상태 파일을 직접 편집하거나 직접 읽는 코드로 작성해서는 안된다. 팀 단위로 작업하는 경우 아래 조건이 갖춰져야 한다. 상태 파일을 저장하는 공유 스토리지 (Shared storage for state files) 각 팀원이 동일한 테라폼 상태 파일 사용을 위해서, 공유 위치에 저장이 필요 상태 파일 잠금 (Locking state files) 잠금 기능 없이 동시에 테라폼 실행 시 여러 테라폼 프로세스가 상태 파일을 동시에 업데이트하여 경쟁 상태(race condition)로 인한 충돌 가.. 2023. 7. 29. [T1012] Week 3. 테라폼 기본 사용법 정리 (3/3) 조건문 Terraform에는 다른 언어처럼 조건문을 위한 if 키워드가 없기 때문에 3항 연산자를 사용하여 조건문을 작성해야 한다. 예를들면 아래처럼 환경에 대한 정보를 변수로 입력받아 product 환경일 경우 5번, 아닐 경우 1번만 리소스를 생성하도록 할 수 있다. resource "aws_instance" "hwan001_instance" { count = var.env == "prod" ? 5 : 1 } 만약 dev 환경일 경우에만 리소스를 생성하고 싶다면 아래처럼 작성할 수 있다. provider "aws" { region = "ap-northeast-2" } data "aws_ami" "ubuntu" { most_recent = true filter { name = "name" values .. 2023. 7. 22. [T1012] Week 2. 테라폼 기본 사용법 정리 (2/3) 데이터 소스 Terraform의 데이터 소스는 테라폼 설정 내에서 읽기 전용의 값들을 제공한다. 이 값을 활용하면 이미 존재하는 리소스의 세부사항이나 외부 데이터를 참조할 수 있다. 데이터 소스 블록은 아래처럼 data로 시작하고 ‘데이터 소스 유형’과 '이름'을 정의한다. data "" "" { = } # 참조 : data... # 사용가능한 메타인수: # depends_on : 종속성 선언 # count : 선언된 개수만큼 리소스를 생성 # for_each : map또는 set 타입 변수로 리소스 반복 생성 # lifecycle : 리소스 수명주기 예를 들면 아래 코드는 aws의 az 정보를 얻어와 각 az에 subnet을 생성할 수 있다. data "aws_availability_zones" "av.. 2023. 7. 15. [T1012] Week 1. 테라폼 기본 사용법 정리 (1/3) Terraform HashiCorp사의 Terraform은 버전화, 재사용 및 공유할 수 있는 사람이 읽을 수 있는 구성 파일에서 클라우드 및 온프레미스 리소스를 모두 정의할 수 있는 코드형 인프라(IaC) 도구로 Amazon Web Services(AWS), Azure, Google Cloud Platform(GCP), Kubernetes, Helm, GitHub, Splunk, DataDog 등 수천여개의 다양한 Provider를 제공한다. Provider 테라폼을 적용할 대상으로 한번에 하나의 프로비저닝만 가능하며 terraform init을 통해 설치된다. (aws 구성을 azure로 변경하는 등의 작업은 불가함, 프로바이더에 대한 자세한 정보는 아래 링크 참조) https://registry.t.. 2023. 7. 8. Casablanka 빌드용 Dockerfile 프로그램을 만들면서 Python 서버와 REST로 연결하기 위해 라이브러리를 찾아봤다. 구글 검색을 통해 C++로 작성된 HTTP 클라이언트/서버 애플리케이션을 개발할 때 도움를 주는 C++ REST SDK (또는 Casablanca) 라이브러리를 찾았다. 해당 라이브러리는 microsoft의 공식 라이브러리로 깃 허브에 올라와 있었기 때문에, 빌드를 위해 아래 Dockerfile을 작성했다. casablanka.Dockerfile FROM ubuntu:latest AS env RUN apt-get update RUN apt-get upgrade -y RUN apt-get install -y sudo RUN apt-get install -y g++ git libboost-atomic-dev libboos.. 2023. 4. 26. 2023년 AWS 서비스 종류 별 기능 요약 ** 아래 내용에 아직 정리 안된 서비스들도 많지만 공부하면서 하나씩 추가로 정리할 예정입니다. AWS (Amazon Web Services) AWS를 공부하면서 어떤 제품들이 있는지 정리를 해보고 싶어졌다. 하지만 아래 이미지에 있는 기초 서비스들 외에도 많은 서비스들이 있고, 새로운 서비스가 계속 출시되기 때문에 모든 서비스를 정리하진 못했다. 추후에 하나씩 공부하면서 정리할 예정이다. 아래 이미지는 AWS 홈페이지의 서비스 카테고리를 기준으로 만들었는데, 정리하면서 같이 업데이트해보려고 한다. EC2 : 가상 머신 역할로 Amazon의 가장 중심 서비스이다. S3 : 정적 파일 (사진, 비디오, 문서 등 또는 frontend 코드와 Lambda 함수 코드도 해당) 스토리지 서비스의 솔루션 IAM (.. 2023. 3. 28. DevOps 로드맵 정리 로드맵을 기준으로 DevOps 분야에 대한 공부 방향성과 현재 지식 수준을 점검해보려고 한다. 기준은 구글에 검색해서 나온 이미지 중 정리가 잘 되었다고 생각한 이미지이다. https://dev.to/ankit01oss/the-complete-devops-roadmap-28n1 The complete DevOps roadmap 🚀 Hi there, This is Ankit, your friendly DevOps content curator. I read a lot of articles about... dev.to 기본적인 내용이나 활용 등 어느정도 알고 있다고 생각한 항목은 내용을 작성했고, 애매하게 알고있다고 생각한 내용은 주황색, 잘 모른다고 생각한 항목은 빨간색으로 강조했다. Learn a Prog.. 2023. 3. 12. Infrastructure as Code : 코드를 통한 인프라 구축 IaC (Infrastructure as Code) 소프트웨어를 작성하는 것처럼 인프라를 코드로 관리하는 것을 IaC라고 한다. 인프라를 코드로 관리할 때의 장점은 아래와 같다. 효율적인 구성 관리 : IaC로 인프라를 구성할 때의 장점 중 하나는 버전 관리 시스템(Git 등)을 활용할 수 있다는 점이다. 이를 통해 인프라의 구성을 버전별로 추적하고 이전 버전으로 되돌리는 등 인프라 구성을 쉽게 수정할 수 있다. 자동화 : IaC를 사용하면 인프라가 자동으로 구성되기 때문에 사람이 구성할 때보다 신뢰성과 정확성이 증가한다. 쉬운 구축과 배포: IaC를 사용하면 인프라 구축과 배포가 쉽고 빨라진다. 히스토리 : 직접 구축된 서버를 보면 실제로 사용하진 않지만, 작업 중에 남겨진 흔적 등이 발견되는 경우가 .. 2022. 12. 30. [DevOps] Jenkins로 Flask 웹 서버 컨테이너 CI/CD 구현하기 Jenkins 젠킨스는 오픈소스 CI 툴이다. 원 제작자는 카와구치 코스케이고 JAVA로 제작되었으며 MIT License를 따른다. 원래 목적은 자바 프로젝트의 CI였지만 여기서는 팀에서 제작한 Pluto 프로젝트의 컨테이너를 빌드하고 Docker Hub에 업로드 하여 버전 관리와 컨테이너 배포까지 (반)자동으로 이루어지도록 아래처럼 간단한 CI/CD를 작성해보았다. Python 프로젝트 컨테이너화 시키기 먼저 팀 프로젝트의 결과물인 Pluto(Flask 웹 서버)를 자동 배포하기 위해 서버를 컨테이너화 시켰다. 컨테이너화가 어렵게 느껴질 수 있지만 내가 했던건 이미 만들어진 우분투 컨테이너에 필요한 조치를 하고 서버를 올리는 스크립트(?)를 작성한게 전부다. 아래는 파이썬 프로젝트를 Ubuntu:20.. 2022. 10. 10. AWS 프리티어 회원 가입 및 설정(CloudWatch, MFA) AWS 프리티어 가입 AWS 프리티어는 1년간 무료로 제공되는 EC2 인스턴스이다. 회원 가입 이후에 사용이 가능하며, 가입 시 신용카드 정보를 등록하기 때문에 1년이 지난 이후에는 자동으로 비용이 청구된다. 먼저 회원가입을 위해 아래 이미지의 내용을 영어로 채워주자. 입력을 마치고 진행하게되면 핸드폰 인증과 서포트 플랜 선택을 하게된다. 서포트 플랜은 기본 지원, 개발자 지원, 비즈니스 지원이 있으며 기본 지원을 제외한 나머지는 금액이 부과된다. 기본 지원을 선택해주자. 설정 가입이 완료되었다면 기본적으로 설정해줄 내용들이 있다. 가장 먼저 오른쪽 상단의 도시명을 클릭해서 서울로 바꿔준다. 지역 설정이 끝났다면, 사용량과 결제에 대한 알림을 설정해보자. 우측 상단의 계정명을 클릭하고 결제 대시보드로 이.. 2022. 4. 30. [Docker] Ubuntu:20.04 컨테이너 Django 환경 구축 글 목적 아래 내용은 docker 설치와 이미지를 run한 이후 내부 컨테이너에서 apt-get update하는 부분부터 에러가 발생하여 해결하기 위해 삽질한 과정이다. 환경을 설치하고 Django web 페이지를 띄울 때까지 오류 상황들을 순서대로 적은 글이고 중간에 돌아가는 과정이 있기 때문에 빠른 결론을 원하면 아래 apt-get update 성공 부분부터 읽으면 될 듯 하다. 만약 이 글과 비슷한 상황이라면 순서대로 읽는 것 보단 필요한 부분만 찾아서 시도해보길 바란다. 도커 이미지는 아래 명령어로 run하였고, 컨테이너 이름은 test이다. $ sudo docker run -it --name=test ubuntu:20.04 /bin/bash docker 설치나 사용에 관한 내용은 아래 링크 참조.. 2022. 3. 31. [Docker] Docker Repository (3) Docker Hub 와 Docker Repository 도커는 깃 허브와 비슷한 구조로 만들어졌다. 사용자들은 여러 명령어를 활용해 Docker를 설치하고 이미지를 내려받아 필요한 환경을 구축한 후 이미지를 다시 빌드하여 허브에 업로드할 수 있고, 업로드된 이미지는 (인터넷이 가능하고 Docker가 설치되었다면) 언제든 다시 내려받아 사용할 수 있게된다. 이런 과정들을 가능하게 하려면 먼저 Docker Hub에 계정을 만들고, 이미지를 배포하고 관리할 Repository를 생성해야 한다. Repository의 이름은 배포할 이미지의 이름과 같아야 한다. (태그는 보통 버전관리를 위해 사용) 아래 링크에서 가입이 가능하다. https://hub.docker.com/ Docker Hub Container I.. 2022. 3. 24. [Docker] Docker 사용하기 (2) 이전 글 : Ubuntu에 Docker 설치하기 (1) https://hwan001.tistory.com/180 [서버] Ubuntu에 Docker 설치하기 Docker ? 리눅스 컨테이너화 기술로 사용자가 리눅스 컨테이너를 만들고 사용할 수 있도록 지원한다. 도커는 가상화 기술이 아닌 격리 기술이지만 가상 머신과 비슷한 느낌으로 사용한다. 컨테이 hwan001.tistory.com Docker에서 Ubuntu 20.04 LTS 최신 버전 공식 이미지 내려받기 Docker를 설치하면 도커 허브에 공유된 공식 이미지 또는 개인이 업로드한 이미지와 직접 제작한 이미지 등을 다운로드하여 원하는 환경을 쉽게 구성할 수 있다. 먼저 아래 명령어를 사용하면 도커 허브에 공유되고 있는 이미지 목록을 가져온다. $ s.. 2022. 3. 24. [Docker] Ubuntu에 Docker 설치하기 Docker 리눅스 컨테이너화 기술로 사용자가 리눅스 컨테이너를 만들고 사용할 수 있도록 지원한다. 도커는 가상화 기술이 아닌 격리 기술이지만 가상 머신과 비슷한 느낌으로 사용한다. 컨테이너를 구축, 배포, 복사하며 환경의 이전이 자유롭기 때문에 AWS 등 클라우드 서비스에 최적화되었다. 처음엔 리눅스의 LXC 기술(기존의 컨테이너)을 활용하였으나 현재는 자체 개발된 기술 활용한다. 도커는 단일 컨테이너 관리에 적합하게 만들어져 있다. (다수의 컨테이너를 다루려면 쿠버네티스 활용) https://www.docker.com/ Home - Docker A Community like No Other Community is at the heart of what Docker does. From our Docker.. 2022. 3. 22. 이전 1 다음