GitHub Actions를 사용하여 ARM 템플릿 배포
GitHub Actions는 코드를 저장하고 끌어오기 요청 및 이슈에 대해 공동 작업하는 곳과 동일한 위치에서 소프트웨어 개발 워크플로를 자동화하는 GitHub의 기능 모음입니다.
Azure Resource Manager 템플릿 배포 작업을 사용하여 Azure에 대한 ARM 템플릿(Azure Resource Manager 템플릿) 배포를 자동화할 수 있습니다.
필수 조건
활성 구독이 있는 Azure 계정. 체험 계정을 만듭니다.
GitHub 계정. 없는 경우 평가판에 등록하세요.
- Resource Manager 템플릿 및 워크플로 파일을 저장하는 GitHub 리포지토리. 리포지토리를 만들려면 새 리포지토리 만들기를 참조하세요.
워크플로 파일 개요
워크플로는 리포지토리의 /.github/workflows/
경로에 있는 YAML(.yml) 파일에서 정의됩니다. 이 정의는 워크플로를 구성하는 다양한 단계와 매개 변수를 포함합니다.
이 파일에는 다음 두 가지 섹션이 있습니다.
섹션 | 작업 |
---|---|
인증 | 1. 배포 자격 증명을 생성합니다. |
Deploy | 1. Resource Manager 템플릿을 배포합니다. |
배포 자격 증명 생성
OIDC에서 Azure 로그인 작업을 사용하려면 Microsoft Entra 애플리케이션 또는 사용자 할당 관리 ID에서 페더레이션 ID 자격 증명을 구성해야 합니다.
옵션 1: Microsoft Entra 애플리케이션
- Azure Portal, Azure CLI 또는 Azure PowerShell에서 서비스 주체를 사용하여 Microsoft Entra 애플리케이션을 만듭니다.
- 클라이언트 ID, 구독 ID 및 디렉터리(테넌트) ID의 값을 복사하여 나중에 GitHub Actions 워크플로에서 사용합니다.
- Azure Portal, Azure CLI 또는 Azure PowerShell을 통해 서비스 주체에 적절한 역할을 할당합니다.
- GitHub Actions에서 발급한 토큰을 GitHub 리포지토리에 신뢰하도록 Microsoft Entra 애플리케이션 에서 페더레이션 ID 자격 증명을 구성합니다.
옵션 2: 사용자 할당 관리 ID
- 사용자 할당 관리 ID 만들기의 지침에 따라 만듭니다.
- 클라이언트 ID, 구독 ID 및 디렉터리(테넌트) ID의 값을 복사하여 나중에 GitHub Actions 워크플로에서 사용합니다.
- 사용자 할당 관리 ID에 적절한 역할을 할당합니다.
- GitHub Actions에서 발급한 토큰을 GitHub 리포지토리에 신뢰하도록 사용자 할당 관리 ID에서 페더레이션 ID 자격 증명을 구성합니다.
GitHub 비밀 구성
로그인 작업에 애플리케이션의 클라이언트 ID, 디렉터리(테넌트) ID 및 구독 ID 를 제공해야 합니다. 이러한 값은 워크플로에서 직접 제공하거나 GitHub 비밀에 저장하고 워크플로에서 참조할 수 있습니다. 값을 GitHub 비밀로 저장하는 것이 더 안전한 옵션입니다.
GitHub에서 리포지토리로 이동합니다.
보안 > 비밀 및 변수 > 작업을 선택합니다.
새 리포지토리 비밀을 선택합니다.
참고 항목
공용 리포지토리에서 워크플로 보안을 강화하려면 리포지토리 비밀 대신 환경 비밀을 사용합니다. 환경에 승인이 필요한 경우 필수 검토자 중 한 명이 승인할 때까지 작업에서 환경 비밀에 액세스할 수 없습니다.
AZURE_CLIENT_ID
,AZURE_TENANT_ID
및AZURE_SUBSCRIPTION_ID
에 대한 비밀을 만듭니다. GitHub 비밀에 대한 Microsoft Entra 애플리케이션 또는 사용자 할당 관리 ID에서 다음 값을 복사합니다.GitHub 비밀 Microsoft Entra 애플리케이션 또는 사용자 할당 관리 ID AZURE_CLIENT_ID 클라이언트 ID AZURE_SUBSCRIPTION_ID 구독 ID AZURE_TENANT_ID 디렉터리(테넌트) ID 참고 항목
보안상의 이유로 워크플로에 직접 값을 전달하는 대신 GitHub 비밀을 사용하는 것이 좋습니다.
Resource Manager 템플릿 추가
GitHub 리포지토리에 Resource Manager 템플릿을 추가합니다. 이 템플릿으로 스토리지 계정을 만듭니다.
https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json
파일을 리포지토리의 어디에나 배치할 수 있습니다. 다음 섹션의 워크플로 샘플에서는 템플릿 파일의 이름이 azuredeploy.json이고 리포지토리의 루트에 저장된다고 가정합니다.
워크플로 만들기
워크플로 파일은 리포지토리의 루트에 있는 .github/workflows 폴더에 저장해야 합니다. 워크플로 파일 확장명은 .yml 또는 .yaml일 수 있습니다.
- GitHub 리포지토리의 상단 메뉴에서 작업을 선택합니다.
- 새 워크플로를 선택합니다.
- 워크플로 직접 설정을 선택합니다.
- main.yml이 아닌 다른 이름을 선호하는 경우 워크플로 파일의 이름을 바꿉니다. 예: deployStorageAccount.yml.
- yml 파일의 내용을 다음으로 바꿉니다.
on: [push]
name: Azure ARM
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
# Checkout code
- uses: actions/checkout@main
# Log into Azure
- uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
# Deploy ARM template
- name: Run ARM deploy
uses: azure/arm-deploy@v1
with:
subscriptionId: ${{ secrets.AZURE_SUBSCRIPTION }}
resourceGroupName: ${{ secrets.AZURE_RG }}
template: ./azuredeploy.json
parameters: storageAccountType=Standard_LRS
# output containerName variable from template
- run: echo ${{ steps.deploy.outputs.containerName }}
참고 항목
ARM 배포 작업에 대신 JSON 형식 매개 변수 파일을 지정할 수 있습니다(예: .azuredeploy.parameters.json
).
워크플로 파일의 첫 번째 섹션에는 다음이 포함됩니다.
- name: 워크플로의 이름입니다.
- on: 워크플로를 트리거하는 GitHub 이벤트의 이름입니다. 기본 분기에 지정된 두 파일 중 하나 이상을 수정하는 푸시 이벤트가 있는 경우 워크플로가 트리거됩니다. 두 파일은 워크플로 파일 및 템플릿 파일입니다.
- 커밋 시작을 선택합니다.
- 기본 분기에 직접 커밋을 선택합니다.
- 새 파일 커밋(또는 변경 내용 커밋)을 선택합니다.
업데이트되는 워크플로 파일이나 템플릿 파일에 의해 트리거되도록 워크플로를 구성했기 때문에 변경 내용을 커밋하면 워크플로가 바로 시작됩니다.
워크플로 상태 확인
- 작업 탭을 선택합니다. deployStorageAccount.yml 만들기 워크플로가 나열되어 있습니다. 워크플로를 실행하는 데 1-2분이 소요됩니다.
- 워크플로를 선택하여 엽니다.
- 메뉴에서 ARM 배포 실행을 선택하여 배포를 확인합니다.
리소스 정리
리소스 그룹 및 리포지토리가 더 이상 필요하지 않은 경우 리소스 그룹과 GitHub 리포지토리를 삭제하여 배포한 리소스를 정리합니다.