티스토리 뷰
<참조> https://azuredevopslabs.com/labs/vstsextend/terraform/
개요
Terraform은 인프라를 안전하고 효율적으로 구축, 변경 및 버전 관리하기 위한 도구이다. Terraform은 기존 및 인기있는 클라우드 서비스 제공 사업자 뿐만아니라 맞춤형 사내 솔루션도 관리 할 수 있다.
구성 파일은 단일 애플리케이션 또는 전체 데이터 센터를 실행하는 데 필요한 구성 요소를 Terraform에게 설명한다. Terraform은 의도하는 상태에 도달하기 위해 수행 할 작업을 설명하는 실행 계획을 생성 한 다음 이를 실행하여 설명 된 인프라를 구축한다. 구성이 변경되면 Terraform은 변경된 사항을 확인하고 적용 할 수 있는 증분 실행 계획을 생성 할 수 있다.
추가 학습을 원하나? Microsoft Learn의 Azure Pipelines 모듈에서 인프라 프로비저닝을 확인한다.
이 랩에서 다루는 것들
1. Terraform과 같은 오픈 소스 도구를 활용하여 IaC(Infrastructure as Code)를 구현하는 방법
2. Terraform 및 Azure Pipelines를 사용하여 클라우드에서 인프라 배포를 자동화하는 방법
다음 이미지는 이 실습에서 설명하는 모든 단계를 안내해 줄 것이다.
시작하기 전에
1. 실습을 시작하기 전에 시작하기 페이지를 참조한다.
2. Azure DevOps 데모 생성기를 사용하여 Azure DevOps 조직에서 프로젝트를 프로비전 한다. 이 URL은 데모 생성기에서 Terraform 템플릿을 자동으로 선택한다. 다른 프로젝트를 시도하려면 대신 이 URL을 사용한다.
간단한 연습을 따라 Azure DevOps 데모 생성기를 사용하는 방법을 알아본다.
실습 1: 소스 코드에서 Terraform 파일 (IaC) 검토
이 실습에서는 Django 프레임워크를 사용하여 빌드 된 간단한 Python 웹 애플리케이션을 사용한다. Django는 빠른 개이 실습에서는 .Net Core를 사용하여 개발된 전자 상거래 웹 사이트의 예인 PartsUnlimited를 사용한다. PartsUnlimited 웹 사이트를 배포하는 데 필요한 Azure 리소스를 프로비저닝하는 데 도움이되는 terraform 파일을 검토한다.
1. Azure DevOps 데모 생성기를 사용하여 위에서 만든 프로젝트로 이동한다.
2. Repos를 선택한다. terraform 브랜치로 전환한다.
이제 terraform 브랜치에 있고 Terraform 폴더가 저장소에 있는지 확인한다.
3. Terraform 폴더에서 webapp.tf 파일을 선택한다. 코드를 살펴본다.
webapp.tf는 terraform 구성 파일이다. Terraform은 HCL (Hashicorp Configuration Language)이라는 자체 파일 형식을 사용한다. 이것은 YAML과 매우 유사하다.
이 예제에서는 웹 사이트를 배포하는 데 필요한 Azure 리소스 그룹, 앱 서비스 계획 및 앱 서비스를 배포하려고 한다. 또한 필요한 Azure 리소스를 배포 할 수 있는 Azure DevOps 프로젝트의 소스 제어 저장소에 Terraform 파일 (Infrastructure as Code)을 추가했다.
Terraform 기본 사항에 대해 자세히 알아 보려면 여기를 클릭한다.
실습 2: Azure CI Pipeline을 사용하여 애플리케이션 빌드
이 실습에서는 애플리케이션을 빌드하고 필요한 파일을 drop이라는 아티팩트에 게시한다.
1. Pipelines –> Pipelines로 이동하여 Terraform-CI를 선택하고 Edit을 클릭한다.
2. 빌드 파이프라인은 다음과 같다. 이 CI 파이프라인에는 .Net Core 프로젝트를 컴파일하는 태스크가 있다. 파이프라인의 dotnet 태스크는 종속성을 복원하고 빌드 출력을 웹 애플리케이션에 배포 할 수 있는 zip 파일 (패키지)로 빌드, 테스트 및 게시한다.
Azure Pipelines를 사용하여 .Net Core 프로젝트를 빌드하는 방법에 대한 자세한 지침은 여기를 참조한다.
3. 애플리케이션 빌드 외에도 CD 파이프라인에서 사용할 수 있도록 terraform 파일을 게시하여 아티팩트를 빌드해야 한다. 그래서 우리는 Terraform 파일을 Artifacts 디렉토리에 복사하는 Copy files 태스크를 추가했다.
4. 이제 Queue를 클릭하여 빌드를 트리거한다. 빌드가 성공하면 아티팩트에 Terraform 폴더와 PartsUnlimitedwebsite.zip 파일이 드롭에 있는지 확인한다.
실습 3: Azure CD 파이프라인에서 Terraform (IaC)을 사용하여 리소스 배포
이 실습에서는 배포 (CD) 파이프라인의 일부로 Terraform을 사용하여 Azure 리소스를 만들고 Terraform에서 프로비전 된 앱 서비스에 PartsUnlimited 애플리케이션을 배포한다.
1. Pipelines –> Releases로 이동하여 Terraform-CD를 선택하고 Edit을 클릭한다.
2. Dev 스테이지를 선택하고 View stage tasks를 클릭하여 파이프라인 태스크를 확인한다.
3. 다음과 같은 태스크가 표시된다.
4. Azure CLI 태스크를 선택한다. 드롭 다운 목록에서 Azure 구독을 선택하고 Authorize를 클릭하여 Azure 서비스 연결을 구성한다.
기본적으로 Terraform은 상태를 terraform.tfstate라는 파일에 로컬로 저장한다. 팀에서 Terraform으로 작업 할 때 로컬 파일을 사용하면 Terraform 사용이 복잡해진다. 원격 상태를 사용하면 Terraform은 상태 데이터를 원격 데이터 저장소에 쓴다. 여기에서는 Azure CLI 작업을 사용하여 Terraform 상태를 저장할 Azure storage account 및 storage container를 만든다. Terraform 원격 상태에 대한 자세한 정보는 여기를 클릭한다.
5. Azure PowerShell 태스크를 선택한다. 드롭 다운에서 Azure 서비스 연결을 선택한다.
Terraform 백엔드를 구성하려면 스토리지 계정 액세스 키가 필요하다. 여기서는 Azure PowerShell 태스크를 사용하여 이전 스테이지에서 프로비저닝 된 스토리지 계정의 액세스 키를 가져온다.
6. Replace tokens 태스크를 선택한다.
실습 1, 3 단계에서 webapp.tf 파일을 보면 접미사 및 접두사 __가 있는 값이 거의 없음을 알 수 있다. 예 : __terraformstorageaccount__. Replace tokens 태스크를 사용하여 해당 값을 릴리즈 파이프라인에 정의된 변수 값으로 바꾼다.
7. Terraform 도구 설치 관리자 태스크는 인터넷 또는 도구 캐시에서 지정된 버전의 Terraform을 설치하는 데 사용되며 Azure Pipelines 에이전트 (호스팅 또는 개인)의 PATH 앞에 추가한다.
8. 자동화에서 Terraform을 실행할 때 일반적으로 핵심 plan/apply에 중점을 둔다.
주요 Terraform 워크 플로는 다음과 같다.
i. Terraform 작업 디렉토리를 초기화한다.
ii. 현재 구성과 일치하도록 리소스를 변경하기 위한 계획을 생성한다.
iii. 계획에 설명 된 변경 사항을 적용한다.
릴리즈 파이프라인의 다음 Terraform 태스크는 이 워크 플로를 구현하는 데 도움이 된다.
9. Terraform init 태스크를 선택한다. 드롭 다운에서 Azure 서비스 연결을 선택한다. 컨테이너 이름을 terraform으로 입력해야 한다. 기타 태스크 매개 변수 정보는 여기를 참조한다.
이 태스크는 terraform init 명령을 실행한다. terraform init 명령은 현재 작업 디렉토리에 있는 모든 * .tf 파일을 살펴보고 필요한 모든 공급자를 자동으로 다운로드한다. 이 예제에서는 Azure 리소스를 배포 할 때 Azure 공급자를 다운로드한다. terraform init 명령에 대한 자세한 내용은 여기를 클릭한다.
10. Terraform plan 태스크를 선택한다. 드롭 다운에서 Azure 서비스 연결을 선택한다.
terraform plan 명령은 실행 계획을 만드는 데 사용된다. Terraform은 구성 파일에 지정된 원하는 상태를 달성하는 데 필요한 조치를 결정한다. 이것은 모의 테스트(dry run)이며 어떤 조치가 수행 될지 보여준다. terraform plan 명령에 대한 자세한 내용을 보려면 여기를 클릭한다.
11. Terraform Apply 태스크를 선택한다. 드롭 다운에서 Azure 서비스 연결을 선택한다.
이 태스크는 terraform apply 명령을 실행하여 리소스를 배포한다. 기본적으로 변경사항을 적용할지 확인하는 메시지가 표시된다. 배포를 자동화하고 있으므로 확인 메시지를 표시하지 않도록 auto-approve 인수를 추가하고 있다.
12. Azure App Service Deploy 태스크를 선택한다. 드롭 다운에서 Azure 서비스 연결을 선택한다.
이 태스크는 이전 단계에서 Terraform 태스크에 의해 프로비저닝 된 Azure 앱 서비스에 PartsUnlimited 패키지를 배포한다.
13. 완료되면 변경 사항을 Save하고 Create a release 한다.
14. 릴리즈가 성공하면 Azure Portal로 이동한다. App Services에서 pulterraformweb-xxxx를 선택하고 배포 된 애플리케이션을 찾아본다.
Terraform에 대한 더 많은 정보가 필요한가? 그렇다면 Terraform 문서를 위해 여기를 클릭한다.
요약
이 랩에서는 Azure Pipelines를 사용하여 Azure에서 Terraform으로 반복 가능한 배포를 자동화하는 방법을 배웠다.
참조
이 실습에서 설명하는 모든 단계를 안내하는 다음 비디오를 시청할 수 있다.
www.youtube.com/watch?v=KiCZzJlS16A&feature=youtu.be
'Azure와 함께 하는 DevOps' 카테고리의 다른 글
51. WhiteSource로 오픈소스 보안 및 라이센스 관리하기 (0) | 2020.09.28 |
---|---|
50. 컨테이너용 Azure Web App에 도커로 된 JAVA 앱 배포하기 (0) | 2020.09.21 |
48. Django 기반 파이썬 앱을 위한 CD 파이프라인 배포하기 (0) | 2020.09.07 |
47. Azure DevOps 프로젝트로 .NET용 CI/CD 파이프라인 생성 (0) | 2020.08.31 |
46. Docker 기반 웹 애플리케이션 Azure 앱 서비스에 배포하기 (0) | 2020.08.24 |