이 튜토리얼에서는 Compute Engine에 .NET 웹 애플리케이션을 배포하는 방법을 설명합니다.
이 튜토리얼은 Microsoft .NET 및 Compute Engine에 대한 기본 지식이 있는 개발자와 DevOps 엔지니어를 대상으로 합니다.
목표
.NET 6을 사용하고 Linux에서 실행되는 ASP .NET Core 웹 애플리케이션을 단일 Compute Engine 인스턴스에 배포합니다.
이 튜토리얼에서는 목표를 달성하기 위해 다음 작업을 완료하는 방법을 보여줍니다.
- Compute Engine VM 배포
- 부하 분산 설정
- ASP.NET 애플리케이션 배포
비용
이 문서에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.
프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요.
이 문서에 설명된 태스크를 완료했으면 만든 리소스를 삭제하여 청구가 계속되는 것을 방지할 수 있습니다. 자세한 내용은 삭제를 참조하세요.
시작하기 전에
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Enable the Compute Engine API.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Enable the Compute Engine API.
Compute Engine VM 배포
이 섹션에서는 Linux VM 또는 Compute Engine에서 Microsoft Internet Information Services(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 인스턴스를 만듭니다.
Linux VM을 만들려면 다음을 수행하세요.
VM 인스턴스의 시작 스크립트를 만듭니다. 스크립트는 VM 초기화 중에 실행되며 .NET 런타임을 설치합니다.
"if ! dpkg-query -W aspnetcore-runtime-6.0 then curl https://packages.microsoft.com/config/debian/11/packages-microsoft-prod.deb -O sudo dpkg -i packages-microsoft-prod.deb rm packages-microsoft-prod.deb sudo apt-get update && sudo apt-get install -y aspnetcore-runtime-6.0 fi " | Out-File -Encoding ASCII startup.sh
VM 인스턴스를 만들고
startup.sh
를 시작 스크립트로 사용합니다.gcloud compute instances create clouddemo-1 ` --image-family debian-11 ` --image-project debian-cloud ` --machine-type n1-standard-2 ` --boot-disk-type pd-ssd ` --tags loadbalancer-backend ` --metadata-from-file startup-script=startup.sh
직렬 포트 출력을 확인하여 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 / ` --port 5000 gcloud compute instance-groups set-named-ports clouddemo-1 --named-ports=http:5000
전에 만든 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\netcore
솔루션을 빌드합니다.
dotnet publish -c Release
배포 패키지를 VM에 복사합니다.
publish
폴더의 콘텐츠를 VM의 홈 디렉터리에 복사합니다.gcloud compute scp --recurse CloudDemo.MvcCore\bin\Release\net6.0\publish clouddemo-1:
VM에서
/var/www/clouddemo
폴더를 만들고 애플리케이션 파일을 이 폴더에 복사합니다.sudo mkdir -p /var/www/clouddemo sudo chown -R www-data:www-data /var/www/clouddemo sudo cp -r publish/* /var/www/clouddemo
애플리케이션을 systemd 단위로 등록합니다.
cat <<EOF > kestrel-clouddemo.service [Unit] Description=Cloud Demo ASP.NET app [Service] WorkingDirectory=/var/www/clouddemo ExecStart=/usr/bin/dotnet /var/www/clouddemo/CloudDemo.MvcCore.dll Restart=always Environment=ASPNETCORE_ENVIRONMENT=Production Environment=ASPNETCORE_URLS=http://0.0.0.0:5000 [Install] WantedBy=multi-user.target EOF sudo mv kestrel-clouddemo.service /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl start kestrel-clouddemo
로컬 컴퓨터에서 웹브라우저를 열고 다음 주소로 이동합니다.
http://
LOADBALANCER_IP
/LOADBALANCER_IP
를 부하 분산기 배포 후에 획득한 IP 주소로 바꿉니다.이제 데모 애플리케이션과 이 앱은 Compute Engine에서 실행 중입니다라는 제목이 표시됩니다.
삭제
튜토리얼을 완료한 후에는 만든 리소스를 삭제하여 할당량 사용을 중지하고 요금이 청구되지 않도록 할 수 있습니다. 다음 섹션은 이러한 리소스를 삭제하거나 사용 중지하는 방법을 설명합니다.
프로젝트 삭제
비용이 청구되지 않도록 하는 가장 쉬운 방법은 가이드에서 만든 프로젝트를 삭제하는 것입니다.
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
개별 리소스 삭제
프로젝트에 생성된 모든 리소스(예: 인스턴스 그룹, 상태 점검, 백엔드 서비스, HTTP 프록시, 전달 규칙)를 개별적으로 삭제해야 합니다. 이러한 리소스를 모두 삭제할 때까지 VM 인스턴스를 삭제할 수 없습니다.
다음 단계
- Google 인프라에서 가상 머신 만들기 및 실행 자세히 알아보기
- Google Cloud 아키텍처 프레임워크에서 권장사항 검토하기
- Google Cloud에 대한 참조 아키텍처, 다이어그램, 권장사항 살펴보기 Cloud 아키텍처 센터 살펴보기