C#로 Cloud Run 시작

1. 소개

89eb4723767d4525.png

Cloud Run은 HTTP 요청을 통해 호출 가능한 스테이트리스(Stateless) 컨테이너를 실행하는 관리형 플랫폼입니다. Cloud Run은 서버리스이므로 인프라 관리가 필요 없습니다. 따라서 개발자가 본연의 업무인 애플리케이션 개발에 집중할 수 있습니다.

Knative에서 빌드되었으므로 컨테이너를 Cloud Run으로 완전 관리형으로 실행하거나 GKE의 Cloud Run을 통해 Google Kubernetes Engine 클러스터에서 실행할 수 있습니다.

이 Codelab의 목표는 컨테이너 이미지를 빌드하여 Cloud Run에 배포하는 것입니다.

2. 설정 및 요구사항

자습형 환경 설정

  1. Google Cloud Console에 로그인하여 새 프로젝트를 만들거나 기존 프로젝트를 재사용합니다. 아직 Gmail이나 Google Workspace 계정이 없는 경우 계정을 만들어야 합니다.

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • 프로젝트 이름은 이 프로젝트 참가자의 표시 이름입니다. 이는 Google API에서 사용하지 않는 문자열이며 언제든지 업데이트할 수 있습니다.
  • 프로젝트 ID는 모든 Google Cloud 프로젝트에서 고유하며, 변경할 수 없습니다(설정된 후에는 변경할 수 없음). Cloud 콘솔은 고유한 문자열을 자동으로 생성합니다. 일반적으로는 신경 쓰지 않아도 됩니다. 대부분의 Codelab에서는 프로젝트 ID (일반적으로 PROJECT_ID로 식별됨)를 참조해야 합니다. 생성된 ID가 마음에 들지 않으면 다른 임의 ID를 생성할 수 있습니다. 또는 직접 시도해 보고 사용 가능한지 확인할 수도 있습니다. 이 단계 이후에는 변경할 수 없으며 프로젝트 기간 동안 유지됩니다.
  • 참고로 세 번째 값은 일부 API에서 사용하는 프로젝트 번호입니다. 이 세 가지 값에 대한 자세한 내용은 문서를 참고하세요.
  1. 다음으로 Cloud 리소스/API를 사용하려면 Cloud 콘솔에서 결제를 사용 설정해야 합니다. 이 Codelab 실행에는 많은 비용이 들지 않습니다. 이 튜토리얼이 끝난 후에 요금이 청구되지 않도록 리소스를 종료하려면 만든 리소스 또는 프로젝트를 삭제하면 됩니다. Google Cloud 신규 사용자는 300달러(USD) 상당의 무료 체험판 프로그램에 참여할 수 있습니다.

Google Cloud Shell

Google Cloud를 노트북에서 원격으로 실행할 수도 있지만 이 Codelab에서는 Cloud에서 실행되는 명령줄 환경인 Google Cloud Shell을 사용합니다.

Cloud Shell은 브라우저를 사용하여 어디서나 액세스할 수 있는 온라인 개발 및 운영 환경입니다. gcloud 명령줄 도구, kubectl 등의 유틸리티가 미리 로드된 온라인 터미널로 리소스를 관리할 수 있습니다. 온라인 Cloud Shell 편집기를 사용하여 클라우드 기반 앱을 개발, 빌드, 디버그, 배포할 수도 있습니다.

가상 머신에는 필요한 개발 도구가 모두 들어 있습니다. 영구적인 5GB 홈 디렉터리를 제공하고 Google Cloud에서 직접 실행되므로 네트워크 성능과 인증이 크게 개선됩니다. 즉, 이 Codelab에 필요한 것은 브라우저뿐입니다(Chromebook에서도 작동 가능).

  • Cloud 콘솔에서 Cloud Shell을 활성화하려면 Cloud Shell 활성화를 클릭하기만 하면 됩니다.

cb81e7c8e34bc8d.png

Cloud Shell을 처음 시작하는 경우에는 무엇이 있는지 설명하는 중간 화면이 표시됩니다. 중간 화면이 표시되면 계속을 클릭합니다.

bfde7b083abc9544.png

환경을 프로비저닝하는 데 몇 초밖에 걸리지 않습니다.

cbb597d2be277a14.png

Cloud Shell에 연결되면 인증이 완료된 것을 볼 수 있습니다.

gcloud auth list

명령어 결과

Credentialed Accounts

ACTIVE: *
ACCOUNT: <my-account>@<mydomain>

프로젝트도 이미 PROJECT_ID로 설정되어 있어야 합니다 (웹 콘솔에서 프로젝트를 선택했다고 가정).

gcloud config list project

명령어 결과

[core]
project = <PROJECT_ID>

어떤 이유로든 프로젝트가 설정되지 않았으면 다음 명령어를 실행하면 됩니다.

gcloud config set project <PROJECT_ID>

PROJECT_ID를 찾고 계신가요? Cloud 콘솔 상단에 있는 드롭다운을 확인하세요.

2c7a57249d954735.png

'설정 및 유틸리티'를 사용하여 프로젝트 세부정보를 확인할 수도 있습니다. 섹션:

791f101797cfef39.png

또한 Cloud Shell은 기본적으로 이후 명령어를 실행할 때 유용할 수 있는 몇 가지 환경 변수를 설정합니다.

echo $GOOGLE_CLOUD_PROJECT

명령어 결과

<PROJECT_ID>
  • 마지막으로 기본 영역을 설정할 수 있습니다.
gcloud config set compute/zone us-central1-f

다른 영역을 선택할 수 있습니다. 자세한 내용은 리전 및 영역을 참조하세요.

Cloud Run API를 사용 설정합니다.

Cloud Shell에서 Cloud Run API를 사용 설정합니다.

gcloud services enable run.googleapis.com

그러면 다음과 유사한 성공 메시지가 표시됩니다.

Operation "operations/acf.cc11852d-40af-47ad-9d59-477a12847c9e" finished successfully.

3. 샘플 애플리케이션 작성

HTTP 요청에 응답하는 간단한 ASP.NET C# 애플리케이션을 빌드합니다.

애플리케이션을 만들려면 Cloud Shell에서 dotnet 명령줄 도구를 사용합니다.

dotnet new web -o helloworld-csharp

helloworld-csharp 디렉터리로 변경합니다.

cd helloworld-csharp

그런 다음 Program.cs를 다음과 일치하도록 업데이트합니다.

var builder = WebApplication.CreateBuilder(args);

var port = Environment.GetEnvironmentVariable("PORT") ?? "8080";
var url = $"http://0.0.0.0:{port}";
builder.WebHost.UseUrls(url);

var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();

이 코드는 PORT 환경 변수로 정의된 포트를 리슨하고 Hello World로 응답하는 기본 웹 서버를 만듭니다.

Cloud Shell에서 로컬로 앱을 실행하여 테스트할 수 있습니다. 포트 8080에서 수신 대기하는 것을 확인할 수 있습니다.

$ dotnet run
Using launch settings from /home/atameldev/helloworld-csharp/Properties/launchSettings.json...
Hosting environment: Development
Content root path: /home/atameldev/helloworld-csharp
Now listening on: http://0.0.0.0:8080
Application started. Press Ctrl+C to shut down.

4. Cloud Run에 배포

다음 명령어를 사용하여 애플리케이션을 Cloud Run에 배포합니다.

gcloud run deploy hello-world \
    --allow-unauthenticated \
    --region us-central1 \
    --source .
  • hello-world은 서비스 이름입니다.
  • allow-unauthenticated 플래그는 서비스를 인증 요구사항 없이 공개적으로 사용 가능한 서비스로 배포합니다.
  • us-central1은 앱이 배포될 리전입니다.
  • source 플래그는 빌드할 소스의 위치를 결정합니다. Cloud Run은 빌드팩을 사용하여 소스 코드에서 자동으로 컨테이너를 만듭니다.

배포가 완료될 때까지 몇 분 정도 기다립니다. 성공하면 명령줄에 서비스 URL이 표시됩니다.

Service [hello-world] revision [hello-world-00001-yos] has been deployed and is serving 100 percent of traffic.
Service URL: https://helloworld-wdl7fdwaaa-uc.a.run.app

이제 웹브라우저에서 서비스 URL을 열어 배포된 컨테이너로 이동할 수 있습니다.

85e7fbbd264444c9.png

축하합니다. 컨테이너 이미지로 패키징된 애플리케이션을 Cloud Run에 배포했습니다. Cloud Run은 수신된 요청을 처리하기 위해 컨테이너 이미지를 자동 및 수평 확장한 다음 수요가 감소하면 축소합니다. 요청 처리 도중 소비한 CPU, 메모리, 네트워킹에 대해서만 비용을 지불하면 됩니다.

5. 정리 시간

GCP 프로젝트를 삭제하여 비용이 청구되지 않도록 하거나(해당 프로젝트 내에서 사용된 모든 리소스에 대한 청구가 중지됨) Cloud Run 서비스를 삭제할 수 있습니다.

gcloud run services delete helloworld

6. 다음 단계

다음 단계로 GKE의 Cloud Run에 배포하는 것이 좋습니다.

코드 소스에서 Cloud Run에 적합한 스테이트리스(Stateless) HTTP 컨테이너를 빌드하여 Container Registry로 푸시하는 자세한 과정은 다음을 참조하세요.