Cloud Storage バケットを使用してリージョン外部アプリケーション ロードバランサを設定する

このドキュメントでは、リージョン外部アプリケーション ロードバランサを作成して、静的コンテンツのリクエストを Cloud Storage バケットに転送する方法について説明します。

始める前に

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

Google Cloud CLI をインストールする

このガイドの手順の一部は、Google Cloud CLI を使用してのみ実行できます。インストールするには、gcloud CLI をインストールするをご覧ください。

ロード バランシングに関連するコマンドについては、API と gcloud CLI のリファレンス ドキュメントをご覧ください。

必要なロール

プロジェクト作成者にはオーナーロールroles/owner)が付与されます。デフォルトでは、オーナーロール(roles/owner)または編集者ロール(roles/editor)には、このドキュメントの手順に沿って操作するために必要な権限が含まれています。

プロジェクト作成者でない場合は、プロジェクトで必要な権限を適切なプリンシパルに付与する必要があります。プリンシパルは、Google アカウント(エンドユーザーの場合)やサービス アカウントになることもあります。

Cloud Storage バケットとネットワーク リソースの作成に必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。

ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

Cloud Load Balancing のロールと権限の詳細については、ロールと権限をご覧ください。転送ルールの条件付き付与で IAM ポリシーを定義する方法については、転送ルールの IAM 条件をご覧ください。

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

リクエスト レスポンス プロトコルとして HTTPS を使用するリージョン外部アプリケーション ロードバランサの場合は、Compute Engine SSL 証明書または Certificate Manager 証明書を使用して SSL 証明書リソースを作成できます。

この例では、次のいずれかのドキュメントの説明に沿って Certificate Manager を使用して SSL 証明書リソースを作成します。

証明書を作成したら、証明書を HTTPS ターゲット プロキシに関連付けることができます。

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

制限事項

リージョン外部アプリケーション ロードバランサのバックエンドとして機能する場合、Cloud Storage バケットには次の制限が適用されます。

  • プライベート バケットへのアクセスはサポートされていないため、バックエンド バケットはインターネット経由で一般公開する必要があります。

  • 署名付き URL はサポートされていません。

  • リージョン外部アプリケーション ロードバランサのバックエンド バケットを作成するときに、Cloud CDN との統合は使用できません。

  • リージョン外部アプリケーション ロードバランサを使用してバックエンド バケットにアクセスする場合、HTTP GET メソッドのみがサポートされます。バケットからコンテンツをダウンロードできますが、リージョン外部アプリケーション ロードバランサを介してバケットにコンテンツをアップロードすることはできません。

  • リージョン外部アプリケーション ロードバランサの場合、Cloud Storage バケットはロードバランサが構成されているリージョンでのみサポートされます。デュアルリージョンまたはマルチリージョン バケットはサポートされていません。

設定の概要

次の図は、ロードバランサと同じリージョンにバックエンド バケットがあるリージョン外部アプリケーション ロードバランサを示しています。

リージョン外部アプリケーション ロードバランサの転送ルールに外部 IP アドレスがあります。

リージョン外部アプリケーション ロードバランサは、Cloud Storage バックエンドにトラフィックを送信します。
Cloud Storage へのトラフィックの分散(クリックして拡大)

以降のセクションでは、上の図に示すようにさまざまなリソースを構成します。

ネットワークとプロキシ専用サブネットを構成する

この例では、次の VPC ネットワーク、リージョン、プロキシ専用サブネットを使用します。

  • ネットワーク。ネットワークは、lb-network という名前のカスタムモード VPC ネットワークです。

  • Envoy プロキシのサブネットus-east1 リージョンの proxy-only-subnet-us という名前のサブネットは、プライマリ IP 範囲として 10.129.0.0/23 を使用します。

カスタムモードの VPC ネットワークを構成する

コンソール

  1. Google Cloud コンソールで、[VPC ネットワーク] ページに移動します。

    [VPC ネットワーク] に移動

  2. [VPC ネットワークを作成] をクリックします。

  3. [名前] に「lb-network」と入力します。

  4. [作成] をクリックします。

gcloud

  1. gcloud compute networks create コマンドを使用して、lb-network というカスタム VPC ネットワークを作成します。

    gcloud compute networks create lb-network --subnet-mode=custom
    

プロキシ専用サブネットを構成する

プロキシ専用サブネットには、 Google Cloud がユーザーに代わって Envoy プロキシを実行する際に使用する一連の IP アドレスが用意されています。このプロキシは、クライアントからの接続を終端し、バックエンドへの新しい接続を作成します。

このプロキシ専用サブネットは、VPC ネットワークと同じリージョン内のすべての Envoy ベースのロードバランサで使用されます。特定の目的では、リージョンごと、ネットワークごとにアクティブなプロキシ専用サブネットが 1 つだけの場合があります。

コンソール

  1. Google Cloud コンソールで、[VPC ネットワーク] ページに移動します。

    [VPC ネットワーク] に移動

  2. 作成した VPC ネットワークの名前をクリックします。

  3. [サブネット] タブで [サブネットを追加] をクリックします。

  4. 次の情報を入力します。

    • 名前: proxy-only-subnet-us
    • リージョン: us-east1
    • 目的: リージョン マネージド プロキシ
    • IP アドレス範囲: 10.129.0.0/23
  5. [追加] をクリックします。

gcloud

  1. 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 バケットを作成します。

コンソール

  1. Google Cloud コンソールで Cloud Storage の [バケット] ページに移動します。

    [バケット] に移動

  2. [作成] をクリックします。

  3. [始める] セクションに、命名ガイドラインに沿ったグローバルに一意の名前を入力します。

  4. [データの保存場所の選択] をクリックします。

  5. [ロケーション タイプ] を [リージョン] に設定します。

  6. リージョンのリストから [us-east1] を選択します。

  7. [作成] をクリックします。

  8. [バケット] をクリックして Cloud Storage の [バケット] ページに戻ります。次の手順で、us-east1 リージョンに 2 番目のバケットを作成します。

gcloud

  1. gcloud storage buckets create コマンドを使用して、us-east1 リージョンに最初のバケットを作成します。

    gcloud storage buckets create gs://BUCKET1_NAME \
        --default-storage-class=standard \
        --location=us-east1 \
        --uniform-bucket-level-access
    
  2. gcloud 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_NAMEBUCKET2_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)のロールを付与します。

コンソール

バケット内のすべてのオブジェクトに対するアクセス権をすべてのユーザーに付与するには、バケットごとに次の手順を繰り返します。

  1. Google Cloud コンソールで Cloud Storage の [バケット] ページに移動します。

    [バケット] に移動

  2. バケットのリストで、公開するバケットの名前をクリックします。

  3. [権限] タブを選択します。

  4. [権限] セクションで、[ アクセスを許可] ボタンをクリックします。[アクセスを許可] ダイアログが表示されます。

  5. [新しいプリンシパル] フィールドに「allUsers」と入力します。

  6. [ロールを選択] フィールドで、フィルタ ボックスに「Storage Object Viewer」と入力し、フィルタされた結果から [Storage オブジェクト閲覧者] を選択します。

  7. [保存] をクリックします。

  8. [一般公開アクセスを許可] をクリックします。

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 アドレスを予約します。

コンソール

  1. Google Cloud コンソールで、[静的アドレスの予約] ページに移動します。

    [静的アドレスの予約] に移動

  2. 新しいアドレスの名前を指定します。

  3. [IP バージョン] で [IPv4] を選択します。

  4. [タイプ] で [リージョン] を選択します。

  5. [リージョン] で [us-east1] を選択します。

  6. [接続先] オプションは [なし] のままにします。ロードバランサを作成すると、この IP アドレスがロードバランサの転送ルールに関連付けられます。

  7. [予約] をクリックして IP アドレスを予約します。

gcloud

  1. 静的外部 IP アドレスを予約するには、gcloud compute addresses create コマンドを使用します。

    gcloud compute addresses create ADDRESS_NAME \
       --region=us-east1
    

    次のように置き換えます。

    • ADDRESS_NAME: このアドレスに付ける名前。
  2. 結果を表示するには、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 を使用して前述のロード バランシング コンポーネントを作成するには、次の操作を行います。

  1. 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-east1
    
    gcloud beta compute backend-buckets create backend-bucket-dogs \
        --gcs-bucket-name=BUCKET2_NAME \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --region=us-east1
    

    変数 BUCKET1_NAMEBUCKET2_NAME は、Cloud Storage バケット名に置き換えます。

  2. 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 マップの名前に置き換えます。

  3. 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 マップの名前に置き換えます。

  4. 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
    

    次のように置き換えます。

  5. 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-east1
    

    HTTPS トラフィックの場合、受信リクエストを 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 リクエストを送信する

ロード バランシング サービスが稼働中になったので、ロードバランサの転送ルールにリクエストを送信できます。

  1. us-east1 リージョンにあるロードバランサの転送ルール(http-fw-rule)の IP アドレスを取得します。

      gcloud compute forwarding-rules describe http-fw-rule \
          --region=us-east1
    

    返された IP アドレスをコピーして、次のステップで FORWARDING_RULE_IP_ADDRESS として使用します。

  2. 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
    

次のステップ