バックエンド バケットを使用したバランサの設定

バックエンド バケットでは、Google Cloud Storage バケットHTTP(S) 負荷分散とともに使用できます。

ロードバランサのバックエンドとしての Cloud Storage バケットの使用

外部 HTTP(S) ロードバランサは、URL マップを使用して、指定された URL からのトラフィックをバックエンド サービスまたはバックエンド バケットに送信します。一般的なユースケースは次のとおりです。

  • データなどの動的コンテンツに対するリクエストをバックエンド サービスに送信します。
  • 画像などの静的コンテンツに対するリクエストをバックエンド バケットに送信します。

次の図では、ロードバランサが /love-to-fetch/ のパスを含むトラフィックを europe-north リージョンの Cloud Storage バケットに送信しています。他のすべてのリクエストは、us-east リージョンの Cloud Storage バケットに送信されます。

Cloud Storage へのトラフィックの分散(クリックして拡大)
Cloud Storage へのトラフィックの分散(クリックして拡大)

このドキュメントでは、外部 HTTP(S) ロードバランサを作成して静的コンテンツのリクエストを Cloud Storage バケットにルーティングする方法について説明します。バックエンド バケットを使用してロードバランサを構成した後、/love-to-fetch で始まる URL パスへのリクエストは europe-north Cloud Storage バケットに送信され、その他のリクエストはすべて us-east Cloud Storage バケットに送信されます。

始める前に

設定が前提条件を満たしていることを確認します。

デフォルト プロジェクトの設定

  1. gcloud または gsutil ユーティリティを使用している場合は、両方をクイックスタート: gsutil ツールの使用の手順に従ってインストールできます。
  2. デフォルトのプロジェクトを設定します

    Console

    a. Google Cloud Console のホームページに移動します。
    Google Cloud のホームページに移動する

    b. Google Cloud の右側にあるプルダウン メニューでプロジェクトを選択します。

    gcloud または gsutil

     gcloud config set project [PROJECT_ID]
    

    または

     gsutil config set project [PROJECT_ID]
    
    • [PROJECT_ID] - このガイドで使用するプロジェクトです。

権限

このガイドを使用する前に、プロジェクトで Cloud Storage バケットとロードバランサを作成する必要があります。そのためにはプロジェクトのオーナーまたは編集者であるか、または次の Compute Engine IAM ロールを持っている必要があります。

タスク 必要なロール
ロードバランサのコンポーネントの作成 ネットワーク管理者
Cloud Storage バケットの作成 ストレージ オブジェクト管理者

詳細については、次のガイドをご覧ください。

Cloud Storage バケットとコンテンツの準備

Cloud Storage バケットを準備するプロセスは次のとおりです。

  • バケットを作成します。
  • コンテンツをバケットにコピーします。
  • バケットに公開アクセス権を設定します。

Cloud Storage バケットの作成

既存の Cloud Storage バケットがある場合は、次の手順に進みます。

HTTP(S) 負荷分散のバックエンドとして使用するバケットを作成する場合は、複数の Google Cloud リージョン間でオブジェクトを自動的に複製するマルチリージョン バケットを選択することをおすすめします。これにより、コンテンツの可用性が高まり、アプリケーション全体のフォールト トレラントが向上します。

Console

  1. Cloud Console で、Cloud Storage ブラウザを開きます。
    Cloud Storage ブラウザを開く
  2. [バケットを作成] をクリックします。
  3. 以下のフィールドの値を設定します。その他のフィールドはデフォルト値のままにします。

    プロパティ 値(値を入力するか、指定されたオプションを選択)
    名前 バケットごとに、グローバルに一意の名前を入力します。入力した名前が一意でない場合、別の名前を試すように促すメッセージが表示されます。
    ロケーション タイプ この例では、[リージョン] を選択します。本番環境へのデプロイでは、マルチリージョン バケットをおすすめします。
    ロケーション 1 つのバケットに対して us-east1 を選択します。
    もう 1 つのバケットには europe-north1 を選択します。
    デフォルトのストレージ クラス 標準
    アクセス制御 均一
  4. [作成] をクリックします。

  5. 次のステップのために、新たに作成された Cloud Storage バケットの名前をメモします。この名前を BUCKET_1_NAMEBUCKET_2_NAME とします。

gsutil

gsutil mb -p PROJECT_ID -c standard -l us-east1 -b on gs://BUCKET_1_NAME
gsutil mb -p PROJECT_ID -c standard -l europe-north1 -b on gs://BUCKET_2_NAME

グラフィック ファイルを Cloud Storage バケットにコピーする

設定をテストできるように、Cloud Storage の公開バケットから独自の Cloud Storage バケットにグラフィック ファイルをコピーします。

  1. Cloud Shell で次のコマンドを実行します。バケット名の変数は Cloud Storage バケット名に置き換えます。

    gsutil cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://BUCKET_1_NAME/never-fetch/
    
    gsutil cp gs://gcp-external-http-lb-with-bucket/two-dogs.jpg gs://BUCKET_2_NAME/love-to-fetch/
    
  2. Cloud Console で、[バケットを更新] をクリックして、グラフィック ファイルがコピーされたことを確認します。

Cloud Storage バケットの公開

Cloud Storage バケットを公開します。この設定では、インターネット上のすべてのユーザーがオブジェクトとそのメタデータ(ACL を除く)を表示できます。インターネット上の誰でもバケット内のオブジェクトを一覧表示できます。公開バケットに機密情報を含めないでください。

機密情報が誤って公開される可能性を減らすため、公開オブジェクトと機密データを同じバケットに保存しないでください。詳細については、推奨されるバケット アーキテクチャをご覧ください。

Console

バケット内のオブジェクトを表示する権限をすべてのユーザーに付与します。この手順をバケットごとに繰り返します。

  1. Cloud Console で、Cloud Storage ブラウザを開きます。
    Cloud Storage ブラウザを開く
  2. バケットに移動して、[権限] タブをクリックします。
  3. [メンバーを追加] をクリックして選択します。
  4. [新しいメンバー] に「allUsers」と入力します。
  5. ロールとして、[ストレージ] > [ストレージ オブジェクト閲覧者] を選択します。
  6. [保存] をクリックします。

gsutil

gsutil iam ch allUsers:objectViewer gs://BUCKET_1_NAME
gsutil iam ch allUsers:objectViewer gs://BUCKET_2_NAME

外部 IP アドレスの予約

バケットが稼働し始めたので、次にロードバランサにユーザーが接続する際に使用するグローバル静的外部 IP アドレスを設定します。

この手順は省略可能ですが、静的外部 IP アドレスはドメインを指定するための単一アドレスを提供するため、行うことをおすすめします。

Console

  1. Google Cloud Console で外部 IP アドレスのページに移動します。
    [外部 IP アドレス] ページに移動
  2. [静的アドレスを予約] をクリックして、IPv4 アドレスを予約します。
  3. example-ip の [名前] を割り当てます。
  4. ネットワーク階層を [プレミアム] に設定します。
  5. [IP バージョン] を IPv4 に設定します。
  6. [タイプ] で [グローバル] をオンにします。
  7. [予約] をクリックします。
  8. [タイプ] が [グローバル] に設定されていることを確認します。
  9. [予約] をクリックします。

gcloud

gcloud compute addresses create example-ip \
    --network-tier=PREMIUM \
    --ip-version=IPV4 \
    --global

予約されている IPv4 アドレスをメモします。

gcloud compute addresses describe example-ip \
    --format="get(address)" \
    --global

バックエンド バケットを使用して HTTP ロードバランサを作成する

HTTPS ロードバランサを作成する場合は、ロードバランサのフロントエンドに SSL 証明書リソースを追加する必要があります。詳細については、SSL 証明書の概要をご覧ください。

Console

  1. Google Cloud Console の [負荷分散] ページに移動します。
    [負荷分散] ページに移動
  2. [HTTP(S) 負荷分散] で [構成を開始] をクリックします。
  3. [インターネットから自分の VM へ] を選択します。
  4. [名前] を http-lb に設定します。

バックエンドを構成する

  1. [バックエンドの構成] をクリックします。
  2. [バックエンド サービスとバックエンド バケット] で、[バックエンド サービスとバックエンド バケットの作成または選択] をクリックし、[バックエンド バケット]、[バックエンド サービスを作成] の順にクリックします。
  3. [名前] を cats に設定します。
  4. [Cloud Storage バケット] で [参照] をクリックします。
  5. BUCKET_1_NAME を選択し、[選択] をクリックします。
  6. [作成] をクリックします。

この手順を繰り返して dogs を作成し、BUCKET_2_NAME を参照します。

ホストルールとパスマッチャーを構成する

ホストルールとパスマッチャーは、外部 HTTP(S) ロードバランサの URL マップの構成要素です。

  1. [ホストとパスのルール] をクリックします。
  2. cats の場合、デフォルトのホストとパスは変更できません。これは、一致しないすべてのリクエストが cats に転送されることを意味します。
  3. dogs の場合は、[ホスト] フィールドに「*」を入力します。
  4. dogs の場合は、[パス] フィールドに「/love-to-fetch/*」を入力します。

    ホスト パス バックエンド
    不一致すべて(デフォルト) 不一致すべて(デフォルト)
    * /love-to-fetch/*

フロントエンドを構成する

  1. [フロントエンドの構成] をクリックします。
  2. 以下のオプションが次の値で構成されていることを確認します。

    プロパティ 値(値を入力するか、指定されたオプションを選択)
    プロトコル HTTP
    ネットワーク サービス階層 プレミアム
    IP バージョン IPv4
    IP アドレス example-ip
    ポート 80

    HTTP ロードバランサの代わりに HTTPS ロードバランサを作成する場合は、SSL 証明書gcloud compute ssl-certificates list)が必要です。また、次のようにフィールドに入力する必要があります。

    プロパティ 値(値を入力するか、指定されたオプションを選択)
    プロトコル HTTP(S)
    ネットワーク サービス階層 プレミアム
    IP バージョン IPv4
    IP アドレス example-ip
    ポート 443
    証明書を選択するか、新しい証明書を作成する
  3. [完了] をクリックします。

構成の確認

  1. [確認と完了] をクリックします。
  2. バックエンド バケットホストとパスのルールフロントエンドを確認します。
  3. [作成] をクリックします。
  4. ロードバランサの作成が完了するまで待ちます。
  5. ロードバランサの名前(http-lb)をクリックします。
  6. ロードバランサの IP アドレスをメモします(次のタスクで使用します)。次のタスクでは IP_ADDRESS とします。

gcloud

バックエンドを構成する

gcloud compute backend-buckets create cats \
    --gcs-bucket-name=BUCKET_1_NAME
gcloud compute backend-buckets create dogs \
    --gcs-bucket-name=BUCKET_2_NAME

URL マップを構成する

gcloud compute url-maps create http-lb \
    --default-backend-bucket=cats
gcloud compute url-maps add-path-matcher http-lb \
    --path-matcher-name=path-matcher-2 \
    --new-hosts=* \
    --backend-bucket-path-rules="/love-to-fetch/*=dogs" \
    --default-backend-bucket=cats

ターゲット プロキシを構成する

gcloud compute target-http-proxies create http-lb-proxy \
    --url-map=http-lb

転送ルールを構成する

gcloud compute forwarding-rules create http-lb-forwarding-rule \
    --address=example-ip \
    --global \
    --target-http-proxy=http-lb-proxy \
    --ports=80

バックエンド バケットへのトラフィックの送信

ロードバランサが構成されたので、ロードバランサの IP アドレスにトラフィックを送信できるようになりました。

Console

  1. Google Cloud Console の [負荷分散] ページに移動します。
    [負荷分散] ページに移動
  2. http-lb をクリックして、作成したロードバランサを展開します。
  3. [バックエンド] セクションで、バックエンド バケットが正常であることを確認します。 バックエンド バケットの横に緑色のチェックマークが表示されます。それ以外の場合は、最初にページを再読み込みしてみてください。Cloud Console で、バックエンドが正常と表示されるまでに時間がかかることがあります。
  4. Cloud Console でバックエンドが正常であることを確認してから、ウェブブラウザでロードバランサをテストするには、https://IP_ADDRESS/love-to-fetch/two-dogs.jpg と https://IP_ADDRESS/never-fetch/three-cats.jpg にアクセスします。ここで、IP_ADDRESSロードバランサの IP アドレスです。 グラフィック ファイルを含むコンテンツのページがブラウザに表示されます。

    • http://IP_ADDRESS/love-to-fetch/two-dogs.jpg
    • http://IP_ADDRESS/never-fetch/three-cats.jpg

gcloud

curl コマンドを使用して、URL からのレスポンスをテストします。IP_ADDRESSロードバランサの IPv4 アドレスに置き換えます。

curl http://IP_ADDRESS/love-to-fetch/two-dogs.jpg
curl http://IP_ADDRESS/never-fetch/three-cats.jpg

制限事項

  • バックエンド バケットは、外部 HTTP(S) ロードバランサでのみサポートされています。
  • Identity-Aware Proxy ではバックエンド バケットはサポートされていません。

次のステップ