Cloud Run의 첫 번째 단계

6303 단어 GCPCloudRuntech
이 기고는 Serverless Advent Calendar 2020째 날이다.

클라우드 런이란?


이는 GCP가 제공하는 서버 없는 서비스 중 하나로,'완전하게 관리되는 서버 없는 플랫폼에서 신축 가능한 컨테이너 애플리케이션을 개발해 디버깅이 가능하다'는 특징이 있다.
Cloud Run
이와 유사한 서비스로는 Google App Engine(이하 App Engine)이 있습니다.

클라우드 런의 이점 활용

  • 마이크로 서비스의 간단한 디버깅
  • 하나의 명령으로 컨테이너화된 마이크로 서비스에 대해 해처리를 할 수 있으며, 각 서비스에 대해 고유의 구성을 일일이 결정한 후에 해처리를 할 필요가 없다
  • 단순하고 일관된 개발자 확장
  • 모든 마이크로 서비스는 Docker 이미지로 이루어지고 이 Docker 이미지는 Cloud Run의 디자인 단위이다.
  • 확장 가능한 서버 없음
  • 경영진 클라우드 런이 디자인한 마이크로 서비스는 요청 수량에 따라 자동으로 축소됩니다.
  • 개발자는 기초가 되는 Kubbernetes 클러스터의 구성과 관리를 의식할 필요가 없다.
  • 리소스를 사용하지 않고 요청 없이 경영진 클라우드 런을 0으로 확대합니다.
  • 모든 언어로 작성된 코드 지원
  • 클라우드런은 컨테이너를 기반으로 임의의 언어로 코드를 만들 수 있고 임의의 바이너리나 프레임을 사용할 수 있다.
  • 즉, 공식적으로도 쓰여 있지만 아무래도 서버가 없는 장점인'확장 가능한 관리 서버 없는 플랫폼'은 더욱 두드러진 서비스인 셈이죠.)
    참고 자료

  • Google Kubernetes Engine or Cloud Run: which should you use?(일본어 문장GKE와 Cloud Run은 어떻게 구분해서 사용해야 하나요?
  • 하지만 여기까지의 정보는 App Engine과 다를 게 없다고 생각합니다.
    그렇다면 App Engine과의 차이점을 살펴보겠습니다.

    Cloud Run과 GAE의 차이점


    제목 정보
  • Cloud Run
  • 애플리케이션은 모든 관리 인프라("서버 없음", 계량, 자동 크기 조절) 또는 Google Kubernetes Engine 클러스터를 디버깅할 수 있습니다.
  • App Engine
  • 항상 완전히 관리되어 처리 목표를 선택할 수 없습니다.먼저 영역을 선택할 수 있습니다.
  • 다른 한편, 자동 입찰도 엄격하게 집행된다. 기본 설정은 앱 Engine Flex가 점차적으로 자동으로 1로 정하고 앱 Engine의 2세대는 빠르게 0으로 정하는 것이다.
  • 실행 가능한 실행 시간 정보
  • Cloud Run
  • 용기에서 실행할 수 있는 프로그램이라면 어떤 언어든 실행할 수 있습니다.
  • App Engine
  • App Engine Flex는 모든 언어의 운행 시간을 용기로 실행할 수 있고 App Engine의 2세대는 제한된 언어 운행 시간을 제공한다.
  • 요청 처리 시간 정보
  • Cloud Run
  • HTTPリクエスト/レスポンス 작업 로드를 실행하지만 반드시 웹 브라우저 요청이 필요한 것은 아닙니다.하지만 요청한 처리는 시간이 걸릴 수 있습니다.
  • App Engine
  • HTTP 웹 응용 프로그램을 실행합니다.요청 시간 초과가 비교적 짧습니다.App Engine Classic, Standard 및 Flex는 서로 다른 제한 시간 값
  • 을 설정합니다.
    덮어쓰는 영역 정보
  • Cloud Run
  • 소프트웨어 개발자와 전문가를 포함한 두 측의 팀 설계를 대상으로 한다.
  • 컨테이너 이미지 등을 직접 제작할 수 있고 인프라 부분을 더 맞춤형으로 제작할 수 있다는 뜻이다.
  • App Engine
  • 개발자를 위한 디자인입니다.
  • 출처
    즉, 더 높은 자유도가 클라우드 런을 더 잘 이해한다는 뜻입니다.)

    Cloud Run 테스트


    GCP의 공식 문서가 빠르게 시작됩니다.실제로 해 보세요.
    Quickstart: Build and Deploy
    다음은 정식 전기이다
  • helloworld라는 디렉터리를 만들고 이 디렉터리로 이동하세요
  • mkdir helloworld
    cd helloworld
    

  • Pythonmain.py의 코드를 씁니다
  • .
    vim main.py
    
    import os
    
    from flask import Flask
    
    app = Flask(__name__)
    
    
    @app.route("/")
    def hello_world():
        name = os.environ.get("NAME", "World")
        return "Hello {}!".format(name)
    
    
    if __name__ == "__main__":
        app.run(debug=True, host="0.0.0.0", port=int(os.environ.get("PORT", 8080)))
    
  • Cloud Run에서 상기 Python 코드를 실행하는 Dockerfile
  • 만들기
    vim Dockerfile
    
    FROM python:3.9-slim
    
    ENV PYTHONUNBUFFERED True
    
    ENV APP_HOME /app
    WORKDIR $APP_HOME
    COPY . ./
    
    RUN pip install Flask gunicorn
    
    CMD exec gunicorn --bind :$PORT --workers 1 --threads 8 --timeout 0 main:app
    
  • Docker file에서 만든 컨테이너 이미지에 포함하지 않아도 되는 파일 만들기.dockerignore
  • vim .dockerignore
    
    Dockerfile
    README.md
    *.pyc
    *.pyo
    *.pyd
    __pycache__
    .pytest_cache
    
  • 지금까지의 문서 관계는 다음과 같다
  • # tree -a ../
    ../
    └── helloworld
        ├── .dockerignore
        ├── Dockerfile
        └── main.py
    
    Cloud Build를 통해 지금까지 만든 코드와 Docker file을 컨테이너 이미지로 만들고 Google Container Registry(이하 GCR라고 함)에서 PUSH
  • 및 GCP 인증
  • gcloud auth login -q
    
  • 간단한 조작을 위해 환경 변수 설정
  • export _gcp_pj_id='デプロイしたい GCP Project の ID'
    export _con_img='コンテナイメージの名前'
    
  • 컨테이너 이미지를 만들고 GCR에서 PUSH
  • gcloud builds submit --tag gcr.io/${_gcp_pj_id}/${_con_img} --project ${_gcp_pj_id}
    
  • Cloud Run에서 PUSH 컨테이너 이미지로 어플리케이션 실행
  • gcloud run deploy my-first-run \
        --image gcr.io/${_gcp_pj_id}/${_con_img} \
        --platform managed \
        --project ${_gcp_pj_id} \
        --region asia-northeast1 \
        --allow-unauthenticated
    
    ### 例
    
    # gcloud run deploy my-first-run \
    >     --image gcr.io/${_gcp_pj_id}/${_con_img} \
    >     --platform managed \
    >     --project ${_gcp_pj_id} \
    >     --region asia-northeast1 \
    >     --allow-unauthenticated
    Deploying container to Cloud Run service [my-first-run] in project [My GCP Project ID] region [asia-northeast1]
    ✓ Deploying new service... Done.
      ✓ Creating Revision...
      ✓ Routing traffic...
      ✓ Setting IAM Policy...
    Done.
    Service [my-first-run] revision [my-first-run-00001-tap] has been deployed and is serving 100 percent of traffic.
    Service URL: https://my-first-run-jkkqosglnq-an.a.run.app
    
  • 브라우저에서 확인


  • Cloud Run에 대한 첫 번째 애플리케이션 디버깅 완료:)

    총결산


    주로 앞으로 클라우드 런을 접하는 사람을 위해 클라우드 런의 기본적인 이해와 기본적인 디자인을 배우기 위해서다.
    하지만 빠르게 배우기 시작하는 행위는 클라우드 런의 한 기능에 불과하다.
    클라우드 런 자체의 기능이 더 많고 매일 많은 기능이 확충된다.
    개발자에게 이것은 기능성과 원가성이 모두 매우 좋은 서비스이기 때문에 지금부터 적극적으로 접촉해야 한다!!
    Have fan !! :)

    좋은 웹페이지 즐겨찾기