IaC(Infrastructure as code) 만들기

완료됨

Azure Developer CLI(azd)는 Bicep 또는 Terraform으로 작성된 IaC(Infrastructure as code) 파일을 사용하여 Azure에서 리소스를 프로비전할 수 있습니다. IaC(Infrastructure as code)를 사용하면 배포될 때마다 동일한 환경을 안정적으로 생성하는 선언적 정의 파일에서 인프라 리소스와 구성을 정의할 수 있습니다. azd는 이러한 파일을 실행하여 앱을 호스트하는 데 필요한 Azure 리소스를 만듭니다. IaC(Infrastructure as code) 정의 문서에서 IaC(Infrastructure as code)에 대해 자세히 알아볼 수 있습니다.

이 단원에서는 템플릿에 Bicep 코드를 추가하여 앱에 필요한 리소스를 프로비전합니다. 이 모듈을 완료하는 데 Bicep에 대한 이전 지식이 필요하지는 않습니다. 그러나 azd 템플릿을 광범위하게 사용하려는 경우에는 최소한 Bicep 또는 Terraform의 기본 사항을 숙지하는 것이 좋습니다. Bicep에 대한 자세한 내용은 Bicep의 기본 사항 학습 경로를 참조하세요.

템플릿의 Bicep 또는 Terraform 파일은 infra 폴더에 있습니다. 선택한 Bicep 시작 템플릿은 세 개의 파일을 시작점으로 생성했습니다.

  • main.bicep- Bicep 실행의 주요 진입점 역할을 하며 Azure에서 프로비전될 리소스를 정의하는 데 사용됩니다. 또한 main.bicep 파일은 리소스 정의를 보다 세분화하고 재사용 가능한 파일로 추출할 수 있는 다른 Bicep 모듈(파일)을 참조할 수도 있습니다.
  • abbreviations.json - 유용한 여러 가지 명명 약어를 제공하는 JSON 파일입니다. 이 파일은 실행 중에 main.bicep 파일에 로드되며 다양한 Azure 리소스에 대해 일관되고 논리적인 명명 접두사 집합을 제공합니다.
  • main.parameters.json - 기본 Azure 위치 또는 환경 이름과 같은 중요한 템플릿 매개 변수의 기본값을 정의하는 JSON 파일입니다.

main.bicep 파일을 업데이트하고 더 많은 Bicep 파일을 만들어 앱에 필요한 Azure 리소스를 정의하고 프로비전할 수 있습니다. Main.bicep은 일반적으로 다른 Bicep 모듈 간에 매개 변수를 전달하여 실행을 오케스트레이션합니다. 이 예제에서는 애플리케이션을 호스트하는 Azure App Service를 정의하는 추가 Bicep 모듈을 만듭니다.

  1. 템플릿의 infra 폴더 내에 app.bicep이라는 새 파일을 만듭니다.

  2. app.bicep 파일을 열고 다음 코드 조각을 붙여넣습니다. 코드 주석은 각 코드 섹션의 용도를 설명합니다.

    // Define parameters that can be passed into the module
    // Parameters allow a module to be reusable
    @description('The location of where to deploy resources')
    param location string
    
    @description('The name of the App Service Plan')
    param appServicePlanName string
    
    @description('The name of the App Service')
    param appServiceName string
    
    // Define the App Service Plan to manage compute resources
    resource appServicePlan 'Microsoft.Web/serverfarms@2022-03-01' = {
      name: appServicePlanName
      location: location
      properties: {
        reserved: true
      }
      sku: {
        name: 'F1'
      }
      kind: 'linux'
    }
    
    // Define the App Service to host the application
    resource appService 'Microsoft.Web/sites@2022-03-01' = {
      name: appServiceName
      location: location
      properties: {
        serverFarmId: appServicePlan.id
        siteConfig: {
          linuxFxVersion: 'DOTNETCORE|6.0'
        }
      }
        // Tag used to reference the service in the Azure.yaml file
        tags: { 'azd-service-name': 'web' }
    }
    

    코드 조각은 다음 작업을 수행합니다.

    • 모듈을 다시 사용하고 구성할 수 있도록 모듈에 전달할 수 있는 매개 변수 집합을 정의합니다. 모듈을 더 유연하게 만들기 위해 리소스 정의에 있는 더 많은 값을 매개 변수화하도록 선택할 수 있습니다.
    • App Service 인스턴스의 컴퓨팅 리소스를 관리하는 App Service 요금제를 정의합니다.
    • 배포된 애플리케이션을 호스트할 App Service를 정의합니다.

    참고 항목

    azd-service-name 태그는 나중에 Azure.yaml 구성 파일에서 앱 소스 코드의 폴더를 App Service와 연결하는 데 사용할 App Service Bicep 정의에 포함됩니다.

  3. 새 Bicep 모듈은 템플릿에 대한 App Service를 만들지만 이를 사용하려면 main.bicep을 업데이트해야 합니다. 편집기 내에서 infra 폴더를 찾아 main.bicep 파일을 엽니다.

    시작 템플릿에서 생성된 main.bicep 파일에는 유용한 설정 구성이 포함되어 있습니다. 예를 들어 파일은 environmentNamelocation과 같은 필수 매개 변수를 정의합니다. 기본적으로 이러한 매개 변수가 해당 파일에 포함되어 있으면 main.parameters.json에서 채워지지만 재정의할 수도 있습니다. 또한 시작 코드는 abbreviations.json 파일을 로드하여 작업할 수 있도록 하고, 서비스 이름 지정에 유용한 여러 가지 태그와 토큰을 만들고, 시작하는 데 도움이 되는 팁과 함께 유용한 주석을 포함합니다.

  4. main.bicep 파일의 아래쪽에서 다음과 유사한 주석을 찾습니다.

    // Add resources to be provisioned below.
    // A full example that leverages azd bicep modules can be seen in the todo-python-mongo template:
    // https://github.com/Azure-Samples/todo-python-mongo/tree/main/infra
    

    이 자리 표시자 주석은 프로비전하려는 추가 리소스를 포함할 위치를 강조 표시합니다. App Service를 위해 만든 Bicep 모듈을 포함하고자 하므로 주석 바로 뒤에 다음 코드 조각을 붙여넣습니다.

    module web 'app.bicep' = {
      name: '${deployment().name}-app'
      scope: rg
      params: {
        location: location
        appServiceName: '${abbrs.webSitesAppService}${resourceToken}'
        appServicePlanName: '${abbrs.webServerFarms}${resourceToken}'
      }
    }
    

    코드 조각은 다음 작업을 수행합니다.

    • 이전 단계에서 만든 파일을 가리키는 Bicep 모듈을 정의합니다.
    • Azure 배포 집합에 이름을 할당하고 main.bicep에서 만든 리소스 그룹으로 범위를 지정합니다.
    • 이름 지정을 지원하기 위해 abbreviations.json 값을 사용하여 매개 변수를 모듈에 전달합니다.

이제 앱 소스 코드에 대한 인프라 파일이 템플릿의 일부입니다. 다음 단원에서는 azd 배포 프로세스에 대한 이러한 항목 간의 관계를 설명하는 구성을 추가합니다.