이 튜토리얼에서는 .NET Framework 웹 애플리케이션을 Compute Engine에 배포하는 방법을 설명합니다.
이 튜토리얼은 Microsoft .NET 및 Compute Engine에 대한 기본 지식이 있는 개발자와 DevOps 엔지니어를 대상으로 합니다.
목표
.NET Framework 4를 사용하고 Windows에서 실행되는 ASP .NET Model-View-Controller(MVC) 웹 애플리케이션을 단일 Compute Engine 인스턴스에 배포합니다.
이 튜토리얼에서는 목표를 달성하기 위해 다음 작업을 완료하는 방법을 보여줍니다.
- Compute Engine VM 배포
- 부하 분산 설정
- ASP.NET 애플리케이션 배포
비용
이 문서에서는 비용이 청구될 수 있는 Google Cloud구성요소를 사용합니다.
프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요.
이 문서에 설명된 태스크를 완료했으면 만든 리소스를 삭제하여 청구가 계속되는 것을 방지할 수 있습니다. 자세한 내용은 삭제를 참조하세요.
시작하기 전에
- Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Compute Engine API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Compute Engine API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.
Compute Engine VM 배포
이 섹션에서는 Linux VM 또는 Compute Engine에서 Microsoft 인터넷 정보 서비스 (IIS) 웹 서버를 실행하는 Windows Server VM을 만드는 방법을 보여줍니다.
프로젝트 ID와 Compute Engine 영역의 기본값을 설정합니다. 이렇게 하면 시간을 단축할 수 있습니다.
gcloud config set project PROJECT_ID gcloud config set compute/zone ZONE
다음을 바꿉니다.
PROJECT_ID를 Google Cloud 프로젝트 ID로 바꿉니다.ZONE을 리소스를 만드는 데 사용할 영역의 이름으로 바꿉니다. 어떤 영역을 선택해야 할지 잘 모르겠으면 지리적으로 가장 가까운 영역을 사용하세요.
예를 들면 다음과 같습니다.
gcloud config set project test-project-12345 gcloud config set compute/zone us-central1-a
VM 인스턴스를 만듭니다.
IIS를 실행하는 Windows Server VM을 만들려면 다음을 수행하세요.
VM 인스턴스의 시작 스크립트를 만듭니다. 이 스크립트는 VM 초기화 중에 실행되며 IIS를 설치합니다.
"# Install IIS Enable-WindowsOptionalFeature -Online -FeatureName `` NetFx4Extended-ASPNET45, `` IIS-WebServerRole, `` IIS-WebServer, `` IIS-CommonHttpFeatures, `` IIS-HttpErrors, `` IIS-HttpRedirect, `` IIS-ApplicationDevelopment, `` IIS-HealthAndDiagnostics, `` IIS-HttpLogging, `` IIS-LoggingLibraries, `` IIS-RequestMonitor, `` IIS-HttpTracing, `` IIS-Security, `` IIS-RequestFiltering, `` IIS-Performance, `` IIS-WebServerManagementTools, `` IIS-IIS6ManagementCompatibility, `` IIS-Metabase, `` IIS-DefaultDocument, `` IIS-ApplicationInit, `` IIS-NetFxExtensibility45, `` IIS-ISAPIExtensions, `` IIS-ISAPIFilter, `` IIS-ASPNET45, `` IIS-HttpCompressionStatic Install-WindowsFeature Web-Mgmt-Service # Install WebDeploy [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType] 'Ssl3,Tls12' (New-Object Net.WebClient).DownloadFile( 'https://download.microsoft.com/download/0/1/D/01DC28EA-638C-4A22-A57B-4CEF97755C6C/WebDeploy_amd64_en-US.msi', ""$env:Temp\webdeploy.msi"") & msiexec /qb! /i $env:Temp\webdeploy.msi | Out-Default " | Out-File -Encoding ASCII startup.ps1VM 인스턴스를 만들고 시작 스크립트
startup.ps1을 실행합니다.gcloud compute instances create clouddemo-1 ` --image-family windows-2019 ` --image-project windows-cloud ` --machine-type n1-standard-2 ` --boot-disk-type pd-ssd ` --tags loadbalancer-backend ` --metadata-from-file sysprep-startup-script-ps1=startup.ps1
직렬 포트 출력을 확인하여 VM의 초기화 프로세스를 모니터링합니다.
gcloud compute instances tail-serial-port-output clouddemo-1
출력으로
Instance setup finished또는Startup finished가 표시될 때까지 5분 정도 기다린 다음 Ctrl+C를 누릅니다. 이제 기본 요건 설치가 완료되었고 VM 인스턴스를 사용할 수 있습니다.
부하 분산 설정
인터넷을 통해 ASP.NET 앱을 제공하려면 HTTPS 부하 분산기를 사용해야 합니다. VM 인스턴스를 부하 분산기와 연결하려면 인스턴스 그룹을 만들고 이 인스턴스 그룹을 부하 분산기에 할당합니다.
비관리형 인스턴스 그룹을 만들고 인스턴스를 추가합니다.
gcloud compute instance-groups unmanaged create clouddemo-1 gcloud compute instance-groups unmanaged add-instances clouddemo-1 --instances clouddemo-1
웹 서버가 실행 중인지 확인하는 상태 점검을 만듭니다.
gcloud compute http-health-checks create clouddemo-health ` --check-interval 5s ` --unhealthy-threshold 2 ` --request-path / gcloud compute instance-groups set-named-ports clouddemo-1 --named-ports=http:80전에 만든 HTTP 상태 점검 및 관리형 인스턴스 그룹을 사용하는 부하 분산기 백엔드 서비스를 만듭니다.
gcloud compute backend-services create clouddemo-backend ` --http-health-checks clouddemo-health ` --port-name http ` --protocol HTTP ` --global gcloud compute backend-services add-backend clouddemo-backend ` --instance-group clouddemo-1 ` --global ` --instance-group-zone $(gcloud config get-value compute/zone)
부하 분산기의 프런트엔드를 만듭니다.
gcloud compute url-maps create clouddemo-map --default-service clouddemo-backend gcloud compute target-http-proxies create clouddemo-proxy --url-map clouddemo-map gcloud compute forwarding-rules create clouddemo-frontend --global --target-http-proxy clouddemo-proxy --ports 80
부하 분산기에서
loadbalancer-backend태그가 주석으로 있는 인스턴스에 HTTP 요청을 보낼 수 있도록 허용하는 방화벽 규칙을 만듭니다.gcloud compute firewall-rules create loadbalancer-backend ` --source-ranges "130.211.0.0/22,35.191.0.0/16" ` --target-tags loadbalancer-backend ` --allow tcp:80,tcp:5000
부하 분산기의 IP 주소를 찾습니다.
gcloud compute forwarding-rules describe clouddemo-frontend --global --format "value(IPAddress)"
IP 주소를 메모해 둡니다. 이 파일은 나중에 필요합니다.
ASP.NET 애플리케이션 배포
PowerShell 콘솔을 엽니다.
GitHub에서 다운로드 및 압축 해제하거나 샘플 저장소를 클론합니다.
git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
배포 패키지를 빌드합니다.
샘플 애플리케이션이 포함된 디렉터리로 전환합니다.
cd dotnet-docs-samples\applications\clouddemo\net4
NuGet 종속 항목 복원:
nuget restore
솔루션을 빌드하고
PackageProfile게시 프로필을 사용하여 WebDeploy 배포 패키지를 만듭니다.msbuild /t:clean,rebuild CloudDemo.Mvc.sln /p:DeployOnBuild=true /p:PublishProfile=PackageProfile
이제
CloudDemo.Mvc\bin폴더에CloudDemo.Mvc.zip파일이 포함되어 있습니다.
배포 패키지를 VM에 복사:
- VM 인스턴스의 사용자 이름과 비밀번호를 만듭니다.
- 원격 데스크톱을 사용하여 VM에 연결하고 이전 단계에서 만든 사용자 이름과 비밀번호를 사용하여 로그인합니다.
CloudDemo.Mvc\bin폴더에서CloudDemo.Mvc.zip파일을 VM 인스턴스의 임시 위치로 복사합니다.- 원격 데스크톱 세션에서 시작 버튼을 마우스 오른쪽 버튼으로 클릭하거나 Win+X를 누르고 Windows PowerShell(관리자)을 클릭합니다.
- 예를 클릭하여 권한 승격 프롬프트를 확인합니다.
배포 패키지를 배포합니다.
&"C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe" -source:package=
PACKAGE-verb:sync -dest:autoPACKAGE을 배포 패키지의 경로로 바꿉니다.
로컬 컴퓨터에서 웹브라우저를 열고 다음 주소로 이동합니다.
http://
LOADBALANCER_IP/LOADBALANCER_IP를 부하 분산기 배포 후에 획득한 IP 주소로 바꿉니다.이제 데모 애플리케이션과 이 앱은 Compute Engine에서 실행 중입니다라는 제목이 표시됩니다.
삭제
튜토리얼을 완료한 후에는 만든 리소스를 삭제하여 할당량 사용을 중지하고 요금이 청구되지 않도록 할 수 있습니다. 다음 섹션은 이러한 리소스를 삭제하거나 사용 중지하는 방법을 설명합니다.
프로젝트 삭제
비용이 청구되지 않도록 하는 가장 쉬운 방법은 가이드에서 만든 프로젝트를 삭제하는 것입니다.
Google Cloud 프로젝트를 삭제합니다.
gcloud projects delete PROJECT_ID
개별 리소스 삭제
프로젝트에 생성된 모든 리소스(예: 인스턴스 그룹, 상태 점검, 백엔드 서비스, HTTP 프록시, 전달 규칙)를 개별적으로 삭제해야 합니다. 이러한 리소스를 모두 삭제할 때까지 VM 인스턴스를 삭제할 수 없습니다.
다음 단계
- Google 인프라에서 가상 머신 만들기 및 실행 자세히 알아보기
- Google Cloud Well-Architected Framework의 권장사항 검토하기
- Google Cloud에 대한 참조 아키텍처, 다이어그램, 권장사항 살펴보기 Cloud 아키텍처 센터 살펴보기