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 を生成できます。または、ご自身で試して、利用可能かどうかを確認することもできます。このステップ以降は変更できず、プロジェクトを通して同じ 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 ネットワークと、基盤となる Google Cloud の VPC ネットワーク(AlloyDB リソース(クラスタとインスタンス)が存在するネットワーク)との間の VPC ピアリング接続として実装されます。プライベート接続を使用すると、VPC ネットワーク内のリソースは、アクセスする AlloyDB リソースと内部 IP アドレスを使用して排他的に通信できます。VPC ネットワーク内のリソースは、AlloyDB リソースにアクセスするためにインターネット アクセスや外部 IP アドレスを必要としません。

AlloyDB と同じクラウド プロジェクトにある 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 Job のコードを確認する

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

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

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

  • Dockerfile - 必要な依存関係(postgresql-client)をインストールします
  • script.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 Console で Cloud Run ジョブのログを確認します。

3f2269736b53f44c.png

6. 完了

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

学習した内容

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

クリーンアップ

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

プロジェクトの削除

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