バックエンド バケットでは、Google Cloud Storage バケットを HTTP(S) 負荷分散とともに使用できます。
ロードバランサのバックエンドとしての Cloud Storage バケットの使用
外部 HTTP(S) ロードバランサは、URL マップを使用して、指定された URL からのトラフィックをバックエンド サービスまたはバックエンド バケットに送信します。一般的なユースケースは次のとおりです。
- データなどの動的コンテンツに対するリクエストをバックエンド サービスに送信します。
- 画像などの静的コンテンツに対するリクエストをバックエンド バケットに送信します。
次の図では、ロードバランサが /love-to-fetch/
のパスを含むトラフィックを europe-north
リージョンの Cloud Storage バケットに送信しています。他のすべてのリクエストは、us-east
リージョンの Cloud Storage バケットに送信されます。
このドキュメントでは、外部 HTTP(S) ロードバランサを作成して静的コンテンツのリクエストを Cloud Storage バケットにルーティングする方法について説明します。バックエンド バケットを使用してロードバランサを構成した後、/love-to-fetch
で始まる URL パスへのリクエストは europe-north
Cloud Storage バケットに送信され、その他のリクエストはすべて us-east
Cloud Storage バケットに送信されます。
始める前に
設定が前提条件を満たしていることを確認します。
デフォルト プロジェクトの設定
gcloud
またはgsutil
ユーティリティを使用している場合は、両方をクイックスタート: gsutil ツールの使用の手順に従ってインストールできます。-
コンソール
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 リージョン間でオブジェクトを自動的に複製するマルチリージョン バケットを選択することをおすすめします。これにより、コンテンツの可用性が高まり、アプリケーション全体のフォールト トレラントが向上します。
コンソール
- Cloud Console で、Cloud Storage ブラウザを開きます。
Cloud Storage ブラウザを開く - [バケットを作成] をクリックします。
以下のフィールドの値を設定します。その他のフィールドはデフォルト値のままにします。
プロパティ 値(値を入力するか、指定されたオプションを選択) 名前 バケットごとに、グローバルに一意の名前を入力します。入力した名前が一意でない場合、別の名前を試すように促すメッセージが表示されます。 ロケーション タイプ この例では、[リージョン] を選択します。本番環境へのデプロイでは、マルチリージョン バケットをおすすめします。 ロケーション 1 つのバケットに対して us-east1 を選択します。
もう 1 つのバケットには europe-north1 を選択します。デフォルトのストレージ クラス 標準 アクセス制御 均一 [作成] をクリックします。
次のステップのために、新たに作成された Cloud Storage バケットの名前をメモします。この名前を
BUCKET_1_NAME
とBUCKET_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 バケットにグラフィック ファイルをコピーします。
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/
Cloud Console で、[バケットを更新] をクリックして、グラフィック ファイルがコピーされたことを確認します。
Cloud Storage バケットの公開
Cloud Storage バケットを公開します。この設定では、インターネット上のすべてのユーザーがオブジェクトとそのメタデータ(ACL を除く)を表示できます。インターネット上の誰でもバケット内のオブジェクトを一覧表示できます。公開バケットに機密情報を含めないでください。
機密情報が誤って公開される可能性を減らすため、公開オブジェクトと機密データを同じバケットに保存しないでください。詳細については、推奨されるバケット アーキテクチャをご覧ください。
Console
バケット内のオブジェクトを表示する権限をすべてのユーザーに付与します。この手順をバケットごとに繰り返します。
- Cloud Console で、Cloud Storage ブラウザを開きます。
Cloud Storage ブラウザを開く - バケットに移動して、[権限] タブをクリックします。
- [メンバーを追加] をクリックして選択します。
- [新しいメンバー] に「
allUsers
」と入力します。 - ロールとして、[ストレージ] > [ストレージ オブジェクト閲覧者] を選択します。
- [保存] をクリックします。
gsutil
gsutil iam ch allUsers:objectViewer gs://BUCKET_1_NAME
gsutil iam ch allUsers:objectViewer gs://BUCKET_2_NAME
外部 IP アドレスの予約
バケットが稼働し始めたので、次にロードバランサにユーザーが接続する際に使用するグローバル静的外部 IP アドレスを設定します。
この手順は省略可能ですが、静的外部 IP アドレスはドメインを指定するための単一アドレスを提供するため、行うことをおすすめします。
コンソール
- Google Cloud Console で外部 IP アドレスのページに移動します。
[外部 IP アドレス] ページに移動 - [静的アドレスを予約] をクリックして、IPv4 アドレスを予約します。
example-ip
の [名前] を割り当てます。- ネットワーク階層を [プレミアム] に設定します。
- [IP バージョン] を IPv4 に設定します。
- [タイプ] で [グローバル] をオンにします。
- [予約] をクリックします。
- [タイプ] が [グローバル] に設定されていることを確認します。
- [予約] をクリックします。
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 証明書の概要をご覧ください。
コンソール
- Google Cloud Console の [負荷分散] ページに移動します。
[負荷分散] ページに移動 - [HTTP(S) 負荷分散] で [構成を開始] をクリックします。
- [インターネットから自分の VM へ] を選択します。
- [名前] を
http-lb
に設定します。
バックエンドを構成する
- [バックエンドの構成] をクリックします。
- [バックエンド サービスとバックエンド バケット] で、[バックエンド サービスとバックエンド バケットの作成または選択] をクリックし、[バックエンド バケット]、[バックエンド サービスを作成] の順にクリックします。
- [名前] を
cats
に設定します。 - [Cloud Storage バケット] で [参照] をクリックします。
BUCKET_1_NAME
を選択し、[選択] をクリックします。- [作成] をクリックします。
この手順を繰り返して dogs
を作成し、BUCKET_2_NAME を参照します。
ホストルールとパスマッチャーを構成する
ホストルールとパスマッチャーは、外部 HTTP(S) ロードバランサの URL マップの構成要素です。
- [ホストとパスのルール] をクリックします。
cats
の場合、デフォルトのホストとパスは変更できません。これは、一致しないすべてのリクエストがcats
に転送されることを意味します。dogs
の場合は、[ホスト] フィールドに「*
」を入力します。dogs
の場合は、[パス] フィールドに「/love-to-fetch/*
」を入力します。ホスト パス バックエンド 不一致すべて(デフォルト) 不一致すべて(デフォルト) 猫 * /love-to-fetch/* 犬
フロントエンドを構成する
- [フロントエンドの構成] をクリックします。
以下のオプションが次の値で構成されていることを確認します。
プロパティ 値(値を入力するか、指定されたオプションを選択) プロトコル HTTP ネットワーク サービス階層 プレミアム IP バージョン IPv4 IP アドレス example-ip ポート 80 HTTP ロードバランサの代わりに HTTPS ロードバランサを作成する場合は、SSL 証明書(
gcloud compute ssl-certificates list
)が必要です。また、次のようにフィールドに入力する必要があります。プロパティ 値(値を入力するか、指定されたオプションを選択) プロトコル HTTP(S) ネットワーク サービス階層 プレミアム IP バージョン IPv4 IP アドレス example-ip ポート 443 証明書を選択するか、新しい証明書を作成する [完了] をクリックします。
構成の確認
- [確認と完了] をクリックします。
- バックエンド バケット、ホストとパスのルール、フロントエンドを確認します。
- [作成] をクリックします。
- ロードバランサの作成が完了するまで待ちます。
- ロードバランサの名前(http-lb)をクリックします。
- ロードバランサの 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 アドレスにトラフィックを送信できるようになりました。
コンソール
- Google Cloud Console の [負荷分散] ページに移動します。
[負荷分散] ページに移動 http-lb
をクリックして、作成したロードバランサを展開します。- [バックエンド] セクションで、バックエンド バケットが正常であることを確認します。 バックエンド バケットの横に緑色のチェックマークが表示されます。それ以外の場合は、最初にページを再読み込みしてみてください。Cloud Console で、バックエンドが正常と表示されるまでに時間がかかることがあります。
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
- http://
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 ではバックエンド バケットはサポートされていません。