App Engine スタンダード環境アプリを Cloud Run に移行する

リージョン 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 Auth Proxy 経由で接続します。

  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 ツールを使用して既存の App Engine ファイルを Cloud Run 用に変換できます。

    • 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 は、ソースコードと Cloud Run リソースのビルドにデフォルトの Cloud Build サービス アカウントとして Compute Engine のデフォルトのサービス アカウントを自動的に使用します。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 サービスがGoogle Cloud APIs(Cloud クライアント ライブラリなど)と連携している場合は、サービス 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 では、内部で BuildpackCloud 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 をインストールするように応答します。この操作が必要なのはプロジェクトごとに 1 回だけです。ビルドとデプロイが完了するまで待ちます。完了すると、次のようなメッセージが表示されます。

    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 にソースコードをデプロイする方法については、ソースコードからのデプロイをご覧ください。

次のステップ