Github 및 Google Cloud Build를 사용하여 API REST .Net 5를 Google Cloud Run에 배포

ASP.NET Core Web API 프로젝트를 만듭니다.



프로젝트에 이름을 지정하고 Github repo 루트 폴더에 넣습니다.



.Net 버전을 선택합니다.

The version you choose here will reflect in dockerfile, so be free to change .net version but remember to adapt your dockerfile.





실행하려면 webapi 옵션을 선택하십시오.



프로젝트를 실행하고 /weatherforecast 엔드포인트에서 GET 요청을 수행하여 문제가 없는지 테스트합니다.



Program.cs


Program.cs를 다음 코드와 같이 변경합니다.

using System;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;

namespace webapi
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args)
        {
            var port = Environment.GetEnvironmentVariable("PORT") ?? "8080";
            var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Development";

            if (environment == "Development")
            {
                return Host.CreateDefaultBuilder(args)
                    .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });
            }
            else
            {
                var url = new[]
                {
                    string.Concat("http://0.0.0.0:", port)
                };
                return Host.CreateDefaultBuilder(args)
                    .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>().UseUrls(url); });
            }
        }
    }
}


이 코드에서는 컨테이너에서 실행될 때 0.0.0.0 IP를 설정하는 것이 중요합니다. Google Cloud Run을 사용할 때 컨테이너 내부에서 실행하거나 코드를 작성하기 때문입니다. 제 경우에는 Delopment 환경을 제외한 모든 환경에 넣어두었습니다.

도커파일



저장소의 루트 폴더에 Dockerfile 파일을 생성합니다. 모든 프로젝트 파일이 루트에 있는지 확인하고 그렇지 않은 경우 루트 폴더로 이동하십시오.



다음 코드를 사용하여 Dockerfile을 편집합니다.

FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build-env
WORKDIR /app

COPY . ./
RUN dotnet publish -c Release -o out

FROM mcr.microsoft.com/dotnet/aspnet:5.0
WORKDIR /app
COPY --from=build-env /app/out .

ENV ASPNETCORE_ENVIRONMENT Production

ENTRYPOINT ["dotnet", "webapi.dll"]


Remember to change de DLL file name in the last line, this name must be exactilly the name of your project main .dll file.
If your project you another folder structure, maybe you'll need make changes in your dockerfile.



모든 파일을 저장하고 커밋합니다.

GCP 클라우드 런



원하는 경우 새 프로젝트를 만듭니다.


Cloud Run를 검색하고 Cloud Run 제품을 엽니다. 새 서비스를 만듭니다.



새 프로젝트를 만들었거나 Cloud Build를 처음 사용하는 경우 저처럼 Cloud Build API를 활성화하는 데 필요할 수 있습니다.


Continuously deploy new revisions from a source repository를 선택하고 Setup With Cluod Build를 클릭합니다.



Important: I connected my Github account previously, therefore, I couldn't take prints in this step, but if its your first time, you need to connect your Github and GCP accounts.



게시할 Github 리포지토리를 선택합니다.



두 번째 단계로 진행하고 Dockerfile 옵션을 확인합니다. Branch 필드에서 표준 값^main$을 유지합니다. 이렇게 하면 브랜치 기본의 모든 커밋이 Cloud Run에 게시될 Cloud Build의 새 빌드를 트리거합니다. 다른 지점으로 변경이 가능하다는 점을 명심하세요.


Service name를 채우고 기본값을 유지했습니다. 지역을 선택하고 다시 기본값을 유지했습니다.

자동 크기 조정 옵션에서 최소 인스턴스로 0을 선택합니다. 이렇게 하면 비용이 줄어들기 때문입니다. 하지만 대기 시간을 줄이고 응답 시간을 개선하려면 적어도 하나의 인스턴스가 필요할 수 있음을 염두에 두십시오.

최소 인스턴스뿐만 아니라 비용을 제한하기 위해 최대 1개의 인스턴스만 선택합니다. 가용성과 안정성을 향상시키려면 트래픽 양에 따라 이 수치를 늘리십시오.



마지막으로 수신 및 인증 설정을 선택합니다. 이 자습서에서는 Allow all trafficAllow unauthenticated invocations 를 선택합니다. 그러나 프로덕션 애플리케이션의 경우 트래픽 및 인증되지 않은 요청을 제한하는 것이 좋습니다.



선택 사항: Container, Connections, Security 메뉴를 열고 컨테이너 용량을 조정합니다.

이 배포의 경우 이에 대해 걱정할 필요가 없으며 후자를 변경할 수 있습니다.

서비스를 저장하고 생성합니다. 기다리다.



모든 작업이 완료되면 다음 이미지와 같은 결과를 얻어야 합니다.



강조표시된 URL은 GCP에서 제공하며 서비스에 액세스하기 위한 공개 URL입니다. /weatherforecast 엔드포인트에 액세스해 보십시오.

URL: https://democsharpgcpcloudrun-lwy2plkqfa-uc.a.run.app/weatherforecast



결론



이 구성을 사용하면 Github 리포지토리의 브랜치 메인에 있는 모든 새 커밋이 Google Cloud Build에서 새 빌드를 트리거하고 빌드가 성공하면 애플리케이션의 새 버전이 Google Cloud Run에 배포됩니다.

Cloud Run에는 새 버전이 API를 손상시키는 경우 버전을 롤백할 수 있는 Reviews라는 리소스가 있습니다.

버전 간 트래픽을 관리할 수 있는 것 외에도 카나리아 방식을 사용하여 배포할 수 있습니다. 아쉽게도 지금까지는 해당 카나리아가 배포와 함께 자동화되도록 구성할 수 없었습니다. 배포 중에 트래픽 관리를 자동화하는 방법을 알고 계시다면 댓글에 달아주세요.

읽어 주셔서 감사합니다. 유용했습니다.

좋은 웹페이지 즐겨찾기