Azure에서 Terraform 에 대한 에피소스 0 (설치 및 구성)

Azure
작성자
Roronoa
작성일
2022-08-28 17:23
조회
1400
Azure에서 Infrastructure as A Code 의 역사

 

Azure 의 Infrastructure as A Code 의 경우 Azure Template 이 존재 해왔습니다. Azure 가 ARM이라는 체제로 변경한 때 부터 존재한 선사시대 Infrastructure as A Code 입니다. 처음 나왔을때 매일 매일 연습해서 모든 인프라를 ARM Template으로 연습하던 때가 있었는데 어느순간 부터 Azure 에서 Terraform 이 ARM Template을 대체 하고 혼돈의 시대가 왔었습니다. ARM Template으로 대부분 모든 인프라를 구성 할 수 있었으나 치명적 단점인 모듈화나 매우 큰 인프라를 전체 관리하기엔 ARM Template은 구조적으로 어려운 점이 많이 있습니다. 그래서 Azure 에서는 IaC 는 테라폼을 매우 많이 사용하게 되었습니다. 물론 Terraform 에도 장점과 단점이 존재 하며 이런 단점을 커버하기 위해서 ARM Template을 혼용 해서 사용하는 방법을 사용 했었습니다. 근래에는 Azure Bicep 이라는 새로운 언어 중심의 IaC가 나왔지만 현재 레퍼런스가 매우 부족하고 아직 미성숙 단계 입니다. 추후에 Bicep이 안정화 단계가 된다면 모든 인프라를 Bicep으로 관리하는 것도 좋겠지만 2022년 까지는 Terraform이 Azure에서는 원픽인 것은 인정하지 않을 수 없습니다.

 

Azure 에서 Terraform에 대한 가이드 문서가 있긴 하지만 한글문서는 매우 적으며  블로그 중심의 글이 없어서 천천히 다시 한번 글을 써보려 합니다. 대부분 몇년 전 써진 글이라 가장 최신 2022년에 다시 재해석을 해보려 합니다.

 

Azure ARM Template VS Azure Terraform

많은 사람들이 Terraform 의 장점은 여러 Provider를 동시에 제공한다는 장점에 초점을 맞추고 있습니다. 개인적으로는 Terraform 의 장점은 다수의 Provider 즉 AWS Azure GCP 등등 여러 클라우드에서 사용할 수 있습니다. 그러나 간과하는 가장 큰 부분은 AWS 에서 쓰던 코드가 Azure 나 GCP에서 전혀 동작하지 않습니다. 혹자는 Provider를 변경하면 된다고 하 나 전혀 다릅니다. 테라폼에서 AWS Azure GCP 는 Provider만 변경한다고 동작하지 않습니다. 내부 구조가 전혀 다른 구조이기 때문에 같은 코드를 AWS Azure GCP 에서 동시에 쓰기를 원하는 꿈같은 일은 존재하지 않습니다. AWS Azure GCP에서 Provider를 변경하고 각 클라우드에 맞는 코드를 재 작성 해야만 동작합니다.

하나의 툴로 AWS Azure GCP를 동시에 사용가능 한것은 사실입니다. 그러나 같은 Terraform 코드로 동작 하지 않습니다. 예를들어 Azure의 경우 Resource Group은 가장 필수적인 리소스 입니다. AWS 에는 Resource Group이 있으나 필수가 아닙니다. 그림001은 Azure 에서 Resource Group을 선언하는 Terraform 코드 입니다. 그림002는 AWS 에서 Resource Group 을 생성하는 코드 입니다. 문법만 비슷하고 내용이 다릅니다. 그림001에서 보면 Azure는 West Europe에 데이터 센터가 있는데 Azure 는 West Europe 은 네덜란드에 있습니다. AWS 에는 네덜란드에 데이터 센터가 없으며 독일에 있습니다. 그림001과 그림002를 보면 로케이션을 지정하는 부분이 다릅니다. Azure 에서는 리소스 그룹은 필수 조건이며 리소스 그룹없이 리소스 생성이 불가능 하지만 AWS 는 리소스 그룹이 필수 조건도 아니며 Tag 가 널리 사용되지 리소스 그룹이 널리 사용되지 않습니다.

 

azure 그림001
azure 그림002

Azure 와 AWS 테라폼 코드가 같은 코드 인가요? 

전혀 다른 코드이며 내부 구성이 다릅니다. 비슷한 문법을 사용하는 툴이 같은 것이지 같은 코드로 인프라가 생성이 되거나 하지 않습니다. 전혀 다릅니다.

물론 툴과 문법은 같습니다. 

 

물론 테라폼을 설치 하는 과정과 권한을 설정하는 부분도 전부 다릅니다.

 

Azure에서 설치 시에 4가지 방법이 있습니다.

  • Bash를 사용하여 Azure Cloud Shell 구성

  • PowerShell을 사용하여 Azure Cloud Shell 구성

  • Bash를 사용하여 Windows 구성

  • PowerShell을 사용하여 Windows 구성


그중에 가장 일반적으로 많이 설치 하는 방법으로 설치 해보겠습니다.

  • Bash를 사용하여 Azure Cloud Shell 구성 - 이 환경을 메인으로 사용하지는 않고 보통 보조로 사용합니다.

  • PowerShell을 사용하여 Azure Cloud Shell 구성 - 파워쉘에 능숙한 사람이 사용하는 보조로 사용하는 방법입니다.

  • Bash를 사용하여 Windows 구성 - 가장 일반적인 사용 방법입니다.

  • PowerShell을 사용하여 Windows 구성 - 파워쉘을 사용한 윈도우즈에서 사용하는 방법입니다.


Bash를 사용하여 Windows 구성 - 가장 일반적인 사용 방법

1. VS code 디폴트 설정으로 설치 합니다. https://code.visualstudio.com/docs/?dv=win
azure 그림003

2.윈도우에서 사용하려면 Git Bash가 필수 입니다. 일반적으로 리눅스 명령어 를 사용하기에 쉘이 필요하므로 Git Bash를 

Git - Downloading Package (git-scm.com) 이링크에서 Git Bash를 설치 합니다. 물론 WSL로도 가능합니다.
azure 그림004

3. VS code Terminal 탭에서 새로운 Terminal을 열고 git –version 을 체크합니다.
azure 그림005

 

4. Azure CLI를 설치 합니다. 이것을 설치해야 CLI 명령어를 사용할수 있습니다.Azure API를 사용하는 테라폼은 이것이 있어야 동작 합니다.
azure 그림006

5. 확인을 위해 VS Code 터미널에서 az login 이라고 커맨드를 입력 후 로그인 창이 팝업됩니다.
azure 그림007

6.윈도우용 테라폼 다운로드 합니다.

Downloads | Terraform by HashiCorp

7.실행 파일을 c:terraform 에 설치합니다

8.아무대서나 실행되도록 전역 변수를 설정해줍니다.

c++ - Where can I set path to make.exe on Windows? - Stack Overflow
azure 그림008

9. Git Bash로 들어가서 아무대서나 terraform -version 명령어로 확인 합니다.
azure 그림009

10.서비스 주체를 포털에서 만들고 코드에 등록하는 방법 입니다.

Azure 공급자: 서비스 주체 및 클라이언트 암호 |을 통해 인증 가이드 | 하시코프/아주렘 | 테라폼 레지스트리 (terraform.io)

11.VS code에서 테라폼 연결 방법

https://docs.microsoft.com/ko-kr/azure/developer/terraform/configure-vs-code-extension-for-terraform?tabs=azure-cli?WT.mc_id=AZ-MVP-5002667

12.Azure Active Directory로 가서 서비스 주체를 만들기 위해서 그림010 에 있는 App Registrations를 선택하고 + New registration 을 선택합니다.
azure 그림010

13. App에 이름을 입력하고 이 앱이 어떤 텐던트를 사용할지를 선택합니다.
azure 그림011

14. 만들고 나면 Application ID Object ID Tenant ID 를 추후에 입력해야 합니다.
azure 그림012

15. 앱을 만들고 나서 비밀번호를 생성해야 하며 하단의 그림013처럼 비밀번호를 생성하고 유효기간을 입력합니다. 유효기간은 6개월이 디폴트 입니다.
azure 그림013

16. 만들고 나면 비밀번호가 나오는데 그림014 처럼 Value 라는 값이 비밀번호입니다. 이부분은 이때를 제외하고는 다시 볼수 없으므로 나오면 바로 적어놓아야 합니다.
azure 그림014

17. VS Code 의 터미널에서 이제 terraform init을 입력하면 하단의 그림015처럼 init은 됩니다. 그러나 Plan을 입력하면 Plan은 권한이 없어서 입력이 안됩니다.
azure 그림015

18. 자 그럼 만든 Azure 서비스 주체에 권한을 주기 위해 Azure 구독으로 이 동하고 IAM 에서 Add Role Assignment를 추가 합니다.
azure 그림016

19. 저는 어드민이므로 contributor로 현재 그림017은 주었으나 필요한 권한만 주는 최소 권한 원칙을 사용해야 합니다.
azure 그림017

20. 그림018처럼 프로바이더에 접속 정보를 입력하거나 환경변수에 해당 정보를 입력하면 이제터미널에서 terraform plan을 실행하면 성공합니다.
azure 그림018

자 이제 테라폼을 실행 할 수 있는 환경을 완성 했습니다.