このドキュメントでは、リージョン外部アプリケーション ロードバランサを作成して、静的コンテンツのリクエストを Cloud Storage バケットに転送する方法について説明します。
始める前に
設定が次の前提条件を満たしていることを確認します。
Google Cloud CLI をインストールする
このガイドの手順の一部は、Google Cloud CLI を使用してのみ実行できます。インストールするには、gcloud CLI をインストールするをご覧ください。
ロード バランシングに関連するコマンドについては、API と gcloud CLI のリファレンス ドキュメントをご覧ください。
必要なロール
プロジェクト作成者にはオーナーロール(roles/owner)が付与されます。デフォルトでは、オーナーロール(roles/owner)または編集者ロール(roles/editor)には、このドキュメントの手順に沿って操作するために必要な権限が含まれています。
プロジェクト作成者でない場合は、プロジェクトで必要な権限を適切なプリンシパルに付与する必要があります。プリンシパルは、Google アカウント(エンドユーザーの場合)やサービス アカウントになることもあります。
Cloud Storage バケットとネットワーク リソースの作成に必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。
-
VPC ネットワークとロード バランシング コンポーネントを作成する: Compute ネットワーク管理者のロール (
roles/compute.networkAdmin) -
Cloud Storage バケットを作成する: ストレージ オブジェクト管理者ロール (
roles/storage.objectAdmin)
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
Cloud Load Balancing のロールと権限の詳細については、ロールと権限をご覧ください。転送ルールの条件付き付与で IAM ポリシーを定義する方法については、転送ルールの IAM 条件をご覧ください。
SSL 証明書リソースを設定する
リクエスト レスポンス プロトコルとして HTTPS を使用するリージョン外部アプリケーション ロードバランサの場合は、Compute Engine SSL 証明書または Certificate Manager 証明書を使用して SSL 証明書リソースを作成できます。
この例では、次のいずれかのドキュメントの説明に沿って Certificate Manager を使用して SSL 証明書リソースを作成します。
- DNS 認証を使用して、リージョン Google マネージド証明書をデプロイする
- Certificate Authority Service を使用してリージョン Google マネージド証明書をデプロイする
- リージョン セルフマネージド証明書をデプロイする
証明書を作成したら、証明書を HTTPS ターゲット プロキシに関連付けることができます。
Google マネージド証明書を使用することをおすすめします。
制限事項
リージョン外部アプリケーション ロードバランサのバックエンドとして機能する場合、Cloud Storage バケットには次の制限が適用されます。
プライベート バケットへのアクセスはサポートされていないため、バックエンド バケットはインターネット経由で一般公開する必要があります。
署名付き URL はサポートされていません。
リージョン外部アプリケーション ロードバランサのバックエンド バケットを作成するときに、Cloud CDN との統合は使用できません。
リージョン外部アプリケーション ロードバランサを使用してバックエンド バケットにアクセスする場合、HTTP
GETメソッドのみがサポートされます。バケットからコンテンツをダウンロードできますが、リージョン外部アプリケーション ロードバランサを介してバケットにコンテンツをアップロードすることはできません。リージョン外部アプリケーション ロードバランサの場合、Cloud Storage バケットはロードバランサが構成されているリージョンでのみサポートされます。デュアルリージョンまたはマルチリージョン バケットはサポートされていません。
設定の概要
次の図は、ロードバランサと同じリージョンにバックエンド バケットがあるリージョン外部アプリケーション ロードバランサを示しています。
リージョン外部アプリケーション ロードバランサの転送ルールに外部 IP アドレスがあります。
以降のセクションでは、上の図に示すようにさまざまなリソースを構成します。
ネットワークとプロキシ専用サブネットを構成する
この例では、次の VPC ネットワーク、リージョン、プロキシ専用サブネットを使用します。
ネットワーク。ネットワークは、
lb-networkという名前のカスタムモード VPC ネットワークです。Envoy プロキシのサブネット。
us-east1リージョンのproxy-only-subnet-usという名前のサブネットは、プライマリ IP 範囲として10.129.0.0/23を使用します。
カスタムモードの VPC ネットワークを構成する
コンソール
Google Cloud コンソールで、[VPC ネットワーク] ページに移動します。
[VPC ネットワークを作成] をクリックします。
[名前] に「
lb-network」と入力します。[作成] をクリックします。
gcloud
gcloud compute networks createコマンドを使用して、lb-networkというカスタム VPC ネットワークを作成します。gcloud compute networks create lb-network --subnet-mode=custom
プロキシ専用サブネットを構成する
プロキシ専用サブネットには、 Google Cloud がユーザーに代わって Envoy プロキシを実行する際に使用する一連の IP アドレスが用意されています。このプロキシは、クライアントからの接続を終端し、バックエンドへの新しい接続を作成します。
このプロキシ専用サブネットは、VPC ネットワークと同じリージョン内のすべての Envoy ベースのロードバランサで使用されます。特定の目的では、リージョンごと、ネットワークごとにアクティブなプロキシ専用サブネットが 1 つだけの場合があります。
コンソール
Google Cloud コンソールで、[VPC ネットワーク] ページに移動します。
作成した VPC ネットワークの名前をクリックします。
[サブネット] タブで [サブネットを追加] をクリックします。
次の情報を入力します。
- 名前:
proxy-only-subnet-us - リージョン:
us-east1 - 目的: リージョン マネージド プロキシ
- IP アドレス範囲:
10.129.0.0/23
- 名前:
[追加] をクリックします。
gcloud
gcloud compute networks subnets createコマンドを使用して、us-east1リージョンにプロキシ専用サブネットを作成します。gcloud compute networks subnets create proxy-only-subnet-us \ --purpose=REGIONAL_MANAGED_PROXY \ --role=ACTIVE \ --region=us-east1 \ --network=lb-network \ --range=10.129.0.0/23
Cloud Storage バケットを構成する
Cloud Storage バケットを構成するプロセスは次のとおりです。
- バケットを作成します。
- コンテンツをバケットにコピーします。
Cloud Storage バケットを作成する
この例では、us-east1 リージョンに 2 つの Cloud Storage バケットを作成します。
コンソール
- Google Cloud コンソールで Cloud Storage の [バケット] ページに移動します。
[作成] をクリックします。
[始める] セクションに、命名ガイドラインに沿ったグローバルに一意の名前を入力します。
[データの保存場所の選択] をクリックします。
[ロケーション タイプ] を [リージョン] に設定します。
リージョンのリストから [us-east1] を選択します。
[作成] をクリックします。
[バケット] をクリックして Cloud Storage の [バケット] ページに戻ります。次の手順で、us-east1 リージョンに 2 番目のバケットを作成します。
gcloud
gcloud storage buckets createコマンドを使用して、us-east1リージョンに最初のバケットを作成します。gcloud storage buckets create gs://BUCKET1_NAME \ --default-storage-class=standard \ --location=us-east1 \ --uniform-bucket-level-accessgcloud storage buckets createコマンドを使用して、us-east1リージョンに 2 つ目のバケットを作成します。gcloud storage buckets create gs://BUCKET2_NAME \ --default-storage-class=standard \ --location=us-east1 \ --uniform-bucket-level-access
変数 BUCKET1_NAME と BUCKET2_NAME は、Cloud Storage バケット名に置き換えます。
グラフィック ファイルを Cloud Storage バケットにコピーする
設定をテストするには、Cloud Storage の公開バケットから独自の Cloud Storage バケットにグラフィック ファイルをコピーします。
Cloud Shell で次のコマンドを実行します。バケット名の変数は一意の Cloud Storage バケット名に置き換えます。
gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://BUCKET1_NAME/love-to-purr/
gcloud storage cp gs://gcp-external-http-lb-with-bucket/two-dogs.jpg gs://BUCKET2_NAME/love-to-fetch/
Cloud Storage バケットを公開する
公共のインターネット上のすべてのユーザーがバケット内のすべてのオブジェクトを閲覧できるようにするには、プリンシパル allUsers に Storage オブジェクト閲覧者(roles/storage.objectViewer)のロールを付与します。
コンソール
バケット内のすべてのオブジェクトに対するアクセス権をすべてのユーザーに付与するには、バケットごとに次の手順を繰り返します。
- Google Cloud コンソールで Cloud Storage の [バケット] ページに移動します。
バケットのリストで、公開するバケットの名前をクリックします。
[権限] タブを選択します。
[権限] セクションで、[ アクセスを許可] ボタンをクリックします。[アクセスを許可] ダイアログが表示されます。
[新しいプリンシパル] フィールドに「
allUsers」と入力します。[ロールを選択] フィールドで、フィルタ ボックスに「
Storage Object Viewer」と入力し、フィルタされた結果から [Storage オブジェクト閲覧者] を選択します。[保存] をクリックします。
[一般公開アクセスを許可] をクリックします。
gcloud
バケット内のオブジェクトを表示する権限をすべてのユーザーに付与するには、buckets add-iam-policy-binding コマンドを実行します。
gcloud storage buckets add-iam-policy-binding gs://BUCKET1_NAME \
--member=allUsers \
--role=roles/storage.objectViewer
gcloud storage buckets add-iam-policy-binding gs://BUCKET2_NAME \ --member=allUsers \ --role=roles/storage.objectViewer
ロードバランサの IP アドレスを予約する
ロードバランサの転送ルールに静的外部 IP アドレスを予約します。
コンソール
Google Cloud コンソールで、[静的アドレスの予約] ページに移動します。
新しいアドレスの名前を指定します。
[IP バージョン] で [IPv4] を選択します。
[タイプ] で [リージョン] を選択します。
[リージョン] で [us-east1] を選択します。
[接続先] オプションは [なし] のままにします。ロードバランサを作成すると、この IP アドレスがロードバランサの転送ルールに関連付けられます。
[予約] をクリックして IP アドレスを予約します。
gcloud
静的外部 IP アドレスを予約するには、
gcloud compute addresses createコマンドを使用します。gcloud compute addresses create ADDRESS_NAME \ --region=us-east1
次のように置き換えます。
ADDRESS_NAME: このアドレスに付ける名前。
結果を表示するには、
gcloud compute addresses describeコマンドを使用します。gcloud compute addresses describe ADDRESS_NAME
返された IP アドレスは、次のセクションで RESERVED_IP_ADDRESS として参照されます。
バックエンド バケットを使用してロードバランサを構成する
このセクションでは、リージョン外部アプリケーション ロードバランサに次のリソースを作成する方法について説明します。
- 2 つのバックエンド バケット。バックエンド バケットは、前に作成した Cloud Storage バケットのラッパーとして機能します。
- URL マップ
- ターゲット プロキシ
- リージョン IP アドレスを持つ転送ルール。転送ルールに外部 IP アドレスが設定されている。
この例では、クライアントとロードバランサの間のリクエスト レスポンス プロトコルとして HTTP または HTTPS を使用できます。HTTPS ロードバランサを作成するには、ロードバランサのフロントエンドに SSL 証明書リソースを追加する必要があります。
gcloud CLI を使用して前述のロード バランシング コンポーネントを作成するには、次の操作を行います。
gcloud beta compute backend-buckets createコマンドを使用して、us-east1リージョンに 2 つのバックエンド バケットを作成します。バックエンド バケットのロード バランシング スキームはEXTERNAL_MANAGEDです。gcloud beta compute backend-buckets create backend-bucket-cats \ --gcs-bucket-name=BUCKET1_NAME \ --load-balancing-scheme=EXTERNAL_MANAGED \ --region=us-east1gcloud beta compute backend-buckets create backend-bucket-dogs \ --gcs-bucket-name=BUCKET2_NAME \ --load-balancing-scheme=EXTERNAL_MANAGED \ --region=us-east1変数
BUCKET1_NAMEとBUCKET2_NAMEは、Cloud Storage バケット名に置き換えます。gcloud beta compute url-maps createコマンドを使用して、受信リクエストをバックエンド バケットに転送する URL マップを作成します。gcloud beta compute url-maps create URL_MAP_NAME \ --default-backend-bucket=backend-bucket-cats \ --region=us-east1変数
URL_MAP_NAMEは、URL マップの名前に置き換えます。gcloud beta compute url-maps add-path-matcherコマンドを使用して、URL マップのホストルールとパスルールを構成します。この例では、デフォルトのバックエンド バケットは
backend-bucket-catsで、このバケット内に存在するすべてのパスを処理します。ただし、http://FORWARDING_RULE_IP_ADDRESS/love-to-fetch/two-dogs.jpgをターゲットとするリクエストはbackend-bucket-dogsバックエンドを使用します。たとえば、/love-to-fetch/フォルダがデフォルト バックエンド(backend-bucket-cats)にも存在する場合、/love-to-fetch/*に特定のパスルールがあるため、ロードバランサはbackend-bucket-dogsバックエンドの優先度を上げます。gcloud beta compute url-maps add-path-matcher URL_MAP_NAME \ --path-matcher-name=path-matcher-pets \ --new-hosts=* \ --backend-bucket-path-rules="/love-to-fetch/*=backend-bucket-dogs" \ --default-backend-bucket=backend-bucket-cats変数
URL_MAP_NAMEは、URL マップの名前に置き換えます。gcloud compute target-http-proxies createコマンドを使用して、ターゲット プロキシを作成します。HTTP トラフィックの場合、リクエストを URL マップに転送するターゲット HTTP プロキシを作成します。
gcloud compute target-http-proxies create http-proxy \ --url-map=URL_MAP_NAME \ --region=us-east1変数
URL_MAP_NAMEは、URL マップの名前に置き換えます。HTTPS トラフィックの場合、リクエストを URL マップに転送するターゲット HTTPS プロキシを作成します。プロキシは、HTTPS ロードバランサの SSL 証明書を保持するロードバランサの一部です。証明書を作成したら、証明書を HTTPS ターゲット プロキシに関連付けることができます。
Certificate Manager 証明書を関連付けるには、次のコマンドを実行します。
gcloud compute target-https-proxies create https-proxy \ --url-map=URL_MAP_NAME \ --certificate-manager-certificates=CERTIFICATE_NAME \ --region=us-east1次のように置き換えます。
URL_MAP_NAME: URL マップの名前CERTIFICATE_NAME: Certificate Manager を使用して作成した SSL 証明書の名前。
gcloud compute forwarding-rules createコマンドを使用して、us-east1リージョンの IP アドレスを持つ転送ルールを作成します。HTTP トラフィックの場合、受信リクエストを HTTP ターゲット プロキシに転送するリージョン転送ルールを作成します。
gcloud compute forwarding-rules create http-fw-rule \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network=lb-network \ --address=RESERVED_IP_ADDRESS \ --ports=80 \ --region=us-east1 \ --target-http-proxy=http-proxy \ --target-http-proxy-region=us-east1HTTPS トラフィックの場合、受信リクエストを HTTPS ターゲット プロキシに転送するリージョン転送ルールを作成します。
gcloud compute forwarding-rules create https-fw-rule \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network=lb-network \ --address=RESERVED_IP_ADDRESS \ --ports=443 \ --region=us-east1 \ --target-https-proxy=https-proxy \ --target-https-proxy-region=us-east1
ロードバランサに HTTP リクエストを送信する
ロード バランシング サービスが稼働中になったので、ロードバランサの転送ルールにリクエストを送信できます。
us-east1リージョンにあるロードバランサの転送ルール(http-fw-rule)の IP アドレスを取得します。gcloud compute forwarding-rules describe http-fw-rule \ --region=us-east1返された IP アドレスをコピーして、次のステップで
FORWARDING_RULE_IP_ADDRESSとして使用します。curl を使用して、転送ルールの仮想 IP アドレス(VIP)に HTTP リクエストを送信します。
curl http://FORWARDING_RULE_IP_ADDRESS/love-to-purr/three-cats.jpg --output three-cats.jpg
curl http://FORWARDING_RULE_IP_ADDRESS/love-to-fetch/two-dogs.jpg --output two-dogs.jpg