リージョン 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 の類似点と相違点を詳しく確認するには、比較の概要をご覧ください。
始める前に
- Cloud Run がアプリケーション要件を満たしていることを確認します。App Engine と Cloud Run の比較を確認して、CPU やメモリなどの Cloud Run リソースがニーズを満たしているかどうかを確認します。
このガイドでは、アプリがエラーなしで実行されていることを前提としています。
アプリを接続するためのデータベース ユーザー名とパスワードを含め、Cloud SQL インスタンスへのアクセスが必要です。Cloud Run は暗号化を使用し、Unix ソケットまたは Cloud SQL コネクタを使って Cloud SQL Auth Proxy 経由で接続します。
次に示す 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 アプリを Cloud Run に移行するプロセスは、大まかに以下の手順からなります。
必要な API を有効にする
アプリを Cloud Run にデプロイする前に、まず Cloud Run API と Artifact Registry API の両方を有効にする必要があります。
Google Cloud コンソールを使用して、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 はコンテナベースとソースベースの両方のデプロイをサポートしています。使用するデプロイ方法に応じて、コンテナ イメージまたはソースコード リポジトリにアクセスする必要があります。
コンテナ イメージをデプロイする
手動でビルドされたコンテナを使用して App Engine サービスがデプロイされている場合、同じコンテナ イメージを使用して Cloud Run にサービスをデプロイできます。App Engine コンテナ イメージを Cloud Run にデプロイするには、次の手順に沿って操作します。
コンテナ イメージが配置されているレジストリ URL をメモします。これは、App Engine でデプロイするときに
--image-url
フラグで指定する URL と同じです。コンテナ イメージを次のようにデプロイします。
コンソール
Google Cloud コンソールで [Cloud Run] ページに移動します。
[サービスを作成] をクリックします。
[コンテナ イメージの URL] 欄で [選択] ボタンをクリックし、App Engine 用にデプロイしたコンテナ イメージを選択します。
サービスの名前を入力します。デプロイするアプリを表す一意の名前を選択します。
[認証] で、[未認証の呼び出しを許可] を選択します。
Cloud Run 用に、App Engine アプリの
app.yaml
ファイル内で定義したものと同じ環境変数を作成する必要があります。[コンテナ、ネットワーキング、セキュリティ] セクションを開き、[環境変数] で [変数を追加] をクリックして、次の環境変数を作成します。Unix ソケットの場合、次を追加します。
INSTANCE_UNIX_SOCKET: /cloudsql/INSTANCE_CONNECTION_NAME
Cloud SQL コネクタの場合は、次を追加します。
INSTANCE_CONNECTION_NAME:INSTANCE_CONNECTION_NAME
project:region:instance-id
の形式に則って、INSTANCE_CONNECTION_NAME を実際のプロジェクト ID、リージョン、インスタンスに置き換えます。これは、Google Cloud コンソールのインスタンスの [概要] ページで確認できます。これらの接続は、追加構成なしで自動的に暗号化されます。
DB_NAME
: データベースの名前。DB_USER
: データベース ユーザーのユーザー名。DB_PASS
: データベースの作成時に指定したパスワード。
[Cloud SQL 接続] で、[接続を追加] ボタンをクリックし、App Engine 用に以前に作成したインスタンスを選択します。
[デプロイ] をクリックします。Cloud Run サービスをデプロイすると、[サービスの詳細] ページの一番上に URL が表示されます。URL をクリックして、Cloud SQL に接続された Cloud Run にデプロイされたアプリを確認します。
gcloud
次のコマンドを実行して、Cloud Run に新しいサービスを作成します。App Engine アプリの
app.yaml
ファイルで定義されている同じ SQL 接続環境変数を含めるように構成フラグを設定する必要があります。gcloud run deploy run-sql --image IMAGE \ --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"
以下のように置き換えます。
- IMAGE は、デプロイするイメージに置き換えます。
INSTANCE_CONNECTION_NAME は、Cloud SQL インスタンスのインスタンス接続名、または複数の接続名からなるカンマ区切りリストに置き換えます。
INSTANCE_CONNECTION_NAME
を確認するには、次のコマンドを実行します。gcloud instances describe INSTANCE_NAME
DB_NAME はデータベースの名前に置き換えます。
DB_USER はデータベースのユーザー名に置き換えます。
DB_PASS はデータベース ユーザーのパスワードに置き換えます。
ソースコードをデプロイする
Cloud Run では、内部で Buildpack と Cloud Build を使用してソースコードからコンテナ イメージを自動的にビルドします。コンテナを手動でビルドしたり、Dockerfile を指定したりする必要はありません。ただし、Dockerfile が存在する場合はそれが使用されます。
Cloud Run サービスのソースからのデプロイでは Artifact Registry が使用されるため、この機能は Artifact Registry でサポートされているリージョンでのみ使用できます。
以前に App Engine にデプロイしたのと同じソースコードをデプロイするには:
アプリケーションのソースコードがあるソース ディレクトリに移動します。
cd YOUR_APPENGINE_CODE_DIR
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 はデータベース ユーザーのパスワードに置き換えます。
プロンプトが表示されたら、SERVICE の名前を入力します。
プロンプトが表示されたら、「
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 にソースコードをデプロイする方法については、ソースコードからのデプロイをご覧ください。
次のステップ
- Cloud Run から Cloud SQL インスタンスを接続するための Cloud SQL のベスト プラクティスを確認する。
- Secret Manager を使用して、API キー、パスワード、その他の機密情報を必要とするサービスの依存関係をどのように保存するかを学習する。
- Cloud Run サービスを管理する方法を理解する。
- Cloud Run のコンテナの要件と動作については、Cloud Run のコンテナ ランタイムの契約をご覧ください。