티스토리 뷰

<참조>

https://docs.microsoft.com/ko-kr/azure/azure-resource-manager/vs-azure-tools-resource-groups-deployment-projects-create-deploy

https://docs.microsoft.com/en-us/azure/azure-resource-manager/vs-azure-tools-resource-groups-deployment-projects-create-deploy

https://docs.microsoft.com/ko-kr/visualstudio/install/install-visual-studio?view=vs-2019

https://docs.microsoft.com/ko-kr/azure/azure-resource-manager/resource-manager-tutorial-use-azure-pipelines

https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-manager-tutorial-use-azure-pipelines

https://docs.microsoft.com/ko-kr/azure/azure-resource-manager/vs-resource-groups-project-devops-pipelines

https://docs.microsoft.com/en-us/azure/azure-resource-manager/vs-resource-groups-project-devops-pipelines

 

 

 

 

 

 

 

 

이번 자습서에서는 Visual Studio를 사용하여 WebApp-SQL을 배포하고 Azure Pipelines를 사용하여 Azure Resource Manager 템플릿을 지속적으로 빌드하고 배포하는 방법을 알아본다..

Visual Studio는 템플릿을 생성하고 이를 Azure 구독에 배포하기 위한 Azure 리소스 그룹 프로젝트를 제공한다. 이 프로젝트를 Azure Pipelines과 통합하여 지속적인 통합(CI, Continuous Integration) 및 지속적인 구축(CD, Continuous Deployment)을 할 수 있다.

Azure DevOps는 팀이 작업을 계획하고, 협업을 통해 코드를 개발하고, 애플리케이션을 빌드하여 배포할 수 있도록 지원하는 개발자 서비스를 제공한다. 

Azure Pipelines는 모든 기능을 갖춘 CI(Continuous Integration) 및 CD(continuous Delivery) 서비스다. 선호하는 Git 공급자와 함께 작동하며 대부분의 주요 클라우드 서비스에 배포할 수 있다. 그런 다음, 코드를 빌드하고, 테스트하고, Microsoft Azure, Google Cloud Platform 또는 Amazon Web Services에 배포하는 프로세스를 자동화할 수 있다.

 

 

 

 

 

 

 

필수 조건

이 문서를 완료하려면 다음이 필요하다.

 

 

 

 

 

Azure 리소스 그룹 프로젝트 만들기

 

먼저 Visual Studio 2019에서 WebApp-SQL 템플릿으로 Azure 리소스 그룹 프로젝트를 만든다.

 

프로젝트 이름을 입력하고 Create를 선택한다.

 

Web app + SQL 템플릿을 선택하고 OK를 누른다.

 

솔루션 탐색기 - WebSiteSQLDatabase.json 파일을 열어 다음과 같이 수정한다.

{

  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",

  "contentVersion": "1.0.0.0",

  "parameters": {

    "hostingPlanName": {

      "type": "string",

      "minLength": 1

    },

    "skuName": {

      "type": "string",

      "defaultValue": "S1",

      "allowedValues": [

        "F1",

        "D1",

        "B1",

        "B2",

        "B3",

        "S1",

        "S2",

        "S3"

      ],

      "metadata": {

        "description": "Describes plan's pricing tier and instance size. Check details at https://azure.microsoft.com/en-us/pricing/details/app-service/"

      }

    },

    "skuCapacity": {

      "type": "int",

      "defaultValue": 1,

      "minValue": 1,

      "metadata": {

        "description": "Describes plan's instance count"

      }

    },

    "administratorLogin": {

      "type": "string"

    },

    "administratorLoginPassword": {

      "type": "securestring"

    },

    "databaseName": {

      "type": "string"

    },

    "collation": {

      "type": "string",

      "defaultValue": "SQL_Latin1_General_CP1_CI_AS"

    },

    "edition": {

      "type": "string",

      "defaultValue": "Basic",

      "allowedValues": [

        "Basic",

        "Standard",

        "Premium"

      ]

    },

    "maxSizeBytes": {

      "type": "string",

      "defaultValue": "1073741824"

    },

    "requestedServiceObjectiveName": {

      "type": "string",

      "defaultValue": "Basic",

      "allowedValues": [

        "Basic",

        "S0",

        "S1",

        "S2",

        "P1",

        "P2",

        "P3"

      ],

      "metadata": {

        "description": "Describes the performance level for Edition"

      }

    }

  },

  "variables": {

    "webSiteName": "[concat('webSite', uniqueString(resourceGroup().id))]",

    "sqlserverName": "[concat('sqlserver', uniqueString(resourceGroup().id))]"

  },

  "resources": [

    {

      "name": "[variables('sqlserverName')]",

      "type": "Microsoft.Sql/servers",

      "location": "[resourceGroup().location]",

      "tags": {

        "displayName": "SqlServer"

      },

      "apiVersion": "2014-04-01-preview",

      "properties": {

        "administratorLogin": "[parameters('administratorLogin')]",

        "administratorLoginPassword": "[parameters('administratorLoginPassword')]"

      },

      "resources": [

        {

          "name": "[parameters('databaseName')]",

          "type": "databases",

          "location": "[resourceGroup().location]",

          "tags": {

            "displayName": "Database"

          },

          "apiVersion": "2014-04-01-preview",

          "dependsOn": [

            "[resourceId('Microsoft.Sql/servers/', variables('sqlserverName'))]"

          ],

          "properties": {

            "edition": "[parameters('edition')]",

            "collation": "[parameters('collation')]",

            "maxSizeBytes": "[parameters('maxSizeBytes')]",

            "requestedServiceObjectiveName": "[parameters('requestedServiceObjectiveName')]"

          }

        },

        {

          "type": "firewallrules",

          "apiVersion": "2014-04-01-preview",

          "dependsOn": [

            "[resourceId('Microsoft.Sql/servers/', variables('sqlserverName'))]"

          ],

          "location": "[resourceGroup().location]",

          "name": "AllowAllWindowsAzureIps",

          "properties": {

            "endIpAddress": "0.0.0.0",

            "startIpAddress": "0.0.0.0"

          }

        }

      ]

    },

    {

      "apiVersion": "2015-08-01",

      "name": "[parameters('hostingPlanName')]",

      "type": "Microsoft.Web/serverfarms",

      "location": "[resourceGroup().location]",

      "tags": {

        "displayName": "HostingPlan"

      },

      "sku": {

        "name": "[parameters('skuName')]",

        "capacity": "[parameters('skuCapacity')]"

      },

      "properties": {

        "name": "[parameters('hostingPlanName')]"

      }

    },

    {

      "apiVersion": "2015-08-01",

      "name": "[variables('webSiteName')]",

      "type": "Microsoft.Web/sites",

      "location": "[resourceGroup().location]",

      "dependsOn": [

        "[resourceId('Microsoft.Web/serverFarms/', parameters('hostingPlanName'))]"

      ],

      "tags": {

        "[concat('hidden-related:', resourceGroup().id, '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]": "empty",

        "displayName": "ZerobWebsite"

      },

      "properties": {

        "name": "[variables('webSiteName')]",

        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('hostingPlanName'))]"

      },

      "resources": [

        {

          "apiVersion": "2015-08-01",

          "type": "config",

          "name": "connectionstrings",

          "dependsOn": [

            "[resourceId('Microsoft.Web/Sites/', variables('webSiteName'))]"

          ],

          "properties": {

            "DefaultConnection": {

              "value": "[concat('Data Source=tcp:', reference(resourceId('Microsoft.Sql/servers/', variables('sqlserverName'))).fullyQualifiedDomainName, ',1433;Initial Catalog=', parameters('databaseName'), ';User Id=', parameters('administratorLogin'), '@', variables('sqlserverName'), ';Password=', parameters('administratorLoginPassword'), ';')]",

              "type": "SQLServer"

            }

          }

        }

      ]

    }

  ]

}

 

솔루션 탐색기 - WebSiteSQLDatabase.parameters.json 파일을 열어 다음과 같이 수정한다. 각자 자신의 상황에 맞게 변경하여 수정하고 저장한다.

{

  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",

  "contentVersion": "1.0.0.0",

  "parameters": {

    "hostingPlanName": {

      "value": "zero-plan"

    },

    "administratorLogin": {

      "value": "zerobig"

    },

    "databaseName": {

      "value": "products"

    },

    "skuName": {

      "value": "D1"

    }

  }

}

 

 

 

 

 

Azure 리소스 그룹 배포하기

 

솔루션 탐색기 - AzureResourceGroup-WebApp-SQL을 오른쪽 마우스 메뉴 중 Depoly - New를 선택한다.

 

구독 정보를 선택하고 리소스 그룹을 새로 생성하도록 지정하고 Deploy를 누른다.

 

패스워드를 입력하고 Save를 누른다.

 

다음과 같이 빌드가 개시되고 파워쉘 명령이 구동됨을 나나태는 출력 메시지가 확인된다.

10:39:42 - The following parameter values will be used for this operation:
10:39:42 -     hostingPlanName: zero-plan
10:39:42 -     skuName: D1
10:39:42 -     skuCapacity: 1
10:39:42 -     administratorLogin: zerobig
10:39:42 -     administratorLoginPassword: <securestring>
10:39:42 -     databaseName: products
10:39:42 -     collation: SQL_Latin1_General_CP1_CI_AS
10:39:42 -     edition: Basic
10:39:42 -     maxSizeBytes: 1073741824
10:39:42 -     requestedServiceObjectiveName: Basic
10:39:43 - Build started.
10:39:44 - Project "AzureResourceGroup-WebApp-SQL.deployproj" (StageArtifacts target(s)):
10:39:44 - Project "AzureResourceGroup-WebApp-SQL.deployproj" (ContentFilesProjectOutputGroup target(s)):
10:39:44 - Done building project "AzureResourceGroup-WebApp-SQL.deployproj".
10:39:44 - Done building project "AzureResourceGroup-WebApp-SQL.deployproj".
10:39:44 - Build succeeded.
10:39:44 - Launching PowerShell script with the following command:
10:39:44 - 'C:\Users\zerobig\source\repos\DotNetCoreWebApp\AzureResourceGroup-WebApp-SQL\AzureResourceGroup-WebApp-SQL\bin\Debug\staging\AzureResourceGroup-WebApp-SQL\Deploy-AzureResourceGroup.ps1' -StorageAccountName '' -ResourceGroupName 'AzureResourceGroup-WebApp-SQL' -ResourceGroupLocation 'koreacentral' -TemplateFile 'C:\Users\zerobig\source\repos\DotNetCoreWebApp\AzureResourceGroup-WebApp-SQL\AzureResourceGroup-WebApp-SQL\bin\Debug\staging\AzureResourceGroup-WebApp-SQL\websitesqldatabase.json' -TemplateParametersFile 'C:\Users\zerobig\source\repos\DotNetCoreWebApp\AzureResourceGroup-WebApp-SQL\AzureResourceGroup-WebApp-SQL\bin\Debug\staging\AzureResourceGroup-WebApp-SQL\websitesqldatabase.parameters.json' -ArtifactStagingDirectory '.' -DSCSourceFolder '.\DSC'
10:39:48 -

 

잠시 후 관리자 패스워드를 묻는 PowerShell 창이 뜨면 패스워드를 입력한다.

 

Deployment 생성 작업 수행을 알리며 Azure로 프로비저닝이 진행된다.

정상적으로 진행이 이루어 졌다면 다음과 같이 "Successfully deployed template 'websitesqldatabase.json' to resource group 'AzureResourceGroup-WebApp-SQL'." 메시지를 확인할 수 있다.

10:39:44 - Launching PowerShell script with the following command:
10:39:44 - 'C:\Users\zerobig\source\repos\DotNetCoreWebApp\AzureResourceGroup-WebApp-SQL\AzureResourceGroup-WebApp-SQL\bin\Debug\staging\AzureResourceGroup-WebApp-SQL\Deploy-AzureResourceGroup.ps1' -StorageAccountName '' -ResourceGroupName 'AzureResourceGroup-WebApp-SQL' -ResourceGroupLocation 'koreacentral' -TemplateFile 'C:\Users\zerobig\source\repos\DotNetCoreWebApp\AzureResourceGroup-WebApp-SQL\AzureResourceGroup-WebApp-SQL\bin\Debug\staging\AzureResourceGroup-WebApp-SQL\websitesqldatabase.json' -TemplateParametersFile 'C:\Users\zerobig\source\repos\DotNetCoreWebApp\AzureResourceGroup-WebApp-SQL\AzureResourceGroup-WebApp-SQL\bin\Debug\staging\AzureResourceGroup-WebApp-SQL\websitesqldatabase.parameters.json' -ArtifactStagingDirectory '.' -DSCSourceFolder '.\DSC'
10:39:48 -
10:53:50 - 자세한 정보 표시: 대상 "AzureResourceGroup-WebApp-SQL"에서 "Creating Deployment" 작업을 수행합니다.
10:53:51 - 자세한 정보 표시: 오전 10:53:51 - Template is valid.
10:53:51 - 자세한 정보 표시: 오전 10:53:51 - Create template deployment 'websitesqldatabase-1222-0139'
10:53:51 - 자세한 정보 표시: 오전 10:53:51 - Checking deployment status in 5 seconds
10:53:56 - 자세한 정보 표시: 오전 10:53:56 - Resource Microsoft.Web/serverfarms 'zero-plan' provisioning status is succeeded
10:53:56 - 자세한 정보 표시: 오전 10:53:56 - Resource Microsoft.Sql/servers 'sqlservera55npfen4yrni' provisioning status is
10:53:56 - running
10:53:56 - 자세한 정보 표시: 오전 10:53:56 - Checking deployment status in 28 seconds
10:54:24 - 자세한 정보 표시: 오전 10:54:24 - Resource Microsoft.Web/sites 'webSitea55npfen4yrni' provisioning status is succeeded
10:54:24 - 자세한 정보 표시: 오전 10:54:24 - Checking deployment status in 5 seconds
10:54:29 - 자세한 정보 표시: 오전 10:54:29 - Checking deployment status in 17 seconds
10:54:46 - 자세한 정보 표시: 오전 10:54:46 - Checking deployment status in 5 seconds
10:54:51 - 자세한 정보 표시: 오전 10:54:51 - Resource Microsoft.Web/sites/config 'webSitea55npfen4yrni/connectionstrings'
10:54:51 - provisioning status is succeeded
10:54:51 - 자세한 정보 표시: 오전 10:54:51 - Resource Microsoft.Sql/servers/firewallrules
10:54:51 - 'sqlservera55npfen4yrni/AllowAllWindowsAzureIps' provisioning status is succeeded
10:54:51 - 자세한 정보 표시: 오전 10:54:51 - Resource Microsoft.Sql/servers/databases 'sqlservera55npfen4yrni/products'
10:54:51 - provisioning status is running
10:54:51 - 자세한 정보 표시: 오전 10:54:51 - Resource Microsoft.Sql/servers 'sqlservera55npfen4yrni' provisioning status is
10:54:51 - succeeded
10:54:51 - 자세한 정보 표시: 오전 10:54:51 - Checking deployment status in 29 seconds
10:55:20 - 자세한 정보 표시: 오전 10:55:20 - Checking deployment status in 16 seconds
10:55:37 - 자세한 정보 표시: 오전 10:55:37 - Checking deployment status in 5 seconds
10:55:42 - 자세한 정보 표시: 오전 10:55:42 - Resource Microsoft.Sql/servers/databases 'sqlservera55npfen4yrni/products'
10:55:42 - provisioning status is succeeded
10:55:42 - Account        SubscriptionName              TenantId                             Environment
10:55:42 - -------        ----------------              --------                             -----------
10:55:42 - zerobig.devops Visual Studio Enterprise 2019 54a472fb-xxxx-xxxx-xxxx-fe808f9e6e64 AzureCloud
10:55:42 -
10:55:42 - DeploymentName          : websitesqldatabase-1222-0139
10:55:42 - CorrelationId           : c6955bdd-xxxx-xxxx-xxxx-c5173cbcef7d
10:55:42 - ResourceGroupName       : AzureResourceGroup-WebApp-SQL
10:55:42 - ProvisioningState       : Succeeded
10:55:42 - Timestamp               : 2019-12-22 오전 1:55:42
10:55:42 - Mode                    : Incremental
10:55:42 - TemplateLink            :
10:55:42 - TemplateLinkString      :
10:55:42 - DeploymentDebugLogLevel :
10:55:42 - Parameters              : {[hostingPlanName, Microsoft.Azure.Commands.ResourceManager.Cmdlets.SdkModels.DeploymentVaria
10:55:42 -                           ble], [skuName, Microsoft.Azure.Commands.ResourceManager.Cmdlets.SdkModels.DeploymentVariable
10:55:42 -                           ], [skuCapacity, Microsoft.Azure.Commands.ResourceManager.Cmdlets.SdkModels.DeploymentVariabl
10:55:42 -                           e], [administratorLogin, Microsoft.Azure.Commands.ResourceManager.Cmdlets.SdkModels.Deploymen
10:55:42 -                           tVariable]...}
10:55:42 - ParametersString        :
10:55:42 -                           Name             Type                       Value    
10:55:42 -                           ===============  =========================  ==========
10:55:42 -                           hostingPlanName  String                     zero-plan
10:55:42 -                           skuName          String                     D1       
10:55:42 -                           skuCapacity      Int                        1        
10:55:42 -                           administratorLogin  String                     zerobig  
10:55:42 -                           administratorLoginPassword  SecureString                        
10:55:42 -                           databaseName     String                     products 
10:55:42 -                           collation        String                     SQL_Latin1_General_CP1_CI_AS
10:55:42 -                           edition          String                     Basic    
10:55:42 -                           maxSizeBytes     String                     1073741824
10:55:42 -                           requestedServiceObjectiveName  String                     Basic    
10:55:42 -                          
10:55:42 - Outputs                 :
10:55:42 - OutputsString           :
10:55:42 -
10:55:42 -
10:55:42 -
10:55:42 - Successfully deployed template 'websitesqldatabase.json' to resource group 'AzureResourceGroup-WebApp-SQL'.

 

Azure 포털로 이동하여 확인해 보면, 다음과 같이 정상적으로 배포가 이루어진 것을 확인 할 수 있다.

 

정상적으로 배포가 이루어진 것을 확인되었으니, 생성했던 리소스 그룹은 삭제한다.

뒷 부분에서 Azure DevOps CI/CD 구성을 통해 동일한 내용의 배포를 시도할 것이기 때문이다.

 

 

 

 

 

 

Git Repository 소스 연동 및 Push 

 

먼저 자신의 github.com으로 이동하여 새로운 리포지토리를 생성한다.

 

리포지토리 이름을 입력하고 Create repository를 누른다.

 

생성된 repository의 URL을 복사해둔다.

 

비주얼스튜디오로 돌아와 Solution 'AzureResourceGroup-WebApp-SQL' 오른 쪽 마우스 메뉴 중 "소스 제어에 솔루션 추가"를 선택하면 다음과 같이 자물쇠 표시가 앞에 붙는다.

 

팀탐색기 - Sync를 선택한다.

 

"Git 리포지토리 게시"를 선택한다.

 

복사해 둔 git repository URL을 붙여넣고 "게시"를 누른다.

 

문제가 없다면 출력창에서 정상적으로 Push가 이루어 진것을 확인할 수 있다.

A new Git repository has been created for you in C:\Users\zerobig\source\repos\AzureResourceGroup-WebApp-SQL.
Opening repositories:
C:\Users\zerobig\source\repos\AzureResourceGroup-WebApp-SQL
Commit 6db2b87c created locally in repository C:\Users\zerobig\source\repos\AzureResourceGroup-WebApp-SQL
Opening repositories:
C:\Users\zerobig\source\repos\AzureResourceGroup-WebApp-SQL
Pushing master

 

이제 다시 git repository에 가보면 비주얼스튜디오에 있던 솔루션의 모든 파일이 모두 업로드 되어 있는 것을 확인할 수 있다.

 

 

 

 

 

Azure DevOps 프로젝트 생성

 

Azure DevOps 새로운 프로젝트 생성한다.

 

 

먼저 Build Pipeline을 생성한다.

Pipelines을 선택하고 "Create Pipeline"을 클릭한다.

 

Use the classic editor를 선택한다.

 

소스 선택화면에서 GitHub를 선택하고 GitHub 인증을 수행한 후 소스가 있는 repository를 선택하고 "Continue"를 클릭한다.

 

템플릿 선택화면에서 "Empty job"을 선택한다.

 

Copy files와 Publish build artifacts 태스크를 검색 후 Add 해준다.

 

Copy Files to 태스크에서 다음과 같이 소스 폴더 위치, 컨텐츠 및 타겟 폴더를 지정한다.

 

Publish Artifact: drop 태스크에서는 수정사항이 없다.

 

Save & queue 메뉴에서 "Save $ queue"를 선택한다.

 

"Save and run"을 클릭한다.

 

파이프라인이 정상적으로 동작했다면 다음과 같이 성공결과를 확인할 수 있다.

 

Summary - Build artifacts published - drop을 선택하여 산출물(json 파일)이 정상적으로 생성되었는지 확인해본다.

 

이제 Release Pipeline을 생성한다.

Pipelines - Release를 선택하고 "New Pipeline"을 클릭한다.

 

템플릿 선택화면에서 "Empty job"을 선택한다.

 

Add an artifact을 선택하고 소스 (빌드 파이프라인) 셀랙트박스를 눌러 CI 산출물(ARG-WebApp-SQL-CI)을 선택 후 Add를 클릭한다.

 

Production - 1 job, 0 task를 선택한다.

 

Ajont job +를 눌러 Deployment 키워드를 입력하고 검색 결과 중 "Azure resource group deployment"를 선택해 Add 한다.

 

Azure Deployment 태스크를 선택하고 먼저 Azure 구독을 선택하고 인증을 시도한다.

구독에 대한 인증이 이루어지면, 생성할 리소스 그룹명과 위치를 입력/선택해주고 템플릿과 파라미터 템플릿릿의 위치를 각각 선택하여 지정한다.

 

Override template parameters 입력창 ...을 클릭한다.

 

필요 시 각자 상황에 맞게 파라미터를 수정 및 암호 입력 후 OK를 클릭한다.

 

우측 상단에 "Save"를 선택하고 다시 "OK"를 클릭한다.

 

우측 상단에 "Create release"를 선택하고 다시 "OK"를 클릭한다.

 

좌측 상단에 "Release-1"을 선택한다.

 

배포가 진행 중인 것을 확인할 수 있으며 "In progress"를 선택하여 상세 진행 상황을 확인할 수 있다.

 

배포가 성공적으로 이루어 졌으나 10개의 warnings이 발생하였다. 10 warnings를 클릭한다.

 

"Can't find loc string for key: CorrelationIdForARM" 이라는 내용의 경고가 발생했다.

 

구글링을 통해 확인해 보니, "이 경고는 문자열의 현지화가 누락되었기 때문이다. 우리는 이 문제를 곧 출시할 예정이다." 라고 한다.

동작상에 이슈가 없으니 일단 무시한다.

 

Azure 포털로 이동하여 배포 결과를 확인해본다.

정상적으로 배포가 이루어 진 것을 확인할 수 있다.

 

 

 

 

 

소스 수정 및 CI/CD 구성

 

소스의 수정이 이루어지면 빌드가 유발되도록 구성해보도록 하자.

먼저 Pipelines - Buildes로 이동하여 우측 상단에 Edit을 선택한다.

Triggers 화면에서 "Enable continuous integration"을 체크하고 Save 한다.

 

 

이제 Pipelines - Releases로 이동하여 우측 상단에 Edit을 선택한다.

Artifacts의 번개 아이콘(Continuous deployment trigger)을 선택한다.

 

Continuous deployment trigger를 활성화하고 Save한다.

 

먼저 소스를 수정하기 전에 기존 상태를 확인하도록 한다.

App 서비스 - webSiteliexanilvev5w의 Tags를 보면 displayName이 ZerobWebsite로 되어 있는 것을 확인할 수 있다.

 

GitHub로 이동하여 WebSiteSQLDatabase.json 파일 내 tags 중 webSite "displayName"을 기존 ZerobWebsite에서 0bigWebsite로 변경하고 Commit 한다. (각자 상황에 맞게 수정한다.)

 

소수 수정이 감지되어 CI Build가 유발된다.

 

CI 빌드가 성공적으로 이루어지면 연이어 CD Build가 유발된다.

 

Azure 포털로 이동하여 App 서비스 - webSiteliexanilvev5w의 Tags를 보면 displayName이 정상적으로 0bigWebsite로 업데이트되어 있는 것을 확인할 수 있다.

 

 

 

 

 

 

리소스 정리

다음 실습부터는 Terraform에 대한 것을 다룰 것이므로 생성된 리소스 그룹을 삭제하여 배포된 리소스를 정리하는 것이 좋다.

  1. Azure Portal의 왼쪽 메뉴에서 리소스 그룹을 선택한다.
  2. 이름으로 필터링 필드에서 리소스 그룹 이름을 입력한다.
  3. 해당 리소스 그룹 이름을 선택한다.
  4. 위쪽 메뉴에서 리소스 그룹 삭제를 선택한다.
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함