Cloud Run から Cloud SQL for MySQL に接続する

Google Cloud コンソールとクライアント アプリケーションを使用して、MySQL インスタンスに接続された Cloud Run にサンプルアプリをデプロイする方法を学習します。

すべてのステップを適切なタイミングで完了した場合、通常、このクイックスタートで作成されるリソースにかかる費用は 1 ドル(USD)未満です。

始める前に

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. Verify that billing is enabled for your Google Cloud project.

  3. このクイックスタートを完了するために必要な権限があることを確認します。
  4. Cloud Run で Cloud SQL サンプルアプリを実行するために必要な Cloud APIs を有効にします。

    Console

    [API を有効にする] をクリックして、このクイックスタートで必要な API を有効にします。

    API を有効にする

    これにより、次の API が有効になります。

    • Compute Engine API
    • Cloud SQL Admin API
    • Cloud Run API
    • Container Registry API
    • Cloud Build API
    • Service Networking API

    gcloud

    次のボタンをクリックして Cloud Shell を開きます。これにより、ブラウザから Google Cloud リソースにコマンドラインで直接アクセスできます。Cloud Shell を使用することで、このクイックスタートで紹介する gcloud コマンドを実行できます。

    Cloud Shell を開く

    Cloud Shell を使用して次の gcloud コマンドを実行します。

    gcloud services enable compute.googleapis.com sqladmin.googleapis.com run.googleapis.com \
    artifactregistry.googleapis.com cloudbuild.googleapis.com servicenetworking.googleapis.com

    このコマンドにより、次の API が有効になります。

    • Compute Engine API
    • Cloud SQL Admin API
    • Cloud Run API
    • Artifact Registry API
    • Cloud Build API
    • Service Networking API

必要なロール

MySQL インスタンスに接続された Cloud Run にサンプルアプリをデプロイするために必要な権限を取得するには、使用するプロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。

  • Artifact Registry リポジトリを作成または削除する: Artifact Registry 書き込み (roles/artifactregistry.writer)
  • インスタンス、データベース、ユーザーを作成または削除する: Cloud SQL 管理者ロール(roles/cloudsql.admin)。
  • IAM サービス アカウントを作成または削除する: サービス アカウント管理者ロール(roles/iam.serviceAccountAdmin)。
  • 接続を作成する:
  • オブジェクトとそのメタデータを表示する: Storage オブジェクト閲覧者(roles/storage.objectViewer)
  • プロジェクトのポリシーを管理する権限を付与します。プロジェクト IAM 管理者(roles/resourcemanager.projectIamAdmin)。
  • すべての Cloud Run リソースに対する読み取りと書き込みのアクセス権: Cloud Run 開発者(roles/run.developer)。
  • Cloud Run ソースでデプロイされたリソースのデプロイと管理: Cloud Run ソース デベロッパー(roles/run.sourceDeveloper)。
  • 公開アクセスを許可するには: Cloud Run 管理者(roles/run.admin)。
  • サービス アカウントとしてオペレーションを実行する: サービス アカウント ユーザー(roles/iam.serviceAccountUser)。

ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

Cloud SQL の設定

Cloud SQL インスタンスを作成する

データベースの作成

データベースを作成する手順は次のとおりです。

コンソール

  1. Google Cloud コンソールで、Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. [quickstart-instance] を選択します。
  3. SQL ナビゲーション メニューから [データベース] を選択します。
  4. [ データベースを作成] をクリックします。
    1. [データベースの作成] ダイアログの [データベース名] フィールドに「quickstart-db」と入力します。文字セットと照合の値はそのままにします。
    2. [作成] をクリックします。

gcloud

gcloud sql databases create コマンドを実行してデータベースを作成します。

gcloud sql databases create quickstart-db --instance=quickstart-instance

ユーザーを作成する

ユーザーを作成する手順は次のとおりです。

コンソール

  1. Google Cloud コンソールで、Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
  3. SQL ナビゲーション メニューから [ユーザー] を選択します。
  4. [ユーザー アカウントを追加] をクリックします。
    • [ユーザー アカウントをインスタンス instance_name に追加] ページで、次の情報を追加します。
      • ユーザー名: quickstart-user に設定します。
      • パスワード: データベース ユーザーのパスワードを指定します。 このクイックスタートの後半で使用するので、メモしておいてください。
      • [ホスト名] セクションのデフォルト値は [すべてのホストを許可] です。つまり、ユーザーは任意の IP アドレスから接続できます。

        必要に応じて、[IP アドレスまたはアドレス範囲でホストを制限する] を選択し、[ホスト] セクションに IP アドレスまたはアドレス範囲を入力します。これで、ユーザーは指定した IP アドレスからのみ接続できます。

  5. [追加] をクリックします。

gcloud

次のコマンドを実行する前に、次のように置き換えます。

  1. PASSWORD はデータベース ユーザーのパスワードに置き換えます。このクイックスタートの後半で使用するので、メモしておいてください。

gcloud sql users create コマンドを実行してリソースを作成します。

gcloud sql users create quickstart-user \
--instance=quickstart-instance \
--password=PASSWORD

Cloud SQL のユーザー名の長さの上限は、オンプレミス MySQL と同じであり、MySQL 8.0 以降では 32 文字、それより前のバージョンでは 16 文字です。

テーブルを作成する

次の手順に沿って、サンプル アプリケーションの quickstart-db データベースに votes テーブルを作成します。

コンソール

  1. Google Cloud コンソールで、Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. [quickstart-instance] を選択します。
  3. SQL ナビゲーション メニューから [Cloud SQL Studio] を選択します。
  4. [Cloud SQL Studio へのログイン] ダイアログで、次の情報を入力します。
    • [データベース] リストで、[quickstart-db] を選択します。
    • [組み込みデータベース認証] を選択します。
    • [ユーザー] リストで、[quickstart-user] を選択します。
    • [パスワード] フィールドに、ユーザーを作成するセクションで指定したパスワードを入力します。
  5. [認証] をクリックします。
  6. [エクスプローラ] ペインで、[無題のクエリ] をクリックして、クエリエディタを開きます。
  7. votes テーブルを作成するには、クエリエディタに次の SQL ステートメントを入力します。
    CREATE TABLE IF NOT EXISTS votes (
      vote_id INT NOT NULL AUTO_INCREMENT,
      candidate VARCHAR(255) NOT NULL,
      time_cast TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
      PRIMARY KEY (vote_id)
    );
  8. [実行] をクリックします。

gcloud

  1. gcloud sql connect コマンドを実行してインスタンスに接続します。
    gcloud sql connect quickstart-instance \
    --user=quickstart-user
  2. プロンプトが表示されたら、データベース ユーザーのパスワードを入力します。
  3. mysql プロンプトで、次の SQL ステートメントを実行して votes テーブルを作成します。
    USE `quickstart-db`;
    CREATE TABLE IF NOT EXISTS votes (
      vote_id INT NOT NULL AUTO_INCREMENT,
      candidate VARCHAR(255) NOT NULL,
      time_cast TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
      PRIMARY KEY (vote_id)
    );

サンプルアプリを Cloud Run にデプロイする

Cloud Run サービス アカウントを構成する

Cloud Run で使用される Compute Engine のデフォルトのサービス アカウントを構成し、Cloud SQL クライアントと Storage オブジェクト閲覧者のロールを付与します。

コンソール

  1. Google Cloud コンソールで、[IAM サービス アカウント] ページに移動します。

    [IAM サービス アカウント] に移動

  2. サービス アカウントの横にある [アクション] メニューをクリックし、[アクセスを管理] をクリックします。
  3. [別のロールを追加] をクリックし、[ロール] プルダウンで [Cloud SQL クライアント](roles/cloudsql.client)を見つけて選択します。
  4. [別のロールを追加] をクリックし、[ロール] プルダウンで [Storage オブジェクト閲覧者](roles/storage.objectViewer)を見つけて選択します。
  5. [保存] をクリックします。

gcloud

  1. 次の gcloud コマンドを実行して、プロジェクトのサービス アカウントのリストを取得します。
    gcloud iam service-accounts list
  2. Compute Engine のデフォルト サービス アカウントのメールアドレスをコピーします。
  3. 次のコマンドを実行して、Cloud SQL クライアントのロールを Compute Engine のデフォルト サービス アカウントに追加します。
    gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \
      --member="serviceAccount:SERVICE_ACCOUNT_EMAIL" \
      --role="roles/cloudsql.client"
  4. 次のコマンドを実行して、Storage オブジェクト閲覧者のロールを Compute Engine のデフォルト サービス アカウントに追加します。
    gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \
      --member="serviceAccount:SERVICE_ACCOUNT_EMAIL" \
      --role="roles/storage.objectViewer"

Cloud SQL サンプルアプリを構成する

Cloud SQL インスタンス、データベース、クライアント権限を持つサービス アカウントを使用して、Cloud SQL インスタンスに接続するようにサンプル アプリケーションを構成できるようになりました。

サンプルアプリをデプロイする

サンプルを Cloud Run にデプロイする手順は、Cloud SQL インスタンスに割り当てられた IP アドレスのタイプによって異なります。

イメージの接続方法は、設定されている環境変数によって異なります。

  • TCP を使用して接続するには、INSTANCE_HOST 環境変数の値を設定します。この接続方法は、環境変数として構成された証明書とポートを尊重します。
  • Unix ソケットを使用して接続するには、INSTANCE_UNIX_SOCKET 環境変数の値を設定します。

    INSTANCE_HOST 環境変数の値は設定しないでください。

    Unix ソケットは Java でネイティブにサポートされていません。アプリケーションが Java で記述されている場合は、Cloud SQL Java コネクタを使用する必要があります。

  • Cloud SQL 言語コネクタのいずれかを使用して接続するには、INSTANCE_CONNECTION_NAME 環境変数と DB_IAM_HOST 環境変数の値を設定します。

    次の環境変数の値は設定しないでください。

    • INSTANCE_HOST
    • INSTANCE_UNIX_SOCKET
    • DB_PORT
    • DB_ROOT_CERT
    • DB_CERT
    • DB_KEY
    これらの値は使用されません。Cloud SQL 言語コネクタがすでに Cloud SQL Auth Proxy サーバーを使用して安全な接続を提供しており、ポート 3307 で Cloud SQL への接続を確立しているためです。

クリーンアップ

このページで使用したリソースについて、 Google Cloud アカウントに課金されないようにするには、次の手順を実施します。

  1. Google Cloud コンソールで、Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. quickstart-instance インスタンスを選択して [インスタンスの詳細] ページを開きます。
  3. ページ上部にあるアイコンバーで、[削除] をクリックします。
  4. [インスタンスの削除] ダイアログ ボックスで「quickstart-instance」と入力し、[削除] をクリックしてインスタンスを削除します。
  5. Google Cloud コンソールで、[Cloud Run] ページに移動します。

    Cloud Run に移動

  6. quickstart-service サービス名の横にあるチェックボックスをオンにします。
  7. [Cloud Run] ページの上部にある [削除] をクリックします。

省略可能なクリーンアップ手順

Compute Engine サービス アカウントに割り当てた Cloud SQL クライアントのロールを使用しない場合は、削除できます。

  1. Google Cloud コンソールで、[サービス アカウント] ページに移動します。

    [IAM] に移動

  2. Compute Engine のデフォルトのサービス アカウントという名前の IAM アカウントの編集アイコン(鉛筆の形)をクリックします。
  3. Cloud SQL クライアントのロールを削除します。
  4. [保存] をクリックします。

このクイックスタートで有効にした API を使用しない場合は、無効にすることができます。

  • このクイックスタートで有効にした API:
    • Compute Engine API
    • Cloud SQL Admin API
    • Cloud Run API
    • Container Registry API
    • Cloud Build API
  1. Google Cloud コンソールで、[API] ページに移動します。

    [API] に移動

  2. 無効にする API を選択し、[API を無効にする] ボタンをクリックします。

次のステップ

必要に応じて、Cloud SQL インスタンスの作成で詳細をご確認ください。

Cloud SQL インスタンスの MySQL ユーザーとデータベースの作成についても学習できます。

料金の詳細については、Cloud SQL for MySQL の料金をご覧ください。

以下の詳細を確認してください。

また、他の Google Cloud アプリケーションから Cloud SQL インスタンスへの接続についても確認できます。