Google App Engine 가변형 환경에서 Go 애플리케이션 배포

3516 단어 devopsgogooglecloud
Google Cloud App Engine은 다음과 같은 다양한 런타임으로 작성된 앱을 배포할 수 있는 Platform as a Service 제품입니다.
  • 파이썬
  • PHP
  • 자바
  • 루비
  • 노드
  • 루비 등

  • App Engine은 표준 환경과 가변형 환경의 두 가지 옵션을 제공합니다.

    Standard 환경은 밀리초 내에 트래픽에 대한 인스턴스를 생성하는 매우 빠른 스핀업 엔진이 있기 때문에 클라우드 네이티브 옵션입니다.

    반면 가변형 환경은 Compute Engine VM에 의존하는 컨테이너 기반 환경으로 인해 다릅니다. 이것은 우리의 사용 및 요구 사항에 따라 서버를 사용자 정의할 수 있으므로 많은 사용 사례에서 중요합니다. 이것은 ImageMagick, MuPDF 라이브러리 또는 SSH와 같은 사용자 정의 패키지를 서버에 설치하거나 자체 bash 스크립트를 실행할 수 있습니다. 모든 유형의 런타임을 사용하여 앱을 실행할 수 있으며 중요한 것은 앱이 응답해야 한다는 것입니다. 일부 변경하지 않는 한 기본 8080 포트에서.

    다음은 그들 사이의 차이점에 대한 자세한 아이디어입니다. Here

    여기에서는 Google App Engine 기본 go 런타임이 아닌 맞춤 런타임의 가변형 환경에 GO 애플리케이션을 배포할 것입니다. 이는 표준과 달리 더 많은 문제를 야기하기 때문입니다. app.yaml과 다른 Docker 파일 두 개를 추가합니다.

    GIN 웹 프레임워크를 사용하여 Hello World를 웹 브라우저에 렌더링하는 간단한 GO 애플리케이션을 사용하겠습니다.

    package main
    
    import (
        "github.com/gin-gonic/gin"
    )
    
    func main() {
        r := gin.Default()
        r.GET("/", func(c *gin.Context) {
            c.String(200, "Hello World")
        })
        r.Run()
    }
    


    세상에 보여줄 시간🤠🤠 . App Engine 가변형 환경을 통해 이러한 사실을 알릴 수 있습니다.

    app.yaml

    runtime: custom
    env: flex
    


    유연한 환경에서 사용자 정의 이미지를 런타임으로 정의하기 때문에 이는 매우 간단합니다. 확장 목적 및 포트 설정을 위해 다른 옵션을 추가할 수 있습니다. 여기에서 확인하세요

    이제 루트 디렉터리에 있는 Docker 파일을 생성해 보겠습니다.

    도커

    # Golang docker image
    FROM golang:1.14
    
    # Set necessary environmet variables needed for our image
    ENV GO111MODULE=on \
        CGO_ENABLED=0 \
        GOOS=linux \
        GOARCH=amd64
    
    # install build essentials (optional)
    RUN apt-get update && \
        apt-get install -y wget build-essential pkg-config --no-install-recommends
    
    # Move to working directory /build
    WORKDIR /build
    
    # Copy and download dependency using go mod
    COPY go.mod .
    COPY go.sum .
    RUN go mod download
    
    # Copy the code into the container
    COPY . .
    COPY . /dist
    
    # Build the application
    RUN go build -o main .
    
    # Move to /dist directory as the place for resulting binary folder
    WORKDIR /dist
    
    # Copy binary from build to main folder
    RUN cp /build/main .
    
    # Export necessary port, default GCP App Engine Port
    EXPOSE 8080
    
    # Command to run when starting the container
    CMD ["/dist/main"]
    


    도커 파일에는 8080을 통해 애플리케이션을 노출하는 데 필요한 모든 구성 설정이 포함됩니다. 여기서 8080은 GAE의 기본 포트입니다.

    또한 필요한 패키지가 배포 시스템에 설치되도록 go.mod 및 go.sum이 루트 디렉터리에 있는지 확인합니다.

    이제 애플리케이션을 배포할 gcloud CLI 세트 프로젝트에서.

     gcloud app deploy
    


    배포에 성공하면 애플리케이션에 대한 URL이 생성되고 사용자 지정 런타임 이미지를 사용하여 Google 앱 엔진 가변형 환경에 앱이 성공적으로 배포됩니다.

    추가로 GORM을 사용하는 애플리케이션이 Google Cloud SQL을 통해 연결되도록 하려면 몇 가지 변경을 수행해야 합니다.

    먼저 프로젝트에서 Cloud SQL Admin API를 사용 설정합니다.
    app.yaml에서 보안 연결을 허용하도록 애플리케이션에 지시해야 합니다. 그렇지 않으면 애플리케이션이 데이터베이스에 연결할 수 있으므로 다음과 같이 변경합니다.

    runtime: custom
    env: flex
    beta_settings:
      cloud_sql_instances: $INSTANCE_CONNECTION_NAME$
    


    $INSTANCE_CONNECTION_NAME$은 인스턴스 세부 정보에서 얻을 수 있는 Cloud SQL의 연결 이름입니다.

    애플리케이션을 배포하기 전과 같습니다.

    gcloud app deploy
    


    유연한 환경으로서 실제로 우리가 만들고 싶은 대로 시스템을 만들고 의도한 대로 작동하도록 구현할 수 있는 많은 구성이 있습니다.

    좋은 웹페이지 즐겨찾기