Google Kubernetes Engine から Cloud SQL for SQL Server に接続する
このページでは、 Google Cloud コンソールとクライアント アプリケーションを使用して、SQL Server インスタンスに接続された Google Kubernetes Engine(GKE)にサンプルアプリをデプロイする方法について説明します。このクイックスタートで作成されるリソースにかかる費用は、クリーンアップを含む手順を適切なタイミングで完了した場合、通常 1 ドル(USD)未満です。
始める前に
- Google Cloud アカウントにログインします。 Google Cloudを初めて使用する場合は、 アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that you have the permissions required to complete this guide.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Artifact Registry, Cloud Build, Cloud SQL Admin, Compute Engine, Kubernetes Engine, Service Networking APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
gcloud CLI をインストールします。
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化するには、次のコマンドを実行します。
gcloud init -
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that you have the permissions required to complete this guide.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Artifact Registry, Cloud Build, Cloud SQL Admin, Compute Engine, Kubernetes Engine, Service Networking APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
gcloud CLI をインストールします。
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化するには、次のコマンドを実行します。
gcloud init
必要なロール
このクイックスタートで説明されているタスクを完了するために必要な権限を取得するには、クイックスタート プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。
-
すべての Cloud SQL インスタンス、データベース、ユーザーの作成、更新、削除を行います。
-
Cloud SQL 管理者(
roles/cloudsql.admin) -
Compute 閲覧者 (
roles/compute.viewer)
-
Cloud SQL 管理者(
-
プライベート IP を使用して Cloud SQL インスタンスを作成します(プライベート サービス アクセス接続)。
コンピューティング ネットワーク管理者 (
roles/compute.networkadmin) -
Google Kubernetes Engine クラスタを作成して管理する: Kubernetes Engine 管理者 (
roles/container.admin) -
プロジェクトのサービス アカウントを作成して管理する:
-
プロジェクト IAM 管理者(
roles/resourcemanager.projectIamAdmin) -
サービス アカウント管理者(
roles/serviceAccountAdmin)
-
プロジェクト IAM 管理者(
-
プロジェクトの Artifact Registry にリポジトリを作成する: Artifact Registry 管理者 (
roles/artifactregistry.admin) -
Cloud Build でアプリケーションを送信してビルドする:
-
Cloud Build 編集者(
roles/cloudbuilds.builds.editor) - ストレージのオブジェクト作成者(
roles/storage.objectCreator) -
ストレージ バケット閲覧者 (
roles/storage.bucketViewer) -
サービス アカウント ユーザー(
roles/iam.serviceAccountUser) - ログ閲覧者(
roles/logging.viewer)
-
Cloud Build 編集者(
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
Cloud SQL の設定
Cloud SQL インスタンスを作成する
データベースの作成
データベースを作成する手順は次のとおりです。
コンソール
-
Google Cloud コンソールで、Cloud SQL の [インスタンス] ページに移動します。
- [
quickstart-instance] を選択します。 - SQL ナビゲーション メニューから [データベース] を選択します。
- [データベースを作成] をクリックします。
- [新しいデータベース] ダイアログ ボックスの [データベース名] フィールドに「
quickstart-db」と入力します。 - [作成] をクリックします。
gcloud
gcloud
sql databases create コマンドを実行してデータベースを作成します。
gcloud sql databases create quickstart-db --instance=quickstart-instance
GKE クラスタを作成する
コンソール
-
Google Cloud コンソールで、[Google Kubernetes Engine] ページに移動します。
- [作成] をクリックします。
- GKE Autopilot の [構成] をクリックします。
- [名前] で、クラスタ名を
gke-cloud-sql-quickstartと指定します。 - [作成] をクリックします。
gcloud
gcloud container clusters create-auto コマンドを実行して、クラスタを作成します。
gcloud container clusters create-auto gke-cloud-sql-quickstart \ --region us-central1
Cloud Shell を使用して GitHub から Cloud SQL サンプルアプリのクローンを作成する
Cloud SQL インスタンス、データベース、GKE クラスタを作成したら、次に Cloud SQL インスタンスに接続するサンプル アプリケーションのクローンを作成し、アプリケーションを構成できます。サンプル アプリケーションは GitHub に保存されています。このクイックスタートの残りの手順では、Cloud Shell、gcloud、kubectl を使用する必要があります。gcloud ツールと kubectl ツールは Cloud Shell にプリインストールされています。
Go
-
Cloud Shell エディタで、サンプルアプリのソースコードを開きます。
Cloud Shell エディタを開く -
Open in Cloud Shellダイアログで、[確認] をクリックしてサンプルアプリのコードをダウンロードし、Cloud Shell エディタでサンプルアプリ ディレクトリを開きます。
Java
-
Cloud Shell エディタで、サンプルアプリのソースコードを開きます。
Cloud Shell エディタを開く -
Open in Cloud Shellダイアログで、[確認] をクリックしてサンプルアプリのコードをダウンロードし、Cloud Shell エディタでサンプルアプリ ディレクトリを開きます。
Node.js
-
Cloud Shell エディタで、サンプルアプリのソースコードを開きます。
Cloud Shell エディタを開く -
Open in Cloud Shellダイアログで、[確認] をクリックしてサンプルアプリのコードをダウンロードし、Cloud Shell エディタでサンプルアプリ ディレクトリを開きます。
Python
-
Cloud Shell エディタで、サンプルアプリのソースコードを開きます。
Cloud Shell エディタを開く -
Open in Cloud Shellダイアログで、[確認] をクリックしてサンプルアプリのコードをダウンロードし、Cloud Shell エディタでサンプルアプリ ディレクトリを開きます。
GKE クラスタを有効にする
作成した GKE クラスタをデフォルト クラスタとして有効にし、このクイックスタートの以降のコマンドで使用します。
gcloud container clusters get-credentials コマンドを実行して、GKE クラスタを有効にします。gcloud container clusters get-credentials gke-cloud-sql-quickstart \ --region us-central1
サービス アカウントを設定する
-
次のように
gcloud iam service-accounts createコマンドを実行して、新しいサービス アカウントを作成します。gcloud iam service-accounts create gke-quickstart-service-account \ --display-name="GKE Quickstart Service Account"
- 次のように
gcloud projects add-iam-policy-bindingコマンドを実行して、作成した Google Cloud サービス アカウントに Cloud SQL クライアント ロールを追加します。YOUR_PROJECT_ID は、プロジェクト ID で置き換えます。gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \ --member="serviceAccount:gke-quickstart-service-account@YOUR_PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/cloudsql.client"
- サンプルアプリではロギングを使用するため、次のように
gcloud projects add-iam-policy-bindingコマンドを実行して、先ほど作成した Google Cloud サービス アカウントにログ書き込みのロールを追加します。YOUR_PROJECT_ID は、プロジェクト ID で置き換えます。gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \ --member="serviceAccount:gke-quickstart-service-account@YOUR_PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/logging.logWriter"
- サービス アカウントが Artifactory リポジトリからイメージを pull できるようにする必要があります。
そのため、gcloud projects add-iam-policy-bindingコマンドを実行して、サービス アカウントに Artifact Registry 読み取りロールを追加します。YOUR_PROJECT_ID は、プロジェクト ID で置き換えます。gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \ --member="serviceAccount:gke-quickstart-service-account@YOUR_PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/artifactregistry.reader"
- Kubernetes サービス アカウントを作成します。
- Cloud Shell エディタで
service-account.yamlファイルを更新します。<YOUR-KSA-NAME>はksa-cloud-sqlに置き換えます。 - Cloud Shell で、次のように
kubectl applyコマンドを実行します。kubectl apply -f service-account.yaml
- Cloud Shell エディタで
- 次のように
gcloud iam service-accounts add-iam-policy-bindingコマンドを実行して、 Google Cloud サービス アカウントと Kubernetes サービス アカウントの IAM バインディングを有効にします。次のように置き換えます。- YOUR_PROJECT_ID: プロジェクト ID。
- YOUR_K8S_NAMESPACE:
default。これは、GKE で作成されたクラスタのデフォルトの名前空間です。 - YOUR_KSA_NAME:
ksa-cloud-sql。
gcloud iam service-accounts add-iam-policy-binding \ --role="roles/iam.workloadIdentityUser" \ --member="serviceAccount:YOUR_PROJECT_ID.svc.id.goog[YOUR_K8S_NAMESPACE/YOUR_KSA_NAME]" \ gke-quickstart-service-account@YOUR_PROJECT_ID.iam.gserviceaccount.com
- 次のように
kubectl annotateコマンドを実行して、Kubernetes サービス アカウントに IAM バインディングのアノテーションを付けます。次のように置き換えます。- YOUR_KSA_NAME:
ksa-cloud-sql。 - YOUR_PROJECT_ID: プロジェクト ID。
kubectl annotate serviceaccount \ YOUR_KSA_NAME \ iam.gke.io/gcp-service-account=gke-quickstart-service-account@YOUR_PROJECT_ID.iam.gserviceaccount.com
- YOUR_KSA_NAME:
シークレットを構成する
次のように kubectl create secret generic コマンドを実行して、サンプルアプリで使用するデータベース、ユーザー、ユーザー パスワードの Kubernetes Secret を作成します。各 Secret の値は、このクイックスタートの前の手順で指定した値に基づいています。DB_PASS は、Cloud SQL インスタンスの作成ステップで作成した sqlserver root ユーザーのパスワードに置き換えます。
kubectl create secret generic gke-cloud-sql-secrets \ --from-literal=database=quickstart-db \ --from-literal=username=sqlserver \ --from-literal=password=DB_PASS
サンプルアプリの作成
Go
- Cloud Shell エディタに戻り、[ターミナルを開く] をクリックして Cloud Shell プロンプトを開きます。
-
Cloud Shell プロンプトで、次の
gcloud artifacts repositories createコマンドを実行して、クラスタと同じリージョン内の gke-cloud-sql-repo という名前の Artifact Registry にリポジトリを作成します。YOUR_PROJECT_ID は、プロジェクト ID で置き換えます。gcloud artifacts repositories create gke-cloud-sql-repo \ --project=YOUR_PROJECT_ID \ --repository-format=docker \ --location=us-central1 \ --description="GKE Quickstart sample app"
- 先ほど GitHub から Cloud SQL サンプルアプリのクローンを作成した場所にディレクトリを変更します。サンプルアプリのディレクトリには、サンプルアプリの
Dockerfileが含まれています。たとえば、ディレクトリをサンプルアプリのディレクトリに変更するには、次のようなコマンドを実行します。cd ~/cloudshell_open/golang-samples/cloud-sql/sqlserver/database-sql
- 次の
gcloud builds submitコマンドを実行して、Docker コンテナをビルドし、Artifact Registry に公開します。YOUR_PROJECT_ID は、プロジェクト ID で置き換えます。gcloud builds submit \ --tag us-central1-docker.pkg.dev/YOUR_PROJECT_ID/gke-cloud-sql-repo/gke-sql .
Java
- Cloud Shell エディタに戻り、[ターミナルを開く] をクリックして Cloud Shell プロンプトを開きます。
-
Cloud Shell プロンプトで、次の
gcloud artifacts repositories createコマンドを実行して、クラスタと同じリージョン内の gke-cloud-sql-repo という名前の Artifact Registry にリポジトリを作成します。YOUR_PROJECT_ID は、プロジェクト ID で置き換えます。gcloud artifacts repositories create gke-cloud-sql-repo \ --project=YOUR_PROJECT_ID \ --repository-format=docker \ --location=us-central1 \ --description="GKE Quickstart sample app"
- 先ほど GitHub から Cloud SQL サンプルアプリのクローンを作成した場所にディレクトリを変更します。サンプルアプリのディレクトリには、サンプルアプリの
pom.xmlが含まれています。たとえば、ディレクトリをサンプルアプリのディレクトリに変更するには、次のようなコマンドを実行します。cd ~/cloudshell_open/java-docs-samples/cloud-sql/sqlserver/servlet
- 次の
mvnコマンドを実行して、Docker コンテナをビルドし、Artifact Registry に公開します。YOUR_PROJECT_ID は、プロジェクト ID で置き換えます。mvn clean package com.google.cloud.tools:jib-maven-plugin:2.8.0:build \ -Dimage=us-central1-docker.pkg.dev/YOUR_PROJECT_ID/gke-cloud-sql-repo/gke-sql \ -DskipTests -Djib.to.credHelper=gcloud
Node.js
- Cloud Shell エディタに戻り、[ターミナルを開く] をクリックして Cloud Shell プロンプトを開きます。
-
Cloud Shell プロンプトで、次の
gcloud artifacts repositories createコマンドを実行して、クラスタと同じリージョン内の gke-cloud-sql-repo という名前の Artifact Registry にリポジトリを作成します。YOUR_PROJECT_ID は、プロジェクト ID で置き換えます。gcloud artifacts repositories create gke-cloud-sql-repo \ --project=YOUR_PROJECT_ID \ --repository-format=docker \ --location=us-central1 \ --description="GKE Quickstart sample app"
- 先ほど GitHub から Cloud SQL サンプルアプリのクローンを作成した場所にディレクトリを変更します。サンプルアプリのディレクトリには、サンプルアプリの
Dockerfileが含まれています。たとえば、ディレクトリをサンプルアプリのディレクトリに変更するには、次のようなコマンドを実行します。cd ~/cloudshell_open/nodejs-docs-samples/cloud-sql/sqlserver/mssql
- 次の
gcloud builds submitコマンドを実行して、Docker コンテナをビルドし、Artifact Registry に公開します。YOUR_PROJECT_ID は、プロジェクト ID で置き換えます。gcloud builds submit \ --tag us-central1-docker.pkg.dev/YOUR_PROJECT_ID/gke-cloud-sql-repo/gke-sql .
Python
- Cloud Shell エディタに戻り、[ターミナルを開く] をクリックして Cloud Shell プロンプトを開きます。
-
Cloud Shell プロンプトで、次の
gcloud artifacts repositories createコマンドを実行して、クラスタと同じリージョン内の gke-cloud-sql-repo という名前の Artifact Registry にリポジトリを作成します。YOUR_PROJECT_ID は、プロジェクト ID で置き換えます。gcloud artifacts repositories create gke-cloud-sql-repo \ --project=YOUR_PROJECT_ID \ --repository-format=docker \ --location=us-central1 \ --description="GKE Quickstart sample app"
- 先ほど GitHub から Cloud SQL サンプルアプリのクローンを作成した場所にディレクトリを変更します。サンプルアプリのディレクトリには、サンプルアプリの
Dockerfileが含まれています。たとえば、ディレクトリをサンプルアプリのディレクトリに変更するには、次のようなコマンドを実行します。cd ~/cloudshell_open/python-docs-samples/cloud-sql/sql-server/sqlalchemy
- 次の
gcloud builds submitコマンドを実行して Docker コンテナをビルドし、Artifact Registry に公開します。YOUR_PROJECT_ID は、プロジェクト ID で置き換えます。gcloud builds submit \ --tag us-central1-docker.pkg.dev/YOUR_PROJECT_ID/gke-cloud-sql-repo/gke-sql .
サンプルアプリをデプロイする
クリーンアップ
このページで使用したリソースについて、 Google Cloud アカウントに課金されないようにするには、次の手順を実施します。
-
Google Cloud コンソールで、Cloud SQL の [インスタンス] ページに移動します。
quickstart-instanceインスタンスを選択して [インスタンスの詳細] ページを開きます。- ページ上部にあるアイコンバーで、[削除] をクリックします。
- [インスタンスの削除] ダイアログ ボックスで「
quickstart-instance」と入力し、[削除] をクリックしてインスタンスを削除します。 -
Google Cloud コンソールで、[Google Kubernetes Engine] ページに移動します。
gke-cloud-sql-quickstartサービス名の横にあるチェックボックスをオンにします。- Google Kubernetes Engine ページの上部にある [削除] ボタンをクリックします。
省略可能なクリーンアップ手順
このクイックスタート用に作成した Google Cloud サービス アカウントを使用しない場合は、このアカウントを削除できます。
-
Google Cloud コンソールで、[サービス アカウント] ページに移動します。
gke-quickstart-service-accountという名前の IAM アカウントのチェックボックスをオンにします。- [削除] をクリックして、削除を確定します。
このクイックスタートで有効にした API を使用しない場合は、無効にすることができます。
- このクイックスタートで有効にした API:
- Compute Engine API
- Cloud SQL Admin API
- Google Kubernetes Engine API
- Artifact Registry API
- Cloud Build API
Google Cloud コンソールで、[API] ページに移動します。
無効にする API を選択し、[API を無効にする] ボタンをクリックします。
次のステップ
必要に応じて、Cloud SQL インスタンスの作成で詳細をご確認ください。Cloud SQL インスタンスの SQL Server ユーザーとデータベースの作成についても確認できます。
Cloud SQL の料金情報もご覧ください。
以下の詳細を確認する
- Cloud SQL のすべての接続オプション。
- パブリック IP アドレスを持つ Cloud SQL インスタンスの構成。
- プライベート IP アドレスを持つ Cloud SQL インスタンスの構成。
また、他の Google Cloud アプリケーションから Cloud SQL インスタンスへの接続についても確認できます。
