バックエンド バケットを使用したグローバル外部 HTTP(S) ロードバランサ(従来)の設定

バックエンド バケットは、HTTP(S) ロード バランシング用の Cloud Storage バケットのバックエンドです。

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

外部 HTTP(S) ロードバランサは、URL マップを使用して、指定された URL からトラフィックをバックエンドに転送します。

次の図では、ロードバランサが /video/* のパスを含むトラフィックを videos という Cloud Storage バケットに送信しています。その他のリクエストはすべて、website という名前の Cloud Storage バケットに送信されます。

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

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

この例では、BUCKET_1_NAMEcatsBUCKET_2_NAMEdogs という名前になっています。

デフォルトで Cloud Storage では、Cloud CDN が使用するものと同じキャッシュを使用します。バックエンド バケットで Cloud CDN を有効にすると、コンテンツで Cloud CDN コントロールを使用できます。Cloud CDN のコントロールには、キャッシュ モード、署名付き URL、無効化などがあります。Cloud CDN では、サイズの大きいコンテンツ(10 MB 超)をキャッシュに保存することもできます。バックエンド バケットで Cloud CDN を有効にしない場合は、Cloud Storage メタデータで設定されたように、送信元の Cache-Control ヘッダーを使用して、小規模なコンテンツのキャッシュを制御することのみ可能です。

始める前に

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

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

  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
    
    • <var>PROJECT_ID</var> - このガイドで使用するプロジェクトです。

権限

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

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

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

SSL 証明書リソースを設定する

HTTPS ロードバランサの場合、SSL 証明書リソースは、次のように作成します。

Google マネージド証明書を使用することをおすすめします。

この例では、SSL 証明書リソース www-ssl-cert をすでに利用していることを前提としています。

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. ロールとして [Cloud Storage] > [Storage オブジェクト閲覧者] を選択します。
  6. [一般公開アクセスを許可] をクリックします。
  7. [保存] をクリックします。

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 で、[負荷分散] ページに移動します。

    [Cloud Load balancing] に移動
  2. [HTTP(S) 負荷分散] で [構成を開始] をクリックします。
  3. [インターネットから自分の VM へ] をオンにし、[続行] をクリックします。
  4. [高度なトラフィック管理] で [従来の HTTP(S) ロードバランサ] を選択します。
  5. [続行] をクリックします。
  6. [名前] を 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/*」を入力します。
  5. ホスト パス バックエンド
    不一致すべて(デフォルト) 不一致すべて(デフォルト)
    * /love-to-fetch/* dogs
フロントエンドを構成する
  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
    証明書を選択するか、新しい証明書を作成する
    (省略可)HTTP から HTTPS へのリダイレクトを有効にする このチェックボックスを使用して、ポート 80 からポート 443 へのリダイレクトを有効にします。

    このチェックボックスをオンにすると、HTTPS ロードバランサと同じ IP アドレスを使用し、HTTP リクエストをロードバランサの HTTPS フロントエンドにリダイレクトする追加の部分的な HTTP ロードバランサが作成されます。

    このチェックボックスは、HTTPS プロトコルが選択されていて、予約済みの IP アドレスが使用されている場合にのみ選択できます。

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

gcloud

バックエンドを構成する

    gcloud compute backend-buckets create cats \
        --load-balancing-scheme=EXTERNAL \
        --gcs-bucket-name=BUCKET_1_NAME
    

    gcloud compute backend-buckets create dogs \
        --load-balancing-scheme=EXTERNAL \
        --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 \
        --load-balancing-scheme=EXTERNAL \
        --network-tier=PREMIUM \
        --address=example-ip \
        --global \
        --target-http-proxy=http-lb-proxy \
        --ports=80
    

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

ロードバランサの構成から数分後、ロードバランサの IP アドレスへのトラフィックの送信を開始できます。

Console

  1. Google Cloud Console の [負荷分散] ページに移動します。
    [負荷分散] ページに移動
  2. http-lb をクリックして、作成したロードバランサを展開します。
  3. ウェブブラウザを使用してロードバランサをテストするには、次の URL にアクセスします。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) ロードバランサとグローバル外部 HTTP(S) ロードバランサ(従来型)でのみサポートされます。リージョン外部 HTTP(S) ロードバランサやその他の種類のロードバランサではサポートされません。
  • Identity-Aware Proxy ではバックエンド バケットはサポートされていません。

次のステップ