Amazon CloudFront でコンテンツ配信してみた

記事タイトルとURLをコピーする

こんにちは!
新卒1年目、クラウドインテグレーション(CI)部5課でOJT中の加藤ゆです。

今回、社内勉強会にてコンテンツを迅速に配信する方法のチュートリアルをやってみました!

きっかけ

AWS認定資格SAAの勉強時に、「CloudFront のDistributionを作成する」という文言を多々見受けました。

よくみるのに、Distributionの説明文を読んでもよく分からない…。
分からないのに、すごい頻度で見かける!!

という事で!

目的

  • 意味が分からなかったCloudFrontの仕組みを攻略する

  • しくじりポイントを課の皆さんに共有

以上を目的にハンズオン勉強会をやってみました!

CloudFront とは

  • CDN(Contents Delivery Network)のサービス
  • キャッシュサーバーが、オリジンサーバーの代理でウェブコンテンツを配信
  • このキャッシュサーバーが世界中に配置されているため、負荷分散・配信の高速化が出来る

  • Distributionで定義されたオリジンからコンテンツを取り込み、提供するサービス

  • S3,ELB,EC2の静的ホスティング、オンプレのサーバをオリジンとして利用可能

やること

  1. 静的コンテンツをS3にアップロード
  2. CloudFrontの設定
  3. リンクをテストする

イメージはこんな感じです。 f:id:swx-yuki-kato:20210204001715p:plain

静的コンテンツをS3にアップロード

マネジメントコンソールから、S3バケットの作成とオブジェクトにファイルのアップロードを行います。

バケット名 : 一意の名前に設定
リージョン : アジアパシフィック (東京) ap-northeast-1

上記以外の設定はデフォルトのまま、「Create bucket (バケットの作成)」を選択

作成したバケットから、「Upload (アップロード)」ー「Add Files (ファイルの追加)」の順に選択。

f:id:swx-yuki-kato:20210203232041p:plainf:id:swx-yuki-kato:20210203232121p:plain コンピュータから、静的コンテンツを選択し、アップロードします。

今回は、チュートリアルよりcloudfront-test-image.png と呼ばれる PNG イメージを使用しました。

※ ここでアクセス権限 に注意!!

今回はPublicにS3に保存した静的コンテンツを読み取れるようにしたいので、「追加のアップロードオプション」ー「アクセスコントロールリスト (ACL)」より、全員 (パブリックアクセス)に対するオブジェクトの読み取り許可を付与する必要があります。(セキュリティ的には宜しくないです)
S3 を パブリック公開しなくてもアクセス可能な設定(こっちの方がオススメ)があるそうなので、そちらは今後やってみようと思います。 f:id:swx-yuki-kato:20210203233646p:plain

上記以外の設定はデフォルトのまま「アップロード」 をクリック。
「アップロードに成功しました」と出てきました。

CloudFrontの設定

次に、CloudFrontのマネジメントコンソールを開きます。

CloudFrontのコンソールって全部英語なんですね。うげ。
コレを全力で駆使しました。便利な世界です。

「Create Distribution」よりDistributionの作成をします。

そもそも、Distributionってなんだ?というと、
ユーザからのリクエストを受け取った際に、どのオリジンにコンテンツを取得するのか等、以下の構成設定を指定するものです。

  • オリジン設定
  • デフォルトのキャッシュ動作設定
  • 通信の設定

今回は、「オリジンをこのS3にするよ!」という設定のみ行います。

 [Get Started (開始方法)] を選択

f:id:swx-yuki-kato:20210203234908p:plain

一番上の「Origin Domain Name」をクリックし、先ほど作成したS3バケットを選択します。その他の設定はデフォルトのまま、「Create Distribution」を選択。
Distributionのstatusが「In Progress」から「Deployed」となれば、プロセスが完了し、CloudFrontのネットワーク全体へ伝達されます。
f:id:swx-yuki-kato:20210204000606p:plain

リンクをテスト

CloudFrontによって、オリジンからオブジェクトが取得され、手元のブラウザで見れるか確認をしてみましょう!

http://domain name/object name

【domain name】:Distribution作成時に割り当てられたドメイン名
【object name】: S3バケットにアップロードしたファイルName
上記内容をURLに代入し、ブラウザで開いてみましょう。

f:id:swx-yuki-kato:20210204001049p:plain

できたーー!!

最後に

作ったものは消しましょう~お金がかかります!

  • Distributionは無効(Disable)に!(Deleteしてしまって良いと思います)
  • S3バケットは削除!

Distributionは無効にしておけば、エンドユーザーはそのコンテンツにアクセスできなくなるので、エッジロケーションからのオブジェクト供給に対する課金と、オリジンへのデータ送信に対する課金は発生しません。

しくじりポイント

S3のアクセス権限

これCloudFrontとは関係ない部分ですが、「※ ここでアクセス権限 に注意!!」と書いた、S3バケット・オブジェクトのアクセス権限をミスりまくりました。今回のチュートリアルでは、結構重要な設定だったのに「追加のアップロードオプション」で選択しないと、普通にスルーしてしまうという罠…。

加えて、S3のブロックパブリックアクセスの設定も、いじり倒してようやく出来たので、S3のバケットを公開するのであれば、この2項目を確認すべきだと思います。

Distribution

私が一番敬遠していたのが、このDistribution設定です。今まで、Distributionって何を設定するのか理解していませんでした!項目多くて、見るの嫌になっちゃって…。そのため、「CloudFront のDistributionを作成する」といわれても、それ作って何が出来るのかが分かっていなかったんです。 f:id:swx-yuki-kato:20210204004053p:plain ※書いてあるのは設定の一部です

今回、Distributionの設定はほぼ触らなかったのですが、全項目の設定内容の確認をしたので一部ではありますが何を設定するものなのか理解出来たと思います。
ちょっと仲良くなれた気分です。よかったー!

感想

人生初、コンソール画面を見せながら説明をしました!人に説明出来るところまでが重要だよ、とよく言われますが、これ本当に大事ですね。何となく~の理解では絶対に教えられないので、すごく頭を使いました。

AWS触るのめちゃめちゃ楽しいです。

参考資料

コンテンツを迅速に配信する方法 – アマゾン ウェブ サービス (AWS)

ディストリビューションの概要 - Amazon CloudFront

キャッシュキーの管理 - Amazon CloudFront

圧縮ファイルの供給 - Amazon CloudFront

ACL バケットのアクセス許可を設定する方法 - Amazon Simple Storage Service

加藤 由有希 エンジニアブログの記事一覧はコチラ

エンタープライズクラウド部 所属

2020年4月に新卒入社