Amazon CloudFront を使用します
このチュートリアルでは、Amazon CloudFront を使用して、コンテンツを配信する方法や、ウェブアプリケーションにおけるエンドユーザーのレイテンシーを短縮する方法について説明します。CloudFront は、エッジロケーションと呼ばれるデータセンターのグローバルネットワークを活用することによって、エンドユーザーに近いコンテンツをキャッシュして配信時間を減らし、コンテンツ配信速度をスピードアップします。 CloudFront は、Amazon S3 バケット、Amazon EC2 インスタンス、Amazon Elastic Load Balancing ロードバランサー、または独自のウェブサーバー (コンテンツがまだエッジロケーションにない場合) などのオリジンからコンテンツを取得します。CloudFront を使用することで、動的、静的、ストリーミング、インタラクティブのコンテンツを含め、ウェブサイトまたはアプリケーション全体を配信できます。
以下のステップでは、Amazon S3 バケットをオリジンとして設定し、ウェブブラウザを使用してディストリビューションをテストし、コンテンツが配信されていることを確認します。
このチュートリアルはすべて無料利用枠の範囲で実行できます。
高速のコンテンツ配信にはアカウントが必要です
コンソールにサインインするAWS 無料利用枠には、1 年間、1 か月あたり 50 GB のデータ転送 (アウト) と 2,000,000 件の HTTP または HTTPS リクエストが含まれます。
このステップでは、サンプルの静的コンテンツを Amazon S3 バケットにアップロードします。後続のステップで、このバケットを CloudFront オリジンとして使用します。Amazon S3 は、画像、動画、HTML ページ、.css ファイル、.js ファイルなどの静的コンテンツを含む Amazon CloudFront オリジンに適しています。
a.このチュートリアルで使用するサンプルイメージは、cloudfront-test-image.png と呼ばれる PNG イメージです。 右側のボタンをクリックしてサンプルイメージをダウンロードし、cloudfront-test-image.png として保存されていることを確認します。
b.ここをクリックすると、AWS マネジメントコンソールが新しいブラウザウィンドウで開きます。検索ボックスに S3 と入力し、ダブルクリックするとダッシュボードが表示されます。
c.S3 ダッシュボードが表示されたら、[Create Bucket (バケットの作成)] ボタンをクリックします。
- バケット名: バケットの名前を入力します - 一意の名前 (すべて小文字) を入力します。S3 バケット名のその他の制約については、「バケットの制約と制限」を参照してください。
- リージョン: レイテンシーの最適化、コストの最小化、規制要件への対応を行うために最寄りのリージョンを選択できます。
[Next] を選択します。
[Set properties (プロパティの設定)] パネルには、[Versioning (バージョニング)]、[Server Access Logging (サーバーアクセスロギング)]、[Tags (タグ)]、[Object-level Logging (オブジェクトレベルロギング)]、[Default Encryption (デフォルトの暗号化)] など、S3 バケットの役立つオプションが数多く用意されています。このチュートリアルでは、こうしたオプションを無効にしておきます。
[Next] を選択します。
[Set permissions (プロパティの設定)] パネルでバケットのアクセスコントロール権限を設定できます。このチュートリアルでは、こういったオプションを無効にしておきます。
[Next] を選択します。
[Review (確認)] パネルで [Create bucket (バケットの作成)] を選択します。
e.[Set permissions (アクセス許可の設定)] タブでイメージをパブリックに読み取れるようにする必要があります。 デフォルトでは、S3 オブジェクトはプライベートに設定されます。 [Manage public permissions (パブリックアクセス許可の管理)] を [Grant public access to objects(s) (オブジェクトへのパブリックアクセス許可)] に変更します。
[Next] を選択します。
[Set properties (権限の設定)] タブでは、[Storage class (ストレージクラス)]、[Encryption (暗号化)]、[Metadata (メタデータ)] を設定できます。このチュートリアルでは、こうしたオプションを無効にしておきます。
[Next] を選択します。
[Review (確認)] タブでファイルのアップロードを確認します。
[Upload (アップロード)] を選択します。
コンテンツが Amazon S3 にアップロードされたら、Amazon CloudFront コンソールを使用して、コンテンツを世界中のエンドユーザーに配信することができます。
a.ここをクリックすると、AWS マネジメントコンソールが新しいブラウザタブで開きます。 [Storage & Content Delivery (ストレージとコンテンツ配信)] の [CloudFront] をクリックして、Amazon CloudFront コンソールを開きます。
ユーザーがリクエストした際にコンテンツを取得するオリジンを CloudFront で把握できるように、ウェブディストリビューションで構成設定を指定します。Amazon S3 バケット (ストレージフォルダ) および HTTP サーバー (例: ウェブサーバー) をオリジンとして使用することができます。
b. 設定できました。
[Origin Domain Name (オリジンドメイン名)] で、cloudfront-test-image.png を保存した S3 バケットの名前を選択します。
このチュートリアルでは、残りの構成設定はデフォルト値のままにしておきます。 各構成設定の詳細については、以下のドロップダウンをクリックしてください。
デフォルトのキャッシュ動作の設定:
- 「キャッシュ動作の設定」を参照してください。
ディストリビューション設定:
- 価格クラス CloudFront には、世界中でサポートするエッジロケーションの数で決められている 3 つの価格クラスがあります。デフォルトでは、CloudFront は、すべてのエッジロケーションを使用して最適なパフォーマンスを保証しています。詳細については、「Amazon CloudFront 料金表」を参照してください。
- AWS WAF Web ACL: 指定した条件に基づき HTTP/HTTPS リクエストを許可またはブロックする場合は、このディストリビューションに関連付けられたウェブ ACL を選択します。詳細については、「AWS WAF 開発者ガイド」を参照してください。
- 代替ドメイン名: CloudFront では、ウェブディストリビューション (例: http://abcdefghi888.cloudfront.net/filename.jpg) を作成すると、自動的にドメインが割り当てられます。また、DNS クエリを CloudFront ディストリビューションにルーティングするように DNS 設定を更新して、オブジェクトの URL で独自ドメイン名を指定することもできます (例: http://yourDomain.com/filename.jpg)。このチュートリアルでは、このフィールドはブランクのままにします。
- SSL 証明書: CloudFront では、デフォルトの証明書を使用できます。または、独自 SSL 証明書を指定することもできます。
- デフォルトのルートオブジェクト: ユーザーがディストリビューションのルート URL のみをリクエストした場合に CloudFront がオリジンにリクエストするオブジェクトを指定する場所です。たとえば、ユーザーが http://www.example.com/ をリクエストした場合に、http://www.example.com/product-description.html が配信されるように指定することができます。デフォルトのルートオブジェクトを指定すると、ディストリビューションのコンテンツが公開されなくなります。
- ロギング: CludFront では、オブジェクトの各リクエストに関する情報をログ記録し、そのログファイルを Amazon S3 バケットに保存することができます。ログを有効化しても追加料金はかかりませんが、ファイルの保存とアクセスに対しては Amazon S3 料金が発生します。
- ログ用のバケット: アクセスログインの保存先に Amazon S3 バケットを指定した場合、CloudFront ではオブジェクトの各ユーザーリクエストに関する情報を記録し、指定した Amazon S3 バケットにそのファイルを保存します。ログ作成はいつでも有効または無効にできます。CloudFront アクセスログの詳細については、「アクセスログ」を参照してください。
- ログのプレフィックス: ロギングでオンを指定した場合は、CloudFront でこのディストリビューションのアクセスログのファイル名にプレフィックスとして使用する文字列を指定することができます。CloudFront アクセスログの詳細については、「アクセスログ」を参照してください。
- クッキーロギング: オブジェクトのオリジンとして Amazon S3 を使用している場合、Amazon S3 ではクッキーは処理されないため、ディストリビューションに Amazon EC2 またはその他のカスタムオリジンも含まれている場合を除き、クッキーロギングの値はオフを選択します。クッキーの詳細については、「クッキーに基づいてオブジェクトをキャッシュするように CloudFront を設定する」を参照してください。
- コメント: ディストリビューションと一緒に保存するコメントがある場合は入力します。
- ディストリビューションステータス: デフォルトでは Enabled (有効) です。つまり、コンテンツは、ディストリビューションが作成された時点で配信することができます。
ディストリビューションを設定すると、CloudFront でディストリビューションが作成され、使用できるように CloudFront ネットワーク全体に伝達されます。 [Create Distribution (ディストリビューションの作成)] を選択します。
このプロセスが完了すると、ディストリビューションのステータス列は [In Progress (進行中)] から [Deployed (デプロイ済み)] に変わります。
注意: このプロセスが完了するまでに数分かかることがあります。
CloudFront によってディストリビューションに割り当てられたドメイン名が、ディストリビューションのリストに表示されます。このドメイン名は次のステップで必要になるため、忘れないようにしてください。 ディストリビューション ID フィールドをクリックすると、ドメイン名の下に完全な CloudFront ドメインが表示されたページが表示されます。
ウェブディストリビューションを作成したら、CloudFront によってオリジンからオブジェクトを取得し、ウェブブラウザに返ることを確認してテストを行います。 このテストでは、ステップ 4 で書き留めた CloudFront ドメイン名と、ステップ 1 で S3 バケットにアップロードしたイメージ名が必要になります。
a.コンピュータでテキストエディタを開きます。次の HTML コードをコピーアンドペーストします。
<html>
<head>CloudFront テスト</head>
<body>
<p>テキストコンテンツをここに挿入します。</p>
<p><img src="http://domain name/object name" alt="my test image">
</body>
</html>
- ドメイン名を、CloudFront によってディストリビューションに割り当てられたドメイン名 (例: d111111abcdef8.cloudfront.net) に置き換えます。
- オブジェクト名を、Amazon S3 バケットのイメージファイルの名前 (この場合は cloudfront-test-image.png) に置き換えます。
- このテキストをファイル (mycloudfronttest.html) に保存します。
ディストリビューションは、CloudFront コンソールから簡単に無効にすることができます。 課金されないように、不要になったディストリビューションは無効にすることをお勧めします。ただし、ディストリビューションが無効になると、そのディストリビューションでサポートされているウェブサイトはダウンし、エンドユーザーはそのコンテンツにアクセスできなくなることに注意してください。
最初の Amazon CloudFront ウェブディストリビューションが作成され、Amazon S3 を使用してクラウド上にホストされている静的コンテンツが配信されました。設定をいくつか変更することで、CloudFront を使用して、ミーティング、カンファレンス、コンサートなどのライブイベントの動的コンテンツを HTTP または HTTPS でリアルタイムで配信できます。Amazon Cloudfront を使用すれば、動的、静的、ストリーミング、インタラクティブのコンテンツを含め、ウェブサイトまたはアプリケーション全体の配信を高速化できます。
Amazon CloudFront でウェブディストリビューションをセットアップし、静的コンテンツを配信する方法を学習しました。ご不明な点がございましたら、営業時間内または次回の AWS Tech Talks で CloudFront の担当エキスパートにお問い合わせください。