App Engine 가변형 환경에서 커스텀 런타임 앱 만들기

리전 ID

REGION_ID는 앱을 만들 때 선택한 리전을 기준으로 Google에서 할당하는 축약된 코드입니다. 일부 리전 ID는 일반적으로 사용되는 국가 및 주/도 코드와 비슷하게 표시될 수 있지만 코드는 국가 또는 주/도와 일치하지 않습니다. 2020년 2월 이후에 생성된 앱의 경우 REGION_ID.r이 App Engine URL에 포함됩니다. 이 날짜 이전에 만든 기존 앱의 경우 URL에서 리전 ID는 선택사항입니다.

커스텀 런타임을 사용하면 Dockerfile로 정의되는 환경에서 실행되는 앱을 빌드할 수 있습니다. Dockerfile을 사용하면 Google Cloud Platform에 포함되지 않은 언어와 패키지를 사용할 수 있으며 App Engine 가변형 환경에서 사용되는 리소스 및 도구를 사용할 수 있습니다.

이 빠른 시작에서는 nginx 웹 서버가 커스텀 런타임을 사용하여 App Engine으로 시작됩니다.

시작하기 전에

이 빠른 시작에서 샘플 앱을 실행하기 전에 환경을 설정하고 App Engine의 새로운 Google Cloud 프로젝트를 만들어야 합니다.

  1. Google Cloud 콘솔을 사용하여 새 Google Cloud 프로젝트를 만듭니다.

    1. Google Cloud 콘솔을 엽니다.

      프로젝트 페이지로 이동

    2. 프로젝트 만들기를 클릭한 후 새 Google Cloud 프로젝트 이름을 지정합니다.

    3. 새로운 결제 계정을 만들거나 기존 결제 계정을 설정하여 새로운 Google Cloud 프로젝트에서 결제를 사용 설정합니다.

      결제 페이지로 이동

  2. Google Cloud CLI를 다운로드 및 설치한 후 gcloud CLI를 초기화합니다.

    SDK 다운로드

  3. 다음 gcloud 명령어를 실행하여 App Engine 애플리케이션을 만들고 앱을 실행할 지리적 리전을 지정합니다.

    gcloud app create
    

App Engine 위치

App Engine은 리전을 기반으로 합니다. 즉, 앱을 실행하는 인프라가 특정 리전에 위치해 있으며 해당 리전 내의 모든 영역에서 중복으로 사용할 수 있도록 Google이 관리합니다.

앱을 실행하는 리전을 선택하는 데 있어 중요한 기준은 지연 시간, 가용성 또는 내구성 요구사항입니다. 일반적으로 앱 사용자와 가장 가까운 리전을 선택할 수 있지만 App Engine을 사용할 수 있는 위치와 앱에서 사용하는 다른 Google Cloud 제품 및 서비스의 위치도 고려해야 합니다. 여러 위치에서 서비스를 사용하면 앱의 지연 시간과 가격 책정에 영향을 미칠 수 있습니다.

앱의 리전을 설정한 후에는 변경할 수 없습니다.

App Engine 애플리케이션을 이미 만든 경우 다음 중 한 가지 방법으로 해당 리전을 볼 수 있습니다.

Hello World 앱 다운로드

  1. 다음 방법 중 하나를 선택하여 Hello World 샘플 앱을 GitHub에서 로컬 머신으로 다운로드합니다.

    • 다음 저장소에서 Hello World 샘플 앱을 클론합니다.

      git clone https://github.com/GoogleCloudPlatform/appengine-custom-runtimes-samples
      
    • .zip 파일로 샘플을 다운로드한 다음 로컬 디렉터리에 압축을 풉니다.

  2. 샘플 코드가 있는 nginx 디렉터리로 이동합니다. 예를 들면 다음과 같습니다.

    cd appengine-custom-runtimes-samples/nginx
    

로컬 머신에서 Hello World 실행

Docker를 다운로드하고 설치하여 샘플 앱을 테스트한 다음 로컬 머신에서 Hello World 컨테이너를 실행할 수 있습니다.

App Engine에만 요구되는 단계는 없으므로 원하는 도구와 방식을 사용하여 샘플 앱을 테스트할 수 있습니다.

App Engine에 Hello World 배포

샘플 앱을 App Engine에 배포할 준비가 되면 다음 단계를 수행하세요.

  1. app.yamlDockerfile이 있는 디렉터리에서 다음 명령어를 실행합니다.

    gcloud app deploy
    

    선택적 플래그 알아보기

  2. https://PROJECT_ID.REGION_ID.r.appspot.com에서 실행중인 앱을 보려면 다음 명령어를 실행하여 브라우저를 시작합니다.

    gcloud app browse
    

일반 gcloud 명령어 플래그

  • 앱 버전을 고유하게 식별하는 ID를 지정하려면 --version 플래그를 포함합니다. 그렇지 않으면 ID가 자동으로 생성됩니다. 예를 들면 --version [YOUR_VERSION_ID]입니다.
  • --project 플래그를 포함하여 gcloud 도구에서 기본값으로 초기화한 값으로 대체 Google Cloud 프로젝트 ID를 지정합니다. 예를 들면 --project [YOUR_PROJECT_ID]입니다.

예를 들면 다음과 같습니다.

gcloud app deploy --version pre-prod-5 --project my-sample-app

명령줄에서 앱을 배포하는 방법에 대한 자세한 내용은 앱 테스트 및 배포를 참조하세요. 전체 명령어 플래그 목록은 gcloud app deploy 참조를 확인하세요.

삭제

이 페이지에서 사용한 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 다음 단계를 수행합니다.

  1. Google Cloud 콘솔에서 리소스 관리 페이지로 이동합니다.

    리소스 관리로 이동

  2. 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제를 클릭합니다.
  3. 대화상자에서 프로젝트 ID를 입력한 후 종료를 클릭하여 프로젝트를 삭제합니다.

다음 단계

Dockerfile에 대한 자세한 내용은 Dockerfile 참조 문서를 확인하세요.

커스텀 런타임을 만드는 방법에 대한 자세한 내용은 커스텀 런타임 빌드를 참조하세요.

코드 검토

Hello World는 가장 간단한 App Engine 앱으로, 서비스가 하나만 포함되어 있고 버전이 하나뿐인 단일 컨테이너를 생성합니다. 이 섹션에서는 앱의 각 파일을 자세히 설명합니다.

app.yaml

앱 구성을 지정합니다. app.yaml 파일은 Dockerfile 파일과 같은 디렉터리에 있어야 합니다.

runtime: custom
env: flex

runtime: custom 항목은 App Engine에 런타임 이미지를 정의하는 Dockerfile을 찾도록 지시하고 env: flex는 가변형 환경에 배포하도록 지정합니다.

자세한 내용은 app.yaml 참조를 확인하세요.

Dockerfile

샘플 앱의 컨테이너를 위한 Docker 이미지를 만드는 데 사용되는 일련의 지침을 정의합니다. Dockerfile 파일은 app.yaml 파일과 동일한 디렉터리에 있어야 합니다. 이 Dockerfile은 nginx 웹 서버를 설치하고 몇 가지 기본 구성을 복사합니다.

# The standard nginx container just runs nginx. The configuration file added
# below will be used by nginx.
FROM nginx

# Copy the nginx configuration file. This sets up the behavior of nginx, most
# importantly, it ensure nginx listens on port 8080. Google App Engine expects
# the runtime to respond to HTTP requests at port 8080.
COPY nginx.conf /etc/nginx/nginx.conf

# create log dir configured in nginx.conf
RUN mkdir -p /var/log/app_engine

# Create a simple file to handle health checks. Health checking can be disabled
# in app.yaml, but is highly recommended. Google App Engine will send an HTTP
# request to /_ah/health and any 2xx or 404 response is considered healthy.
# Because 404 responses are considered healthy, this could actually be left
# out as nginx will return 404 if the file isn't found. However, it is better
# to be explicit.
RUN mkdir -p /usr/share/nginx/www/_ah && \
    echo "healthy" > /usr/share/nginx/www/_ah/health

# Finally, all static assets.
ADD www/ /usr/share/nginx/www/
RUN chmod -R a+r /usr/share/nginx/www

FROM 명령어는 nginx 웹 서버의 공식 Docker 이미지를 사용하여 기본 이미지를 만듭니다.

Dockerfile을 사용하면 컨테이너 이미지에 nginx가 포함되고 www/ 디렉터리의 모든 콘텐츠를 애플리케이션에서 사용할 수 있습니다.

또한 Hello World 샘플 앱에는 기본 nginx 구성 정보가 포함된 nginx.conf 파일과 nginx 웹 서버의 루트 페이지 역할을 하는 index.html 파일도 포함됩니다.