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. 이 가이드에서는 앱이 오류 없이 실행된다고 가정합니다.

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

  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 앱을 Cloud Run으로 마이그레이션하는 프로세스는 개략적으로 다음 단계로 구성됩니다.

  1. 필요한 API 사용 설정
  2. Cloud Run 서비스 계정 구성
  3. Cloud Run에 앱 배포

필요한 API 사용 설정

앱을 Cloud Run에 배포하려면 먼저 Cloud Run과 Artifact Registry API를 사용 설정해야 합니다.

Google Cloud 콘솔을 사용하여 API를 사용 설정합니다.

API 및 서비스로 이동

Cloud Run 서비스 계정 구성

새 서비스 계정을 만들 수도 있고, App Engine에서 사용 중인 것과 동일한 사용자 관리형 서비스 계정을 Cloud Run에서 계속 사용할 수도 있습니다. 서비스 계정에서 다음 Identity and Access Management(IAM) 역할 또는 상응하는 권한이 구성되어 있는지 확인해야 합니다.

Cloud Run에 배포하려면 다음 중 하나가 있어야 합니다.

  • 소유자
  • 편집자
  • Cloud Run 관리자 역할과 서비스 계정 사용자 역할
  • 상응하는 Cloud Run 권한

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 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"
    

    다음과 같이 바꿉니다.

    • SOURCE를 App Engine 소스 디렉터리의 경로로 바꿉니다.
    • 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 컨테이너 런타임 계약을 참조하세요.