빠른 시작: ARM 템플릿을 사용하여 Azure에 Linux 웹앱 배포

Azure DevOps Services

MySQL을 사용하여 Linux 웹앱을 배포하여 ARM 템플릿(Azure Resource Manager 템플릿)을 시작합니다. ARM 템플릿은 코드에 구성을 저장하는 방법을 제공합니다. ARM 템플릿을 사용하는 것은 코드로 인프라의 예이며 좋은 DevOps 사례입니다.

ARM 템플릿은 프로젝트에 대한 인프라 및 구성을 정의하는 JSON(JavaScript Object Notation) 파일입니다. 이 템플릿은 선언적 구문을 사용합니다. 선언적 구문에서는 배포를 만들기 위한 프로그래밍 명령의 시퀀스를 작성하지 않고 의도하는 배포를 설명합니다.

JSON 또는 Bicep 구문을 사용하여 Azure 리소스를 배포할 수 있습니다. 템플릿에 대한 JSON과 Bicep의 차이점에 대해 자세히 알아봅니다.

필수 구성 요소

이 작업을 시작하려면 다음이 필요합니다.

코드 가져오기

GitHub에서 이 리포지토리를 포크합니다.

https://github.com/Azure/azure-quickstart-templates/tree/master/quickstarts/microsoft.web/webapp-linux-managed-mysql

템플릿 검토

이 빠른 시작에서 사용되는 템플릿은 Azure 빠른 시작 템플릿에서 나온 것입니다.

템플릿은 다음과 같은 여러 리소스를 정의합니다.

파이프라인 만들기 및 템플릿 배포

  1. Azure DevOps 조직에 로그인하고, 프로젝트로 이동합니다. 프로젝트가 아직 없는 경우 프로젝트를 만듭니다.

  2. 파이프라인으로 이동한 다음 파이프라인 만들기를 선택합니다.

  3. 소스 코드의 위치로 GitHub 를 선택합니다.

    참고

    로그인하려면 GitHub로 리디렉션될 수 있습니다. 그렇다면 GitHub 자격 증명을 입력합니다.

  4. 리포지토리 목록이 나타나면 를 선택합니다 yourname/azure-quickstart-templates/.

    참고

    Azure Pipelines 앱을 설치하기 위해 GitHub로 리디렉션될 수 있습니다. 그렇다면 승인 및 설치를 선택합니다.

  5. 구성 탭이 나타나면 를 선택합니다 Starter pipeline.

  6. 파이프라인의 콘텐츠를 다음 코드로 바꿉 있습니다.

    trigger:
    - none
    
    pool:
      vmImage: 'ubuntu-latest'
    
  7. , administratorLoginadminPass의 세 가지 변수를 만듭니다siteName. adminPass 은 비밀 변수여야 합니다.

    • 변수를 선택합니다.
    • 기호를 + 사용하여 세 개의 변수를 추가합니다. 를 만들 adminPass이 값 비밀 유지를 선택합니다.
    • 완료되면 저장 을 클릭합니다.
    변수 비밀?
    siteName mytestsite 아니요
    adminUser fabrikam 아니요
    adminPass Fqdn:5362!
  8. Azure 리소스 그룹 배포 작업에서 사용할 수 있도록 비밀 변수 $(adminPass) 를 매핑합니다. YAML 파일의 맨 위에서 에 매핑 $(adminPass) 합니다 $(ARM_PASS).

    variables:
      ARM_PASS: $(adminPass)
    
    trigger:
    - none
    
    pool:
      vmImage: 'ubuntu-latest'
    
  9. YAML 파일에 파일 복사 작업을 추가합니다. 프로젝트를 사용합니다 101-webapp-linux-managed-mysql . 자세한 내용은 Azure Database for MySQL 리포지토리를 사용하여 Linux에서 웹앱 빌드 를 참조하세요.

    variables:
      ARM_PASS: $(adminPass)
    
    trigger:
    - none
    
    pool:
      vmImage: 'ubuntu-latest'
    
    steps:
    - task: CopyFiles@2
      inputs:
        SourceFolder: 'quickstarts/microsoft.web/webapp-linux-managed-mysql/'
        Contents: '**'
        TargetFolder: '$(Build.ArtifactStagingDirectory)'
    
  10. Azure 리소스 그룹 배포 작업을 추가하고 구성합니다.

    태스크는 파일 복사 태스크와 파이프라인 변수를 사용하여 빌드한 아티팩트 모두를 참조합니다. 작업을 구성할 때 이러한 값을 설정합니다.

    • 배포 scope(deploymentScope): 배포 scope 로 Resource Group설정합니다. 관리 그룹, Azure 구독 또는 리소스 그룹을 배포 대상으로 지정할 수 있습니다.
    • Azure Resource Manager 연결(azureResourceManagerConnection) : Azure Resource Manager 서비스 연결을 선택합니다. 새 서비스 연결을 구성하려면 목록에서 Azure 구독을 선택하고 권한 부여를 클릭합니다. 자세한 내용은 Microsoft Azure에 연결을 참조하세요.
    • 구독(subscriptionId): 배포가 진행되어야 하는 구독을 선택합니다.
    • 작업(작업): 를 로 Create or update resource group 설정하여 새 리소스 그룹을 만들거나 기존 리소스 그룹을 업데이트합니다.
    • 리소스 그룹: 을 로ARMPipelinesLAMP-rg 설정하여 새 리소스 그룹의 이름을 지정합니다. 기존 리소스 그룹인 경우 업데이트됩니다.
    • Location(location): 리소스 그룹을 배포하기 위한 위치입니다. 가장 가까운 위치(예: 미국 서부)로 설정합니다. 리소스 그룹이 구독에 이미 있는 경우 이 값은 무시됩니다.
    • 템플릿 위치(templateLocation): 로 Linked artifact설정합니다. 템플릿 및 매개 변수 파일의 위치입니다.
    • 템플릿(csmFile): 로 $(Build.ArtifactStagingDirectory)/azuredeploy.json설정합니다. ARM 템플릿의 경로입니다.
    • 템플릿 매개 변수(csmParametersFile): 를 로 $(Build.ArtifactStagingDirectory)/azuredeploy.parameters.json설정합니다. ARM 템플릿에 대한 매개 변수 파일의 경로입니다.
    • 템플릿 매개 변수 재정의(overrideParameters): 를 로 -siteName $(siteName) -administratorLogin $(adminUser) -administratorLoginPassword $(ARM_PASS) 설정하여 이전에 만든 변수를 사용합니다. 이러한 값은 템플릿 매개 변수 파일에 설정된 매개 변수를 대체합니다.
    • 배포 모드(deploymentMode): 리소스를 배포하는 방법입니다. Incremental로 설정합니다. 증분은 ARM 템플릿에 없는 리소스를 유지하며 보다 Complete빠릅니다. Validate 모드를 사용하면 배포하기 전에 템플릿 문제를 찾을 수 있습니다.
    variables:
      ARM_PASS: $(adminPass)
    
    trigger:
    - none
    
    pool:
      vmImage: 'ubuntu-latest'
    
    steps:
    - task: CopyFiles@2
      inputs:
        SourceFolder: 'quickstarts/microsoft.web/webapp-linux-managed-mysql/'
        Contents: '**'
        TargetFolder: '$(Build.ArtifactStagingDirectory)'
    
    - task: AzureResourceManagerTemplateDeployment@3
      inputs:
        deploymentScope: 'Resource Group'
        azureResourceManagerConnection: '<your-resource-manager-connection>'
        subscriptionId: '<your-subscription-id>'
        action: 'Create Or Update Resource Group'
        resourceGroupName: 'ARMPipelinesLAMP-rg'
        location: '<your-closest-location>'
        templateLocation: 'Linked artifact'
        csmFile: '$(Build.ArtifactStagingDirectory)/azuredeploy.json'
        csmParametersFile: '$(Build.ArtifactStagingDirectory)/azuredeploy.parameters.json'
        overrideParameters: '-siteName $(siteName) -administratorLogin $(adminUser) -administratorLoginPassword $(ARM_PASS)'
        deploymentMode: 'Incremental'
    
  11. 저장 및 실행을 클릭하여 템플릿을 배포합니다. 파이프라인 작업이 시작되고 몇 분 후에 에이전트에 따라 작업 상태 을 나타내Success야 합니다.

배포된 리소스 검토

  1. 리소스가 배포되었는지 확인합니다. ARMPipelinesLAMP-rg Azure Portal 리소스 그룹으로 이동하여 App Service, App Service 계획 및 Azure Database for MySQL 서버 리소스가 표시되는지 확인합니다.

    Azure Portal ARM 템플릿 리소스

    Azure CLI를 사용하여 리소스를 확인할 수도 있습니다.

    az resource list --resource-group ARMPipelinesLAMP-rg --output table
    
  2. 새 사이트로 이동합니다. 로 armpipelinetestsite설정 siteName 하면 사이트가 에 https://armpipelinetestsite.azurewebsites.net/있습니다.

리소스 정리

ARM 템플릿을 사용하여 리소스를 삭제할 수도 있습니다. Azure 리소스 그룹 배포 태스크의 action 값을 로 DeleteRG변경합니다. , , , overrideParameterscsmFilecsmParametersFile및 에 대한 templateLocation입력을 제거할 수도 있습니다.deploymentMode

variables:
  ARM_PASS: $(adminPass)

trigger:
- none

pool:
  vmImage: 'ubuntu-latest'

steps:
- task: CopyFiles@2
  inputs:
    SourceFolder: 'quickstarts/microsoft.web/webapp-linux-managed-mysql/'
    Contents: '**'
    TargetFolder: '$(Build.ArtifactStagingDirectory)'

- task: AzureResourceManagerTemplateDeployment@3
  inputs:
    deploymentScope: 'Resource Group'
    azureResourceManagerConnection: '<your-resource-manager-connection>'
    subscriptionId: '<your-subscription-id>'
    action: 'DeleteRG'
    resourceGroupName: 'ARMPipelinesLAMP-rg'
    location: ''<your-closest-location>'

다음 단계