静的ファイルの提供

動的リクエストの処理に加えて、アプリケーションは多くの場合、JavaScript、画像、CSS などの追加の静的ファイルを提供する必要があります。フレキシブル環境では、アプリケーション用の静的コンテンツを提供する方法を決定できます。アプリケーションから静的コンテンツを直接提供したり、Cloud Storage などの GCP オプションでホストしたり、サードパーティのコンテンツ配信ネットワーク(CDN)を使用したりできます。

App Engine からファイルを提供する

通常、アプリからファイルを提供することは簡単ですが、考慮すべき欠点がいくつかあります。

  • 静的ファイルのリクエストにより、動的リクエストに使用できるであろうリソースが消費される可能性がある。
  • 構成によっては、アプリからのファイルを処理する際にレスポンスのレイテンシが発生することがある。負荷を処理するために新しいインスタンスが作成される際にもその影響を受けることがあります。

ヒント: 本番環境では、GCP 内で、または外部のサードパーティ CDN を介し、静的コンテンツをアプリとは別に提供することが一般的なベスト プラクティスです。

アプリで静的ファイルを提供する例

Java ランタイムのサーブレット コンテナはアプリのデプロイ記述子 web.xml ファイルを使用して、静的アセットを含むサーブレットに URL をマッピングします。web.xml を指定しない場合はデフォルトが使用され、デフォルト サーブレットにすべてがマッピングされます。

この例で、./src/main/webapp/index.html/stylesheets/styles.css から提供されるスタイルシートを参照します。

<!doctype html>
<html>
<head>
<title>Static Files</title>
<link rel="stylesheet" type="text/css" href="/stylesheets/styles.css">
</head>
<body>
  <p>This is a static file serving example.</p>
</body>
</html>

styles.css ファイルは ./src/main/webapp/stylesheets/styles.css にあります。

body {
  font-family: Verdana, Helvetica, sans-serif;
  background-color: #CCCCFF;
}

web.xml で静的ファイルの処理方法を明示的に構成できます。たとえば、拡張子が .jpg になっているすべてのファイルのリクエストをマッピングするには、次のように設定します。

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.jpg</url-pattern>
</servlet-mapping>

Play などのウェブ フレームワークを使用している場合は、静的アセットについてフレームワークのドキュメントを参照する必要があります。

GCP からファイルを提供する

Cloud CDN を使用するか、Cloud Storage などの別の GCP ストレージ サービスを利用するという方法もあります。

Cloud Storage からファイルを提供する

動的ウェブアプリの静的アセットをホストするために Cloud Storage を使用できます。アプリから直接提供する代わりに Cloud Storage を使用すると、次のメリットがあります。

  • Cloud Storage は基本的に、コンテンツ配信ネットワークとして機能します。デフォルトでは、一般公開されているすべてのオブジェクトがグローバル Cloud Storage ネットワークにキャッシュされるため、特別な構成は必要ありません。
  • 静的アセットの提供を Cloud Storage にオフロードすることで、アプリの負荷が軽減されます。静的アセットの数とアクセスの頻度によっては、アプリの実行コストを大幅に削減できる可能性があります。
  • コンテンツにアクセスするための帯域幅の料金は、多くの場合、Cloud Storage を利用すると安くなります。

アセットを Cloud Storage にアップロードするには、Cloud SDK または Cloud Storage API を使用できます。

Cloud Storage バケットから提供する例

この簡単な例では、Cloud Storage バケットを作成し、Cloud SDK を使用して静的アセットをアップロードします。

  1. バケットを作成します。プロジェクト ID に基づく名前をバケットに付けることが一般的ですが、必須ではありません。バケット名はグローバルに一意でなければなりません。

    gsutil mb gs://<your-bucket-name>
    
  2. バケット内のアイテムへの読み取りアクセス権を付与するよう ACL を設定します。

    gsutil defacl set public-read gs://<your-bucket-name>
    
  3. アイテムをバケットにアップロードします。通常は、rsync コマンドを使用すると、最も短時間で簡単にアセットをアップロードして更新できます。または cp を使用することもできます。

    gsutil -m rsync -r ./static gs://<your-bucket-name>/static
    

https://storage.googleapis.com/<your-bucket-name>/static/... を介して静的アセットにアクセスできます。

カスタム ドメイン名から提供する方法など、Cloud Storage を使用して静的アセットを提供する方法については、静的ウェブサイトをホストする方法をご覧ください。

Cloud Storage API を使用してアプリ内から動的にファイルをアップロード、ダウンロード、操作する方法について詳しくは、Cloud Storage の使用をご覧ください。

サードパーティのコンテンツ配信ネットワークから提供する

外部のサードパーティ CDN を使用して静的ファイルを提供し、動的リクエストをキャッシュに保存することはできますが、その場合、アプリのレイテンシとコストが増える可能性があります。

パフォーマンスを向上させるには、CDN Interconnect をサポートしているサードパーティ CDN を使用してください。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Java の App Engine フレキシブル環境に関するドキュメント