コンテンツ配信ネットワーク (CDN) を使用するためのベスト プラクティスBest practices for using content delivery networks (CDNs)

コンテンツ配信ネットワーク (CDN) は、ユーザーに Web コンテンツを効率的に配信できるサーバーの分散ネットワークです。A content delivery network (CDN) is a distributed network of servers that can efficiently deliver web content to users. CDN では、待機時間を最小限に抑えるために、エンドユーザーに近いエッジ サーバー上に、キャッシュされたコンテンツを格納します。CDNs store cached content on edge servers that are close to end users to minimize latency.

CDN は通常、イメージ、スタイル シート、ドキュメント、クライアント側スクリプト、HTML ページなどの静的コンテンツの配信に使用されます。CDNs are typically used to deliver static content such as images, style sheets, documents, client-side scripts, and HTML pages. CDN を使用する主な利点は、アプリケーションがホストされているデータセンターに対してユーザーの位置する地理的な場所に関係なく、短い待ち時間でコンテンツをユーザーに高速配信できることです。The major advantages of using a CDN are lower latency and faster delivery of content to users, regardless of their geographical location in relation to the datacenter where the application is hosted. また、アプリケーションが CDN でホストされているコンテンツに対してサービス要求を行う必要はないため、CDN は Web アプリケーションの負荷の軽減にも役立ちます。CDNs can also help to reduce load on a web application, because the application does not have to service requests for the content that is hosted in the CDN.

CDN の図

Azure の Azure Content Delivery Network は、Azure または他の任意の場所でホストされている高帯域幅コンテンツを配信するためのグローバル CDN ソリューションです。In Azure, the Azure Content Delivery Network is a global CDN solution for delivering high-bandwidth content that is hosted in Azure or any other location. Azure CDN を使用すると、Azure Blob Storage、Web アプリケーション、仮想マシン、またはパブリック アクセス可能な Web サーバーから読み込んだ一般公開されているオブジェクトをキャッシュすることができます。Using Azure CDN, you can cache publicly available objects loaded from Azure blob storage, a web application, virtual machine, any publicly accessible web server.

このトピックでは、CDN を使用する場合の、いくつかの一般的なベスト プラクティスおよび考慮事項について説明します。This topic describes some general best practices and considerations when using a CDN. 詳細については、Azure CDN に関するページを参照してください。For more information, see Azure CDN.

CDN の使用方法と使用する理由How and why a CDN is used

CDN の一般的な用途は次のとおりです。Typical uses for a CDN include:

  • クライアント アプリケーション用の静的リソースの配信 (多くの場合、Web サイトから)。Delivering static resources for client applications, often from a website. 静的リソースとは、たとえば、イメージ、スタイル シート、ドキュメント、ファイル、クライアント側スクリプト、HTML ページ、HTML フラグメントなど、個々の要求に応じてサーバー側が変更する必要がないコンテンツです。These resources can be images, style sheets, documents, files, client-side scripts, HTML pages, HTML fragments, or any other content that the server does not need to modify for each request. アプリケーションでは、実行時にアイテムを作成し、CDN から使用できるようにすることもできますが (たとえば、最新ニュースの見出し一覧を作成するなど)、個々の要求に応じて実行することはありません。The application can create items at runtime and make them available to the CDN (for example, by creating a list of current news headlines), but it does not do so for each request.

  • 静的な共有パブリック コンテンツを携帯電話やタブレット コンピューターなどのデバイスに配信する。Delivering public static and shared content to devices such as mobile phones and tablet computers. アプリケーション自体は、さまざまなデバイス上で実行されているクライアントに API を提供する Web サービスです。The application itself is a web service that offers an API to clients running on the various devices. CDN は、クライアント UI の生成などの目的で、クライアントが使用する静的データセットを配信することもできます (Web サービスを介して)。The CDN can also deliver static datasets (via the web service) for the clients to use, perhaps to generate the client UI. たとえば、JSON または XML ドキュメントの配信に CDN を使用することができます。For example, the CDN could be used to distribute JSON or XML documents.

  • 専用のコンピューティング リソースを使用することなく、静的パブリック コンテンツのみで構成されている Web サイト全体をクライアントに提供。Serving entire websites that consist of only public static content to clients, without requiring any dedicated compute resources.

  • オンデマンドでビデオ ファイルをクライアントにストリーミング。Streaming video files to the client on demand. ビデオの場合、CDN 接続を提供するデータセンターは世界各国にあるため、短い待機時間、信頼性の高い接続という利点があります。Video benefits from the low latency and reliable connectivity available from the globally located datacenters that offer CDN connections. Microsoft Azure Media Services (AMS) は、CDN に直接コンテンツを配信し、そこからさらに配信するために Azure CDN と統合されています。Microsoft Azure Media Services (AMS) integrates with Azure CDN to deliver content directly to the CDN for further distribution. 詳しくは、「ストリーミング エンドポイントの概要」をご覧ください。For more information, see Streaming endpoints overview.

  • ユーザーのエクスペリエンスを全般的に改善 (特に、アプリケーションをホストしているデータセンターから離れた場所で利用しているユーザー)。Generally improving the experience for users, especially those located far from the datacenter hosting the application. そのようなユーザーの場合、他の方法では、待機時間が長くなる場合があります。These users might otherwise suffer higher latency. 多くの場合、Web アプリケーションに含まれる全コンテンツのうち、大部分は静的です。CDN を使用することで、パフォーマンスと全体的なユーザー エクスペリエンスを維持でき、また、アプリケーションを複数のデータセンターにデプロイする必要がなくなります。A large proportion of the total size of the content in a web application is often static, and using the CDN can help to maintain performance and overall user experience while eliminating the requirement to deploy the application to multiple datacenters. Azure CDN ノードの場所の一覧については、「Azure CDN の POP の場所」をご覧ください。For a list of Azure CDN node locations, see Azure CDN POP Locations.

  • IoT (モノのインターネット) のソリューションをサポートする。Supporting IoT (Internet of Things) solutions. IoT ソリューションに関連する膨大な数のデバイスおよびアプライアンスでは、各デバイスに直接ファームウェアの更新を配布する必要がある場合、アプリケーションがすぐに過負荷になるおそれがあります。The huge numbers of devices and appliances involved in an IoT solution could easily overwhelm an application if it had to distribute firmware updates directly to each device.

  • アプリケーションを拡張することなく、ピーク時や需要の急騰に対処し、結果としての運用コストの増加を防ぎます。Coping with peaks and surges in demand without requiring the application to scale, avoiding the consequent increase in running costs. たとえば、特定モデルのルーターなどのハードウェア デバイス、またはスマート TV などのコンシューマー デバイスを対象にした、オペレーティング システムの更新プログラムがリリースされた場合、短期間で数百万単位のユーザーやデバイスがダウンロードするので、需要が大きく跳ね上がります。For example, when an update to an operating system is released for a hardware device such as a specific model of router, or for a consumer device such as a smart TV, there will be a huge peak in demand as it is downloaded by millions of users and devices over a short period.

課題Challenges

CDN の使用を計画する際には、いくつかの課題を考慮する必要があります。There are several challenges to take into account when planning to use a CDN.

  • デプロイ」を参照してください。Deployment. CDN のコンテンツ取得元を決定する必要があります。また、複数のストレージ システムにあるコンテンツをデプロイする必要があるかどうかを決定する必要があります。Decide the origin from which the CDN fetches the content, and whether you need to deploy the content in more than one storage system. 静的コンテンツとリソースをデプロイするプロセスを考慮してください。Take into account the process for deploying static content and resources. たとえば、Azure BLOB ストレージにコンテンツを読み込むために個別の手順の実装が必要になる場合があります。For example, you may need to implement a separate step to load content into Azure blob storage.

  • バージョン管理とキャッシュ制御Versioning and cache-control. 静的コンテンツを更新する方法と、新しいバージョンをデプロイする方法を検討する必要があります。Consider how you will update static content and deploy new versions. CDN によるキャッシュと有効期限 (TTL) の実行方法を理解してください。Understand how the CDN performs caching and time-to-live (TTL). Azure CDN のキャッシュのしくみに関するページをご覧ください。For Azure CDN, see How caching works.

  • テストTesting. アプリケーションをローカル環境やステージング環境で開発し、テストしている場合、CDN の設定をローカルでテストすることは困難になる可能性があります。It can be difficult to perform local testing of your CDN settings when developing and testing an application locally or in a staging environment.

  • 検索エンジンの最適化 (SEO)Search engine optimization (SEO). CDN を使用する場合、イメージやドキュメントなどのコンテンツは異なるドメインから提供されます。Content such as images and documents are served from a different domain when you use the CDN. このことは、このコンテンツの SEO に影響を及ぼします。This can have an effect on SEO for this content.

  • コンテンツのセキュリティContent security. すべての CDN が、コンテンツに対して任意の形式のアクセス コントロールを提供しているわけではありません。Not all CDNs offer any form of access control for the content. Azure CDN などの一部の CDN サービスは、トークン ベースの認証をサポートして CDN コンテンツを保護しています。Some CDN services, including Azure CDN, support token-based authentication to protect CDN content. 詳細については、「トークン認証による Azure Content Delivery Network 資産の保護」をご覧ください。For more information, see Securing Azure Content Delivery Network assets with token authentication.

  • クライアントのセキュリティClient security. クライアントは、CDN 上のリソースへのアクセスを許可していない環境から接続している可能性があります。Clients might connect from an environment that does not allow access to resources on the CDN. たとえば、既知のリソースにのみアクセスが制限されているセキュリティに制約のある環境や、ページの提供元以外から配信されたリソースを読み込まない環境などです。This could be a security-constrained environment that limits access to only a set of known sources, or one that prevents loading of resources from anything other than the page origin. このような場合に対処するには、フォールバックの実装が必要です。A fallback implementation is required to handle these cases.

  • 回復力Resilience. CDN は、アプリケーションの単一障害点になる可能性があります。The CDN is a potential single point of failure for an application.

CDN が適していないシナリオを次に示します。Scenarios where a CDN may be less useful include:

  • コンテンツの有効期間中に、コンテンツのヒット率が低く、ほとんどアクセスされない場合 (その有効期限設定で決定)。If the content has a low hit rate, it might be accessed only few times while it is valid (determined by its time-to-live setting).

  • データが非公開の場合。たとえば、大規模な企業やサプライ チェーンのエコシステムなどです。If the data is private, such as for large enterprises or supply chain ecosystems.

一般的なガイドラインと推奨される方法General guidelines and good practices

CDN の使用は、アプリケーションの負荷を最小限に抑え、可用性とパフォーマンスを最大限にするために有効な方法です。Using a CDN is a good way to minimize the load on your application, and maximize availability and performance. アプリケーションで使用する適切なコンテンツとリソースのすべてに対して、この手法の採用を検討する必要があります。Consider adopting this strategy for all of the appropriate content and resources your application uses. CDN の使用戦略を立てるときは、次のセクションに示す項目を考慮してください。Consider the points in the following sections when designing your strategy to use a CDN.

デプロイDeployment

アプリケーション デプロイメント パッケージまたはプロセスに静的コンテンツを含めない場合は、必要に応じて、アプリケーションとは別に静的コンテンツをプロビジョニングおよびデプロイします。Static content may need to be provisioned and deployed independently from the application if you do not include it in the application deployment package or process. アプリケーション コンポーネントと静的リソース コンテンツの両方を管理するために使用するバージョン管理アプローチに対して、どのような影響があるかを考慮してください。Consider how this will affect the versioning approach you use to manage both the application components and the static resource content.

バンドルと縮小の技術を使用して、クライアントの読み込み時間を短縮することを検討してください。Consider using bundling and minification techniques to reduce load times for clients. バンドルでは、複数のファイルを単一のファイルに連結します。Bundling combines multiple files into a single file. 縮小では、機能を変更することなく、スクリプトおよび CSS ファイルから不要な文字を削除します。Minification removes unnecessary characters from scripts and CSS files without altering functionality.

コンテンツを追加の場所にデプロイする必要がある場合、デプロイメント プロセスの手順が増えます。If you need to deploy the content to an additional location, this will be an extra step in the deployment process. アプリケーションが、定期的に、またはイベントに応じて CDN のコンテンツを更新すると、更新されたコンテンツを CDN のエンドポイントだけでなく追加の場所にも保存する必要があります。If the application updates the content for the CDN, perhaps at regular intervals or in response to an event, it must store the updated content in any additional locations as well as the endpoint for the CDN.

静的コンテンツが CDN から提供されることを期待している場合、ローカル開発およびテストを処理する方法を検討してください。Consider how you will handle local development and testing when some static content is expected to be served from a CDN. たとえば、コンテンツをビルド スクリプトの一部として CDN に事前デプロイすることが可能です。For example, you could predeploy the content to the CDN as part of your build script. また、コンパイル ディレクティブまたはフラグを使用して、アプリケーションがリソースを読み込む方法を制御します。Alternatively, use compile directives or flags to control how the application loads the resources. たとえば、デバッグ モードでは、アプリケーションがローカル フォルダーから静的リソースを読み込むことが可能です。For example, in debug mode, the application could load static resources from a local folder. リリース モードでは、アプリケーションは CDN を使用します。In release mode, the application would use the CDN.

gzip (GNU zip) などのファイル圧縮のオプションを検討してください。Consider the options for file compression, such as gzip (GNU zip). 圧縮は、Web アプリケーション ホスティングによって元のサーバーで実行するか、または CDN によってエッジ サーバー上で直接実行できます。Compression may be performed on the origin server by the web application hosting or directly on the edge servers by the CDN. 詳細については、「Azure CDN でのファイル圧縮によるパフォーマンスの向上」をご覧ください。For more information, see Improve performance by compressing files in Azure CDN.

ルーティングとバージョン管理Routing and versioning

さまざまな時点でそれぞれ異なる CDN インスタンスを使用することが必要な場合があります。You may need to use different CDN instances at various times. たとえば、アプリケーションの新しいバージョンをデプロイする場合は、新しい CDN を使用し、前の CDN は以前のバージョンのために保持することができます (以前の形式でコンテンツを保持)。For example, when you deploy a new version of the application you may want to use a new CDN and retain the old CDN (holding content in an older format) for previous versions. コンテンツ配信元として Azure BLOB ストレージを使用している場合は、別のストレージ アカウントまたは別のコンテナーを作成し、CDN エンドポイントでその場所を指定します。If you use Azure blob storage as the content origin, you can create a separate storage account or a separate container and point the CDN endpoint to it.

Azure BLOB ストレージからコンテンツを取得するときに、クエリ文字列はリソース名 (BLOB 名) の一部になるので、CDN 上のリソースに対するリンクで、クエリ文字列を使用してアプリケーションの別バージョンを指定しないでください。Do not use the query string to denote different versions of the application in links to resources on the CDN because, when retrieving content from Azure blob storage, the query string is part of the resource name (the blob name). この方法はまた、クライアントでリソースをキャッシュする方法に影響する可能性があります。This approach can also affect how the client caches resources.

以前のリソースが CDN にキャッシュされている場合、アプリケーションの更新時に新しいバージョンの静的コンテンツをデプロイすることが困難になる可能性があります。Deploying new versions of static content when you update an application can be a challenge if the previous resources are cached on the CDN. 詳細については、キャッシュ制御のセクションをご覧ください。For more information, see the section on cache control, below.

国/地域によって CDN コンテンツへのアクセスを制限することを検討してください。Consider restricting the CDN content access by country/region. Azure CDN を使用すると、発信元の国または地域に基づいて要求をフィルター処理し、配信するコンテンツを制限できます。Azure CDN allows you to filter requests based on the country or region of origin and restrict the content delivered. 詳細については、国/地域によるコンテンツへのアクセスの制限に関する記事をご覧ください。For more information, see Restrict access to your content by country/region.

キャッシュ制御Cache control

システム内でのキャッシュの管理方法について検討します。Consider how to manage caching within the system. たとえば、Azure CDN では、グローバル キャッシュ規則を設定してから、特定の元のエンドポイントに対するカスタム キャッシュを設定できます。For example, in Azure CDN, you can set global caching rules, and then set custom caching for particular origin endpoints. また、配信元でキャッシュ ディレクティブ ヘッダーを送信することによって CDN でのキャッシュの実行方法を制御できます。You can also control how caching is performed in a CDN by sending cache-directive headers at the origin.

詳細については、「キャッシュのしくみ」をご覧ください。For more information, see How caching works.

オブジェクトを CDN で使用できないようにするには、配信元からオブジェクトを削除するか、または、CDN エンドポイントを削除します。BLOB ストレージの場合は、コンテナーまたは BLOB を非公開にします。To prevent objects from being available on the CDN, you can delete them from the origin, remove or delete the CDN endpoint, or in the case of blob storage, make the container or blob private. ただし、有効期限が切れるまで、項目は CDN から削除されません。However, items are not removed from the CDN until the time-to-live expires. 手動で CDN エンドポイントを消去することもできます。You can also manually purge a CDN endpoint.

SecuritySecurity

CDN は、CDN から提供された証明書を使用して HTTPS (SSL) 上でコンテンツを配信できますが、HTTP 上で配信することもできます。The CDN can deliver content over HTTPS (SSL), by using the certificate provided by the CDN, as well as over standard HTTP. コンテンツが混合している事に関するブラウザーからの警告を避けるには、HTTPS を使用して、HTTPS 経由で読み込まれたページに表示されている静的コンテンツを要求する必要があります。To avoid browser warnings about mixed content, you might need to use HTTPS to request static content that is displayed in pages loaded through HTTPS.

CDN を使用してフロント ファイルなどの静的アセットを配信する場合は、 XMLHttpRequest 呼び出しを使用して異なるドメインからこれらのリソースを要求すると、同じ配信元ポリシーの問題が起こる場合があります。If you deliver static assets such as font files by using the CDN, you might encounter same-origin policy issues if you use an XMLHttpRequest call to request these resources from a different domain. 多くの Web ブラウザーは、適切な応答ヘッダーを設定するように Web サーバーが構成されていない場合、クロス オリジン リソース共有 (CORS) を回避します。Many web browsers prevent cross-origin resource sharing (CORS) unless the web server is configured to set the appropriate response headers. 次のいずれかの方法を使用して、CORS をサポートする CDN を構成できます。You can configure the CDN to support CORS by using one of the following methods:

CDN フォールバックCDN fallback

CDN のエラーや一時的な使用不能状態に対するアプリケーションの対応方法を考慮する必要があります。Consider how your application will cope with a failure or temporary unavailability of the CDN. クライアント アプリケーションは、前回の要求中に (クライアントの) ローカルにキャッシュされたリソースのコピーを使用できる場合があります。CDN を使用できない場合は、エラーを検出すると、そこで配信元 (リソースが保存されているアプリケーション フォルダーまたは Azure BLOB コンテナー) にリソースを要求するコードを含めることもできます。Client applications may be able to use copies of the resources that were cached locally (on the client) during previous requests, or you can include code that detects failure and instead requests resources from the origin (the application folder or Azure blob container that holds the resources) if the CDN is unavailable.