arrow_back

Cloud SQL と Google Kubernetes Engine の使用

ログイン 参加
700 以上のラボとコースにアクセス

Cloud SQL と Google Kubernetes Engine の使用

ラボ 1時間 universal_currency_alt クレジット: 5 show_chart 入門
info このラボでは、学習をサポートする AI ツールが組み込まれている場合があります。
700 以上のラボとコースにアクセス

概要

このラボでは、SQL Proxy 経由で Cloud SQL に接続された WordPress の Kubernetes Deployment を設定します。SQL Proxy を使用すると、Cloud SQL インスタンスをローカル(localhost:3306)にインストールされているかのように操作できます。ローカルのポートがセキュリティで保護されていなくても、Cloud SQL インスタンスへのネットワーク接続は保護されます。

このラボを実行するには、いくつかのコンポーネントを作成します。まず GKE クラスタを作成し、次に接続先の Cloud SQL インスタンスを作成します。さらに Pod に Cloud SQL インスタンスへのアクセス権限を付与するサービス アカウントを作成します。これは Workload Identity を使用して認証されます。最後に、サイドカーとして SQL Proxy を使用し、Cloud SQL インスタンスに接続される WordPress を GKE クラスタにデプロイします。

目標

このラボでは、次のタスクを行う方法について学びます。

  • WordPress 用に Cloud SQL インスタンスとデータベースを作成する。
  • アプリケーション認証用に認証情報と Kubernetes Secret を作成する。
  • Workload Identity を構成する。
  • SQL プロキシを使用するように WordPress イメージで Deployment を構成する。
  • サイドカー コンテナとして SQL Proxy をインストールし、それを使用して、GKE クラスタの外部にある Cloud SQL インスタンスに SSL アクセスできるようにする。

ラボの設定

Qwiklabs にアクセスする

各ラボでは、新しい Google Cloud プロジェクトとリソースセットを一定時間無料で利用できます。

  1. Qwiklabs にシークレット ウィンドウでログインします。

  2. ラボのアクセス時間(例: 1:15:00)に注意し、時間内に完了できるようにしてください。
    一時停止機能はありません。必要な場合はやり直せますが、最初からになります。

  3. 準備ができたら、[ラボを開始] をクリックします。

  4. ラボの認証情報(ユーザー名パスワード)をメモしておきます。この情報は、Google Cloud Console にログインする際に使用します。

  5. [Google Console を開く] をクリックします。

  6. [別のアカウントを使用] をクリックし、このラボの認証情報をコピーしてプロンプトに貼り付けます。
    他の認証情報を使用すると、エラーが発生したり、料金の請求が発生したりします。

  7. 利用規約に同意し、再設定用のリソースページをスキップします。

最初のログイン手順を完了すると、プロジェクト ダッシュボードが表示されます。

Google Cloud Shell の有効化

Google Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。

Google Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。

  1. Google Cloud コンソールで、右上のツールバーにある [Cloud Shell をアクティブにする] ボタンをクリックします。

    ハイライト表示された Cloud Shell アイコン

  2. [続行] をクリックします。

環境がプロビジョニングされ、接続されるまでしばらく待ちます。接続した時点で認証が完了しており、プロジェクトに各自のプロジェクト ID が設定されます。次に例を示します。

Cloud Shell ターミナルでハイライト表示されたプロジェクト ID

gcloud は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。

  • 次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
gcloud auth list

出力:

Credentialed accounts: - @.com (active)

出力例:

Credentialed accounts: - google1623327_student@qwiklabs.net
  • 次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
gcloud config list project

出力:

[core] project =

出力例:

[core] project = qwiklabs-gcp-44776a13dea667a6 注: gcloud ドキュメントの全文については、 gcloud CLI の概要ガイド をご覧ください。

タスク 1. ラボの GKE クラスタに接続する

  1. Cloud Shell で次のコマンドを入力して、Google Cloud のゾーンとクラスタ名の環境変数を設定します。
export my_cluster=autopilot-cluster-1 export my_project=$(gcloud config get-value project) export my_region={{{ project_0.default_region | "" }}}
  1. kubectl コマンドライン ツールのタブ補完を構成します。
source <(kubectl completion bash)
  1. kubectl がクラスタにアクセスできるよう構成します。
gcloud container clusters get-credentials $my_cluster --region $my_region

タスク 2. Cloud SQL API を有効にする

  1. Google Cloud コンソールのナビゲーション メニューナビゲーション メニュー アイコン)で、[API とサービス] をクリックします。

  2. [+ API とサービスの有効化] をクリックします。

  3. [API とサービスを検索] に「SQL」と入力してから [Cloud SQL] API タイルをクリックします。

  4. [有効にする] をクリックして、Cloud SQL API を有効にします。

API がすでに有効になっている場合は、代わりに [管理] ボタンが表示され、[API が有効です] のメッセージが表示されます。その場合は特に操作は必要ありません。

  1. 上記の手順を繰り返して、sqladmin API を有効にします。

タスク 3. Cloud SQL インスタンスを作成する

  1. Cloud Shell で次のコマンドを実行してインスタンスを作成します。
gcloud sql instances create sql-instance --tier=db-n1-standard-2 --region=$my_region
  1. Google Cloud コンソールで [SQL] に移動します。
  2. 一覧に表示されている sql-instance の名前をクリックしてから、[ユーザー] メニューをクリックします。
注: Cloud SQL インスタンスがプロビジョニングされるまで、数分待つ必要があります。

既存の root ユーザーが一覧に表示されたら、次の手順に進みます。

  1. [ユーザー アカウントを追加] をクリックし、ユーザー名に「sqluser」、パスワードに「sqlpassword」を指定してアカウントを作成します。

  2. [ホスト名] オプションを [すべてのホストを許可する(%)] に設定したまま、[追加] をクリックします。

  3. インスタンス(sql-instance)の [概要] メニューに戻り、インスタンス接続名をコピーします。

インスタンス接続名を表示するには、必要に応じて少し下にスクロールしてください。

  1. Cloud SQL インスタンス名を保持するための環境変数を次のように作成します。プレースホルダは、前の手順でコピーした名前に置き換えます。
export SQL_NAME=[Cloud SQL インスタンス名]
  1. 実際のコマンドは次のようになります。
$ export SQL_NAME=qwiklabs-gcp-d03ee58ad9ad507e:us-central1:sql-instance
  1. 次のように Cloud SQL インスタンスに接続します。
gcloud sql connect sql-instance
  1. root パスワードの入力を求められたら、Enter キーを押します。root SQL ユーザーのパスワードはデフォルトでは空白です。

mysql> プロンプトが表示され、MySQL クライアントを使用して Cloud SQL インスタンスに接続していることがわかります。

  1. WordPress に必要なデータベースを作成します。これは、デフォルトでは「wordpress」という名前です。
create database wordpress;
  1. WordPress データベースを選択します。
use wordpress;
  1. WordPress データベースを選択します。
show tables;

まだテーブルを作成していないので、空のセットが報告されます。

  1. MySQL クライアントを終了します。
exit;

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。

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

タスク 4. Cloud SQL へのアクセス権を持つサービス アカウントを準備する

  1. サービス アカウントを作成するには、Google Cloud コンソールで [IAM と管理] > [サービス アカウント] に移動します。

  2. [+ サービス アカウントを作成] をクリックします。

  3. [サービス アカウント名] に「sql-access」と入力した後、[作成して続行] をクリックします。

  4. [ロールを選択] をクリックします。

  5. Cloud SQL」を検索し、[Cloud SQL クライアント] を選択して [続行] をクリックします。

  6. [完了] をクリックします。

  7. sql-access サービス アカウントを見つけて、[操作] 列の「その他」アイコンをクリックします。

  8. [鍵を管理] を選択します。

  9. 続いて [鍵を追加] をクリックし、[新しい鍵を作成] を選択します。

  10. 鍵の種類として [JSON] が選択されていることを確認し、[作成] をクリックします。

公開鍵と秘密鍵のペアが作成され、秘密鍵のファイルが自動的にパソコンにダウンロードされます。この JSON ファイルは後で必要になります。

  1. [閉じる] をクリックして通知ダイアログを閉じます。
  2. ダウンロードした JSON 認証情報ファイルを見つけて、ファイル名を credentials.json に変更します。

タスク 5. Kubernetes サービス アカウントを作成して Workload Identity を構成する

  1. Cloud Shell で次のコマンドを実行して、Kubernetes サービス アカウントを作成します。
kubectl create serviceaccount gkesqlsa
  1. Cloud Shell で次のコマンドを実行して、Google Cloud サービス アカウントを上記で作成した Kubernetes サービス アカウントにバインドします。
gcloud iam service-accounts add-iam-policy-binding \ --role="roles/iam.workloadIdentityUser" \ --member="serviceAccount:$my_project.svc.id.goog[default/gkesqlsa]" \ sql-access@$my_project.iam.gserviceaccount.com
  1. Cloud Shell で次のコマンドを実行して、Google Cloud サービス アカウントの詳細を Kubernetes サービス アカウントに追加します。
kubectl annotate serviceaccount \ gkesqlsa \ iam.gke.io/gcp-service-account=sql-access@$my_project.iam.gserviceaccount.com

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。

サービス アカウントを作成する

タスク 6. Secret を作成する

Kubernetes の Secret を 2 つ作成します。1 つは MySQL 認証情報用で、もう 1 つは Google 認証情報(サービス アカウント)用です。

  1. MySQL 認証情報用の Secret を作成するには、Cloud Shell で次のように入力します。
kubectl create secret generic sql-credentials \ --from-literal=username=sqluser\ --from-literal=password=sqlpassword

Cloud SQL ユーザー アカウントを作成する際に別のユーザー名とパスワードを使用した場合は、このコマンドのユーザー名とパスワードをそれらに置き換えてください。

  1. Cloud Shell で、Cloud Shell メニューバーの右端にあるその他その他アイコン)をクリックします。

  2. [アップロード] を選択し、[File] が選択された状態で [ファイル選択] をクリックします。前のタスクでダウンロードした credentials.json 認証情報ファイルを Cloud Shell にアップロードします。

  3. Cloud Shell で、認証情報ファイルを現在の作業ディレクトリに移動します。

mv ~/credentials.json .

Cloud Shell にアップロードしたファイルは、ユーザーのホーム ディレクトリにアップロードされます。ファイルを現在の作業ディレクトリに移動しておくと、次の手順で実行する kubectl コマンドの記述がシンプルになります。

  1. 次のコマンドを使用して、Google Cloud サービス アカウントの認証情報用の Secret を作成します。
kubectl create secret generic google-credentials\ --from-file=key.json=credentials.json

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。

Secret を作成する

タスク 7. サイドカー コンテナとして SQL Proxy エージェントをデプロイする

sql-proxy.yaml という Deployment マニフェスト ファイルを作成します。このファイルは、SQL Proxy エージェントをサイドカー コンテナとして使ってデモの WordPress アプリケーション コンテナをデプロイします。

WordPress コンテナの環境設定で、WORDPRESS_DB_HOST は localhost の IP アドレスを使って指定されます。cloudsql-proxy サイドカー コンテナは、前のタスクで作成した Cloud SQL インスタンスを参照するように構成されています。データベースのユーザー名とパスワードが秘密鍵として WordPress コンテナに渡され、Workload Identity が構成されます。また、インターネットから WordPress インスタンスへの接続を可能にする Service も作成されます。

次のコマンドを使用して、sql-proxy.yaml というファイルを作成し、nano で開きます。

nano sql-proxy.yaml
  1. nano が開いたら、以下の情報を sql-proxy.yaml ファイルの中に貼り付けます。
apiVersion: apps/v1 kind: Deployment metadata: name: wordpress labels: app: wordpress spec: selector: matchLabels: app: wordpress template: metadata: labels: app: wordpress spec: serviceAccountName: gkesqlsa containers: - name: web image: gcr.io/cloud-marketplace/google/wordpress:6.1 #image: wordpress:5.9 ports: - containerPort: 80 env: - name: WORDPRESS_DB_HOST value: 127.0.0.1:3306 # これらのシークレットは Pod の起動に必要です。 # [START cloudsql_secrets] - name: WORDPRESS_DB_USER valueFrom: secretKeyRef: name: sql-credentials key: username - name: WORDPRESS_DB_PASSWORD valueFrom: secretKeyRef: name: sql-credentials key: password # [END cloudsql_secrets] # ここの <インスタンス接続名> を変更して、 # Google Cloud プロジェクト、 # Cloud SQL インスタンスのリージョン、および # Cloud SQL インスタンス名を含めます。形式は次のとおり # $PROJECT:$REGION:$INSTANCE # [START proxy_container] - name: cloudsql-proxy image: gcr.io/cloud-sql-connectors/cloud-sql-proxy:2.8.0 args: - "--structured-logs" - "--port=3306" - "<インスタンス接続名>" securityContext: runAsNonRoot: true --- apiVersion: "v1" kind: "Service" metadata: name: "wordpress-service" namespace: "default" labels: app: "wordpress" spec: ports: - protocol: "TCP" port: 80 selector: app: "wordpress" type: "LoadBalancer" loadBalancerIP: ""
  1. Ctrl+O キーに続いて Enter キーを押し、編集したファイルを保存します。

  2. Ctrl+X キーを押して nano テキスト エディタを終了します。

このマニフェストでは、次の重要なセクションに注目してください。

  • spec セクションで、Kubernetes サービス アカウントが構成されます。
  • WordPress の env セクションでは、変数 WORDPRESS_DB_HOST127.0.0.1:3306 に設定されているため、WordPress はポート 3306 でリッスンしている同じ Pod 内のコンテナに接続します。これは、SQL プロキシがデフォルトでリッスンするポートです。
  • Wordpress の env セクションでは、変数 WORDPRESS_DB_USERWORDPRESS_DB_PASSWORD が、前のタスクで作成した sql-credential Secret に入っている値を使用して設定されます。
  • cloudsql-proxy コンテナ セクションでは、SQL 接続名を定義するコマンド スイッチ "-instances=<インスタンス接続名> に、(ConfigMap や Secret を使って設定されない)プレースホルダ変数が含まれています。したがって、このサンプル マニフェスト内でこの変数を直接更新して Cloud SQL インスタンスを参照させる必要があります。
  • 最後の Service セクションでは、外部インターネット アドレスからアプリケーションにアクセスできるようにする「wordpress-service」という外部 LoadBalancer を作成します。
  1. sed を使用して、SQL 接続名のプレースホルダ変数を実際の Cloud SQL インスタンスのインスタンス名に更新します。
sed -i 's/<インスタンス接続名>/'"${SQL_NAME}"'/g'\ sql-proxy.yaml 注: UNIX の sed コマンドはストリーム エディタを表し、これを使用すると置換、挿入、削除などのさまざまな操作をファイルに対して実行できます。sed は置換操作で最もよく使われます。sed を使用するとファイルを開かなくても編集できるので、エディタでファイルを開いてから変更する方法に比べて、はるかに短時間でファイル内の情報を見つけて置換できます。
  1. アプリケーションをデプロイします。
kubectl apply -f sql-proxy.yaml
  1. Deployment のステータスをクエリで確認します。
kubectl get deployment wordpress 注: インスタンスが利用できる状態であることを確認できるまで、このコマンドを繰り返し実行する必要があります。

出力:

NAME READY UP-TO-DATE AVAILABLE AGE wordpress 1/1 1 1 45s
  1. GKE クラスタ内のサービスを一覧表示します。
kubectl get services

wordpress-service の外部の LoadBalancer IP アドレスは、WordPress ブログに接続するために使用するアドレスです。

  1. 以下に示すような外部アドレスを確認できるまで、このコマンドを繰り返し実行します。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) kubernetes ClusterIP 10.12.0.1 443/TCP wordpress-service LoadBalancer 10.12.3.17 35.238.218.6 80:31095/TCP

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。

サイドカー コンテナとして SQL Proxy エージェントをデプロイする

タスク 7. WordPress のインスタンスに接続する

  1. 新しいブラウザタブを開き、外部の LoadBalancer IP アドレスを使用して WordPress サイトに接続します。WordPress の初期インストール ウィザードが起動します。
  2. [日本語] を選択して [続ける] をクリックします。
  3. [サイトのタイトル] にサンプル名を入力します。
  4. サイトを管理するための [ユーザー名] と [パスワード] を入力します。
  5. メールアドレスを入力します。

これらの値のいずれも特に重要ではなく、今後使うことはありません。

  1. [Install Wordpress] をクリックします。

数秒後に [Success!] 通知が表示されます。 WordPress の管理画面をご覧になりたい場合はログインできますが、このラボでは必須ではありません。

初期化プロセスにより、Cloud SQL インスタンスの WordPress データベース内にデータベース テーブルとデータが新たに作成されました。次に、この新しいデータベース テーブルが SQL プロキシ コンテナを使用して作成されていることを検証します。

  1. Cloud Shell に戻り、Cloud SQL インスタンスに接続します。
gcloud sql connect sql-instance
  1. root パスワードの入力を求められたら、Enter キーを押します。root SQL ユーザーのパスワードはデフォルトでは空白です。

mysql> プロンプトが表示され、MySQL クライアントを使用して Cloud SQL インスタンスに接続していることがわかります。

  1. WordPress データベースを選択します。
use wordpress;
  1. WordPress データベースを選択します。
show tables;

WordPress の初期化時に作成された新しいデータベース テーブルがいくつか表示されます。これは、サイドカーの SQL Proxy コンテナが正しく構成されたことを示しています。

MySQL [wordpress]> show tables; +-----------------------+ | Tables_in_wordpress | +-----------------------+ | wp_commentmeta | | wp_comments | | wp_links | | wp_options | | wp_postmeta | | wp_posts | | wp_term_relationships | | wp_term_taxonomy | | wp_termmeta | | wp_terms | | wp_usermeta | | wp_users | +-----------------------+ 12 rows in set (0.19 sec)
  1. WordPress のユーザー テーブルのレコードをすべて一覧表示します。
select * from wp_users;

WordPress の管理者アカウントのデータベース レコードが一覧表示され、WordPress の初期化時に選択したメールアドレスが表示されます。

  1. MySQL クライアントを終了します。
exit;

ラボを終了する

ラボが完了したら、[ラボを終了] をクリックします。ラボで使用したリソースが Google Cloud Skills Boost から削除され、アカウントの情報も消去されます。

ラボの評価を求めるダイアログが表示されたら、星の数を選択してコメントを入力し、[送信] をクリックします。

星の数は、それぞれ次の評価を表します。

  • 星 1 つ = 非常に不満
  • 星 2 つ = 不満
  • 星 3 つ = どちらともいえない
  • 星 4 つ = 満足
  • 星 5 つ = 非常に満足

フィードバックを送信しない場合は、ダイアログ ボックスを閉じてください。

フィードバックやご提案の送信、修正が必要な箇所をご報告いただく際は、[サポート] タブをご利用ください。

Copyright 2020 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。

始める前に

  1. ラボでは、Google Cloud プロジェクトとリソースを一定の時間利用します
  2. ラボには時間制限があり、一時停止機能はありません。ラボを終了した場合は、最初からやり直す必要があります。
  3. 画面左上の [ラボを開始] をクリックして開始します

シークレット ブラウジングを使用する

  1. ラボで使用するユーザー名パスワードをコピーします
  2. プライベート モードで [コンソールを開く] をクリックします

コンソールにログインする

    ラボの認証情報を使用して
  1. ログインします。他の認証情報を使用すると、エラーが発生したり、料金が発生したりする可能性があります。
  2. 利用規約に同意し、再設定用のリソースページをスキップします
  3. ラボを終了する場合や最初からやり直す場合を除き、[ラボを終了] はクリックしないでください。クリックすると、作業内容がクリアされ、プロジェクトが削除されます

このコンテンツは現在ご利用いただけません

利用可能になりましたら、メールでお知らせいたします

ありがとうございます。

利用可能になりましたら、メールでご連絡いたします

1 回に 1 つのラボ

既存のラボをすべて終了して、このラボを開始することを確認してください

シークレット ブラウジングを使用してラボを実行する

このラボの実行には、シークレット モードまたはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウントの競合を防ぎ、個人アカウントに追加料金が発生することを防ぎます。