Cloud Run으로 App Engine 표준 환경 앱 마이그레이션

리전 ID

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

리전 ID에 대해 자세히 알아보세요.

이 가이드에서는 공개 IP를 사용하여 Cloud SQL 인스턴스에 연결하는 기존 App Engine 앱을 마이그레이션하는 방법을 설명합니다.

일반적으로 이 가이드의 단계에서는 Cloud Run에서 동일한 애플리케이션 소스 코드를 배포한 후 동일한 Cloud SQL 데이터베이스 사용자를 사용하여 기존 인스턴스와 데이터베이스를 연결하도록 구성하는 방법을 보여줍니다.

내부 비공개 IP 연결을 사용하려면 먼저 애플리케이션 코드를 수정해야 하므로 그 방법은 이 가이드의 단계에 포함되지 않습니다. 하지만 Cloud Run에 앱을 배포한 후 Cloud Run에서 Cloud SQL에 연결의 단계에 따라 비공개 IP 요구사항 및 사용 방법을 배울 수 있습니다.

Cloud Run으로 마이그레이션할 때의 이점을 포함하여 App Engine과 Cloud Run 간의 유사점과 차이점을 자세히 알아보려면 비교 요약을 참조하세요.

시작하기 전에

  1. Cloud Run이 애플리케이션 요구사항을 충족하는지 확인합니다. App Engine과 Cloud Run 비교를 검토하여 CPU 및 메모리와 같은 Cloud Run 리소스가 요구사항을 충족하는지 확인합니다.

  2. 앱 연결을 위한 데이터베이스 사용자 이름과 비밀번호를 포함하여 Cloud SQL 인스턴스에 대한 액세스 권한이 필요합니다. Cloud Run은 암호화를 사용하며 Unix 소켓 또는 Cloud SQL 커넥터 중 하나를 사용하여 Cloud SQL 인증 프록시를 통해 연결합니다.

  3. Cloud Run Admin API 및 Artifact Registry API를 사용 설정합니다.

    API 사용 설정

  4. Cloud Run의 다음과 같은 차이점을 검토하세요.

    • Cloud Run은 특정 서비스에 변경사항을 배포하는 각 시점을 나타내는 데 Version 대신 Revision이라는 용어를 사용합니다. Cloud Run의 서비스에 앱을 처음으로 배포하면 첫 번째 버전이 생성됩니다. 이후에 서비스를 배포할 때마다 다른 버전이 생성됩니다. Cloud Run에 배포하는 방법을 자세히 알아보세요.

    • Google Cloud CLI 또는 Google Cloud 콘솔을 사용하여 소스 코드를 Cloud Run에 배포하면 앱 설정을 구성하고 관리할 수 있습니다. Cloud Run에는 파일 기반 구성이 필요하지 않지만 YAML 구성이 지원되며 app2run 도구를 사용하여 기존 Cloud Run용 App Engine 파일을 변환할 수 있습니다.

    • Cloud Run에 배포하는 모든 서비스는 URL의 run.app 도메인을 사용하여 서비스에 공개적으로 액세스합니다.

    • 기본적으로 공개되는 App Engine 서비스와 달리 Cloud Run 서비스는 기본적으로 비공개이며 공개(미인증) 액세스를 위해서는 별도 구성이 필요합니다.

    • Cloud Run은 App Engine 기존 번들 서비스를 지원하지 않습니다.

이 가이드에서는 App Engine 애플리케이션이 오류 없이 실행된다고 가정합니다.

필요한 역할

새 서비스 계정을 만들 수도 있고, App Engine에서 사용 중인 것과 동일한 사용자 관리형 서비스 계정을 Cloud Run에서 계속 사용할 수도 있습니다. 개발자 또는 관리자가 배포자 계정과 Cloud Build 서비스 계정에 다음 IAM 역할을 부여해야 합니다.

클릭하여 배포자 계정에 필요한 역할 보기

소스에서 빌드하고 배포하는 데 필요한 권한을 얻으려면 관리자에게 다음 IAM 역할을 부여해 달라고 요청하세요.

Cloud Build 서비스 계정에 필요한 역할을 보려면 클릭

이 동작을 재정의하지 않는 한 Cloud Build는 자동으로 Compute Engine 기본 서비스 계정을 기본 Cloud Build 서비스 계정으로 사용하여 소스 코드와 Cloud Run 리소스를 빌드합니다. Cloud Build에서 소스를 빌드할 수 있게 하려면 관리자에게 프로젝트의 Compute Engine 기본 서비스 계정에 Cloud Run 빌더(roles/run.builder)를 부여해 달라고 요청하세요.

  gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
      --role=roles/run.builder
  

PROJECT_NUMBER를 Google Cloud프로젝트 번호로, PROJECT_ID를 Google Cloud프로젝트 ID로 바꿉니다. 프로젝트 ID와 프로젝트 번호를 찾는 방법에 대한 자세한 내용은 프로젝트 만들기 및 관리를 참조하세요.

Compute Engine 기본 서비스 계정에 Cloud Run 빌더 역할을 부여하면 전파되는 데 몇 분 정도 걸립니다.

Cloud Run과 연결된 IAM 역할 및 권한 목록은 Cloud Run IAM 역할Cloud Run IAM 권한을 참조하세요. Cloud Run 서비스가 Cloud 클라이언트 라이브러리와 같은Google Cloud API와 상호작용하는 경우에는 서비스 ID 구성 가이드를 참조하세요. 역할 부여에 대한 자세한 내용은 배포 권한액세스 관리를 참조하세요.

Cloud SQL에 대한 공개 IP 연결에는 다음 역할 중 하나가 있어야 합니다.

  • Cloud SQL 클라이언트(권장)
  • Cloud SQL 관리자
  • 상응하는 Cloud SQL 권한

Cloud Run으로 앱 마이그레이션

App Engine 앱을 Cloud Run에 배포하기 위해 코드를 변경할 필요는 없습니다.

다음 단계에서는 Cloud Run의 새 서비스에 앱을 배포하는 동시에 Cloud SQL에 연결하도록 서비스를 구성합니다.

App Engine 표준 환경과 마찬가지로 Cloud Run은 소스 기반 배포를 지원합니다. 소스 코드 저장소에 액세스할 수 있어야 합니다.

Cloud Run은 내부적으로 빌드팩Cloud Build를 사용하여 소스 코드에서 컨테이너 이미지를 자동으로 빌드하므로 컨테이너를 수동으로 빌드하거나 Dockerfile을 지정할 필요가 없습니다. 하지만 Dockerfile이 있으면 사용됩니다. 소스에서 Cloud Run 서비스를 배포하면 Artifact Registry가 사용되므로 이 기능은 Artifact Registry가 지원되는 리전에서만 사용할 수 있습니다.

이전에 App Engine에 배포한 것과 동일한 소스 코드를 배포하려면 다음 안내를 따르세요.

  1. 애플리케이션의 소스 코드가 있는 소스 디렉터리로 변경합니다.

      cd YOUR_APPENGINE_CODE_DIR
    
  2. Cloud Run에 배포합니다.

    소스 코드를 빌드하고 애플리케이션을 배포하려면 --source 플래그와 함께 deploy 명령어를 실행합니다. App Engine 앱의 app.yaml 파일에 정의된 것과 동일한 SQL 연결 환경 변수를 포함하도록 구성 플래그를 설정해야 합니다.

      gcloud run deploy run-sql --source . \
        --allow-unauthenticated \
        --add-cloudsql-instances INSTANCE_CONNECTION_NAME\
        --set-env-vars INSTANCE_UNIX_SOCKET="/cloudsql/INSTANCE_CONNECTION_NAME" \
        --set-env-vars INSTANCE_CONNECTION_NAME="INSTANCE_CONNECTION_NAME" \
        --set-env-vars DB_NAME="DB_NAME" \
        --set-env-vars DB_USER="DB_USER" \
        --set-env-vars DB_PASS="DB_PASS"
    

    INSTANCE_CONNECTION_NAME을 Cloud SQL 인스턴스의 인스턴스 연결 이름 또는 쉼표로 구분된 연결 이름 목록으로 바꿉니다. 다음을 실행하여 INSTANCE_CONNECTION_NAME을 찾을 수 있습니다.

        gcloud instances describe INSTANCE_NAME
    
    • DB_NAME을 데이터베이스 이름으로 바꿉니다.
    • DB_USER를 데이터베이스의 사용자 이름으로 바꿉니다.
    • DB_PASS를 데이터베이스 사용자의 비밀번호로 바꿉니다.
  3. 메시지가 표시되면 SERVICE의 이름을 입력합니다.

  4. 메시지가 표시되면 y를 응답하여 필요한 API를 설치하도록 프롬프트에 응답합니다. 이 작업은 프로젝트에서 한 번만 수행하면 됩니다. 빌드 및 배포가 완료될 때까지 기다립니다. 완료되면 다음과 비슷한 메시지가 표시됩니다.

    Service [my-app] revision [my-app-00000-xxx] has been deployed and is serving 100 percent of traffic. Service URL: https://sample.run.app
    

    Cloud Run에 소스 코드를 배포하는 방법에 대한 자세한 내용은 소스 코드에서 배포를 참조하세요.

다음 단계

  • Cloud Run에서 Cloud SQL 인스턴스를 연결하는 방법에 대한 Cloud SQL 권장사항을 검토합니다
  • Secret Manager를 사용하여 API 키, 비밀번호 또는 기타 민감한 정보가 필요한 서비스의 종속 항목을 저장하는 방법을 알아봅니다.
  • Cloud Run 서비스를 관리하는 방법을 이해합니다.
  • Cloud Run의 컨테이너 요구사항과 동작을 이해하려면 Cloud Run 컨테이너 런타임 계약을 참조하세요.