Cloud Run ジョブを使用して AlloyDB データベースを作成する

1. 概要

このラボでは、Cloud Run ジョブを使用して AlloyDB データベースを作成します。プライベート サービス アクセスサーバーレス VPC アクセスを構成して、プライベート IP を使用して Cloud Run ジョブと AlloyDB データベース間の接続を有効にします。

学習内容

このラボでは、次の方法について学びます。

  • AlloyDB クラスタとインスタンスを設定する
  • Cloud Run ジョブをデプロイして AlloyDB データベースを作成する

2. 設定と要件

Cloud プロジェクトの設定

  1. Google Cloud Console にログインして、プロジェクトを新規作成するか、既存のプロジェクトを再利用します。Gmail アカウントも Google Workspace アカウントもまだお持ちでない場合は、アカウントを作成してください。

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • プロジェクト名は、このプロジェクトの参加者に表示される名称です。Google API では使用されない文字列です。この値はいつでも更新できます。
  • プロジェクト ID は、すべての Google Cloud プロジェクトにおいて一意でなければならず、不変です(設定後は変更できません)。Cloud コンソールでは一意の文字列が自動生成されます。通常、それが何であるかは関係ありません。ほとんどの Codelab では、プロジェクト ID を参照する必要があります(通常は PROJECT_ID として識別されます)。生成された ID が気に入らない場合は、別のランダムな ID を生成できます。または、ご自身でお試しになることもできます。このステップを終えた後は変更できず、プロジェクト期間中は維持されます。
  • なお、3 つ目の値は、一部の API で使用される [プロジェクト番号] です。これら 3 つの値について詳しくは、こちらのドキュメントをご覧ください。
  1. 次に、Cloud のリソースや API を使用するために、Cloud コンソールで課金を有効にする必要があります。この Codelab の操作をすべて行って、費用が生じたとしても、少額です。このチュートリアルの終了後に課金されないようにリソースをシャットダウンするには、作成したリソースを削除するか、プロジェクト全体を削除します。Google Cloud の新規ユーザーは、300 米ドル分の無料トライアル プログラムをご利用いただけます。

環境設定

検索バーの右側にあるアイコンをクリックして Cloud Shell をアクティブにします。

eb0157a992f16fa3.png

サービス API を有効にするには、以下のコマンドをコピーしてターミナルに貼り付け、Enter キーを押します。

gcloud services enable \
    alloydb.googleapis.com \
    artifactregistry.googleapis.com \
    cloudbuild.googleapis.com \
    run.googleapis.com \
    vpcaccess.googleapis.com \
    compute.googleapis.com \
    servicenetworking.googleapis.com \
    --quiet

環境変数を設定します。

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export PROJECT_NAME=$(gcloud projects describe $PROJECT_ID --format='value(name)')
export DB_DATABASE=test
export DB_USER=postgres
export DB_PASSWORD=password123
export REGION=us-central1
export CLUSTER=test-cluster
export INSTANCE=test-instance
export VPC_CONNECTOR=vpcconnector

3. AlloyDB クラスタのセットアップと作成

設定に必要な権限を設定します。これにより、Cloud Run ジョブが AlloyDB データベースに接続できるようになります。

gcloud projects add-iam-policy-binding $PROJECT_NAME \
  --member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
  --role="roles/alloydb.client"

プライベート サービス アクセスを構成する

プライベート サービス アクセスは、VPC ネットワークと、AlloyDB リソース(クラスタとインスタンス)が存在する基盤となる Google Cloud VPC ネットワークとの間の VPC ピアリング接続として実装されます。プライベート接続を使用すると、VPC ネットワーク内のリソースは、内部 IP アドレスを使用して排他的にアクセスする AlloyDB リソースと通信できます。VPC ネットワーク内のリソースは、インターネット アクセスや外部 IP アドレスがなくても AlloyDB リソースにアクセスできます。

AlloyDB と同じ Cloud プロジェクトにある VPC ネットワークにプライベート サービス アクセス構成を作成するには、次の 2 つの操作を行います。

VPC ネットワークに割り振られた IP アドレス範囲を作成します。

gcloud compute addresses create google-managed-services-default \
    --global \
    --purpose=VPC_PEERING \
    --prefix-length=20 \
    --network=projects/$PROJECT_ID/global/networks/default

VPC ネットワークと基盤となる Google Cloud VPC ネットワークの間にプライベート接続を作成する。このステップには約 2 分かかります。

gcloud services vpc-peerings connect \
    --service=servicenetworking.googleapis.com \
    --ranges=google-managed-services-default \
    --network=default \
    --project=$PROJECT_ID

AlloyDB クラスタを作成する。

gcloud beta alloydb clusters create $CLUSTER \
    --password=$DB_PASSWORD \
    --network=default \
    --region=$REGION \
    --project=$PROJECT_NAME

gcloud beta alloydb clusters describe $CLUSTER --region=$REGION

AlloyDB インスタンスを作成する。このステップには約 10 分かかります。

gcloud beta alloydb instances create $INSTANCE \
    --cluster=$CLUSTER \
    --region=$REGION \
    --instance-type=PRIMARY \
    --cpu-count=2 \
    --project=$PROJECT_NAME

gcloud beta alloydb instances describe $INSTANCE \
    --cluster=$CLUSTER \
    --region $REGION

作成されたクラスタを Cloud コンソールで確認します。

568d273c0e0d6408.png

データベースの IP アドレスを変数に保存します。""

export DB_HOST=$(gcloud beta alloydb instances describe $INSTANCE \
    --cluster=$CLUSTER \
    --region=$REGION \
    --format=json | jq \
    --raw-output ".ipAddress")

echo "DB_HOST=$DB_HOST"

4. Cloud Run のジョブコードを確認する

AlloyDB データベースを作成するには複数の方法があります。一つは、Compute Engine VM を作成し、psql クライアントをインストールしてから、インスタンスに接続してデータベースを作成する方法です。このアプローチについて詳しくは、こちらをご覧ください。

このラボでは、Cloud Run ジョブを使用して新しい AlloyDB データベースを作成します。

以下のファイルをご確認ください。

  • Dockerfile - 必要な依存関係をインストールします(postgresql-client)
  • スクリプト.sh - コマンドラインユーティリティを使用してデータベースを作成する

Cloud Shell で、新しいフォルダを作成します。

mkdir ~/alloy-db-cloud-run-job
cd ~/alloy-db-cloud-run-job 

新しいファイル Dockerfile を作成します。

cat > Dockerfile <<EOF
FROM ubuntu:latest
RUN apt-get update && apt-get install -y postgresql-client && apt-get clean
COPY script.sh /
RUN chmod +x /script.sh
CMD ["/script.sh"]
ENTRYPOINT ["/bin/bash"]
EOF

以下の内容で新しいファイル script.sh を作成します。

echo "Connecting to $DB_HOST"
createdb -h $DB_HOST -p 5432 $PGDB
echo "Created $PGDB database"

psql -h $DB_HOST -l

script.sh の権限を変更します。

chmod +x script.sh

5. Cloud Run ジョブをデプロイする

サーバーレス VPC アクセスを構成します。これにより、Cloud Run ジョブは内部/プライベート IP を使用して AlloyDB クラスタと通信できます。このステップには約 2 分かかります。

gcloud compute networks vpc-access connectors create ${VPC_CONNECTOR} \
    --region=${REGION} \
    --range=10.8.0.0/28

コンテナ イメージを保存する Artifact Registry リポジトリを作成する。

gcloud artifacts repositories create db-job-repository \
  --repository-format=docker \
  --location=$REGION

コンテナ イメージをビルドして Artifact Registry に公開します。

gcloud builds submit -t $REGION-docker.pkg.dev/$PROJECT_NAME/db-job-repository/db-job:latest

Cloud Run ジョブをデプロイする。

gcloud beta run jobs create db-job \
    --image=$REGION-docker.pkg.dev/$PROJECT_NAME/db-job-repository/db-job:latest \
    --set-env-vars DB_HOST=$DB_HOST \
    --set-env-vars PGUSER=$DB_USER \
    --set-env-vars PGPASSWORD=$DB_PASSWORD \
    --set-env-vars PGDB=$DB_DATABASE \
    --vpc-connector $VPC_CONNECTOR \
    --region $REGION

ジョブの作成に使用されたフラグを確認します。

--vpc-connector - Cloud Run ジョブが VPC コネクタを使用して AlloyDB プライベート IP アドレスにアクセスします。

作成されたジョブを Cloud コンソールで確認します。

93d8224eca8c687f.png

Cloud Run ジョブを実行して test データベースを作成します。

gcloud beta run jobs execute db-job --region $REGION

Cloud コンソールで Cloud Run ジョブのログを確認します。

3f2269736b53f44c.png

6. 完了

お疲れさまでした。これでこの Codelab は終了です。

学習した内容

  • AlloyDB クラスタとインスタンスの作成方法
  • Cloud Run ジョブを使用して AlloyDB データベースを作成する方法

クリーンアップ

このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。

プロジェクトの削除

課金を停止する最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。