静的ファイルの提供

アプリケーションでは、動的リクエストを処理するほか、JavaScript、画像、CSS などの静的ファイルを提供する必要が生じることがよくあります。フレキシブル環境のアプリで静的ファイルを提供する方法として、Cloud Storage などの Google Cloud のサービスを使用する、アプリから直接提供する、サードパーティのコンテンツ配信ネットワーク(CDN)を使用するなどがあります。

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

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

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

アセットを Cloud Storage にアップロードするには、gsutil コマンドライン ツールまたは Cloud Storage API を使用します。

Google Cloud クライアント ライブラリでは、イディオマティックな .NET クライアントを Cloud Storage 向けに提供しており、このライブラリを利用して App Engine アプリのデータの格納や取得を Cloud Storage で行うことができます。

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

Cloud Storage バケットを作成し、Google Cloud CLI を使用して静的なアセットをアップロードする簡単な例を示します。

  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 を使用して静的アセットを提供する方法の詳細については、静的ウェブサイトのホスティングをご覧ください。

他の Google Cloud サービスからファイルを提供する

Cloud CDN または他の Google Cloud Storage サービスを使用することもできます。

アプリからファイルを直接提供する

通常、アプリからファイルを提供するのに複雑な設定は必要ありませんが、考慮すべき弱点がいくつかあります。

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

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

<html>
<head>
    <meta charset="utf-8" />
    <title>Hello Static World</title>
</head>
<body>
    <p>This is a static html document.</p>
    <p><img src="trees.jpg" /></p>
</body>
</html>

静的ファイルの提供を有効にするには、このコードを Startup.cs ファイルに追加します。

app.UseDefaultFiles();
app.UseStaticFiles();

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

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

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