Terraform 및 GitHub Actions를 사용하여 Azure 인프라 프로비저닝
테라폼이란?
Terraform은 HashiCorp에서 만든 IaC(Infrastructure as a Code) 도구입니다. 전체 클라우드 인프라를 코드로 작성할 수 있으며 클라우드 서비스 공급자의 콘솔과 상호 작용할 필요가 없습니다. 모든 것이 자동화될 수 있습니다.

왜 GitHub Actions입니까?
우리는 인프라를 코드로 정의한다는 것을 알고 있습니다. 따라서 DevOps 및 운영 팀 구성원은 해당 코드에 액세스할 수 있어야 하며 코드를 업데이트할 때 인프라를 자동으로 업데이트하는 방법이 필요합니다. 그것이 GitHub Actions가 들어오는 곳입니다.
GitHub Actions는 빌드, 테스트 및 배포 파이프라인을 자동화할 수 있는 GitHub의 지속적 통합 및 지속적 배포(CI/CD) 플랫폼입니다.

따라서 우리의 계획은 Azure 인프라 코드를 GitHub 리포지토리에 넣고 GitHub Actions를 사용하여 Terraform을 트리거하고 누군가 코드를 변경할 때 인프라를 업데이트하는 것입니다.
전제 조건:
팔로우 😉
1. 아래 명령을 사용하여 서비스 주체를 생성하고 나중에 사용할 수 있도록 출력을 저장합니다. (ServicePrincipalName을 의미 있는 이름으로 바꾸고 SubscriptionID를 Azure 구독 ID로 바꿉니다.)
az ad sp create-for-rbac --name ServicePrincipalName --role Contributor --scopes /subscriptions/SubscriptionID
2. Terraform 상태를 저장할 Azure 저장소 계정 컨테이너를 만듭니다.
# Create Resource Group
az group create -n tfstates -l eastus2
# Create Storage Account
az storage account create -n kstfstateaccount -g tfstates -l eastus2 --sku Standard_LRS
# Create Storage Account Container
az storage container create -n tfstate --account-name kstfstateaccount
3. GitHub 리포지토리를 생성하고 Terraform 구성 파일을 커밋합니다. 예를 들어 다음 Terraform 구성을 사용하여 리소스 그룹과 컨테이너 레지스트리를 프로비저닝합니다.
"main.tf"👇의 코드는 다음과 같습니다.
provider "azurerm" {
  features {}
}
resource "azurerm_resource_group" "default" {
  name     = "container-registry-rg"
  location = "East US 2"
  tags = {
    environment = "Production"
  }
}
resource "azurerm_container_registry" "acr" {
  name                = "kspcontainerregistry"
  resource_group_name = azurerm_resource_group.default.name
  location            = "East US 2"
  sku                 = "Standard"
  admin_enabled       = true
}
output "acr_login_server" {
  value = azurerm_container_registry.acr.login_server
}
output "acr_admin_username" {
  value     = azurerm_container_registry.acr.admin_username
  sensitive = true
}
output "acr_admin_password" {
  value     = azurerm_container_registry.acr.admin_password
  sensitive = true
}
GitHub Actions와 팀 구성원이 동일한 인프라와 상호 작용할 때 모든 사람이 동일한 terraform 상태 파일에 액세스해야 합니다. 따라서 Terraform 백엔드를 초기화하고 이전에 만든 Azure 저장소 계정 컨테이너에 상태 파일을 저장합니다.
"backend.tf"👇의 코드는 다음과 같습니다.
terraform {
  backend "azurerm" {
    resource_group_name  = "tfstates"
    storage_account_name = "kstfstateaccount"
    container_name       = "tfstate"
    key                  = "terraform.tfstate"
  }
}
이제 Terraform 구성 파일을 GitHub 리포지토리로 푸시할 수 있습니다.
4. 서비스 주체 자격 증명을 GitHub 리포지토리 비밀로 추가합니다.
GitHub 리포지토리 설정으로 이동한 다음 비밀 섹션으로 이동합니다. 이제 다음 리포지토리 비밀을 추가합니다(첫 번째 단계에서 얻은 값 사용).

5.마지막으로 GitHub Actions 구성 파일을 GitHub 리포지토리에 추가합니다.
다음은 GitHub Actions 구성 파일 "actions.yml"입니다. 👇
name: 'Terraform'
on:
  push:
    branches:
    - main
  pull_request:
jobs:
  terraform:
    name: 'Terraform'
    env:
      ARM_CLIENT_ID: ${{ secrets.AZURE_AD_CLIENT_ID }}
      ARM_CLIENT_SECRET: ${{ secrets.AZURE_AD_CLIENT_SECRET }}
      ARM_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
      ARM_TENANT_ID: ${{ secrets.AZURE_AD_TENANT_ID }}
    runs-on: ubuntu-latest
    environment: production
    # Use the Bash shell regardless whether the GitHub Actions runner is ubuntu-latest, macos-latest, or windows-latest
    defaults:
      run:
        shell: bash
    steps:
    # Checkout the repository to the GitHub Actions runner
    - name: Checkout
      uses: actions/checkout@v2
    - name: 'Terraform Format'
      uses: hashicorp/terraform-github-actions@master
      with:
        tf_actions_version: 0.14.8
        tf_actions_subcommand: 'fmt'
        tf_actions_working_dir: "./terraform"
    - name: 'Terraform Init'
      uses: hashicorp/terraform-github-actions@master
      with:
        tf_actions_version: 0.14.8
        tf_actions_subcommand: 'init'
        tf_actions_working_dir: "./terraform"
    - name: 'Terraform Validate'
      uses: hashicorp/terraform-github-actions@master
      with:
        tf_actions_version: 0.14.8
        tf_actions_subcommand: 'validate'
        tf_actions_working_dir: "./terraform"
    - name: 'Terraform Plan'
      uses: hashicorp/terraform-github-actions@master
      with:
        tf_actions_version: 0.14.8
        tf_actions_subcommand: 'plan'
        tf_actions_working_dir: "./terraform"
    - name: Terraform Apply
      if: github.ref == 'refs/heads/main'
      uses: hashicorp/terraform-github-actions@master
      with:
        tf_actions_version: 0.14.8
        tf_actions_subcommand: 'apply'
        tf_actions_working_dir: "./terraform"
이 구성 파일을 ".github/workflows"폴더에 추가해야 합니다. 따라서 폴더 구조는 다음과 같아야 합니다.

이제 모든 것이 완벽하게 구성되었으며 모든 커밋을 리포지토리에 푸시할 수 있습니다. 파이프라인 상태를 보려면 리포지토리 작업 섹션을 방문하십시오.

읽어주셔서 감사하고 잘못된 부분이 있으면 알려주세요. 🫡
Reference
이 문제에 관하여(Terraform 및 GitHub Actions를 사용하여 Azure 인프라 프로비저닝), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/krishanshamod/provision-azure-infrastructure-using-terraform-and-github-actions-j0o텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)