S3で動作するようにCloudFrontを構成する

おそらく誰もがAmazonが提供する興味深いソリューションについて聞いたことがあるでしょう:Elastic Compute Cloud(EC2)、SimpleDB、Simple Storage Service(S3)、Simple Queue Service。

つい最近、 CloudFrontがリスト拡大しました。

CloudFrontはCDNまたはコンテンツ配信ネットワークです。 もちろん、これは新しいものではなく、多くの選択肢がありますが、このサービスは他のAmazonサービスを使用する人にとって特に有用で興味深いものになります。

データの一部をS3に保存し、ユーザーができるだけ早くコンテンツを受信できるようにすることに関心があるため、このソリューションは魅力的であるように思えました。

CloudFrontは4つのデータセンターを使用しています:アメリカ、ヨーロッパ、香港、日本。 これは、必要なファイルを含むリポジトリーについて知っているキャッシュです(サーバーまたはS3にすることができます)。

したがって、ユーザーがファイルを要求すると、最も近いデータセンターが決定され、必要なファイルが検索されます。 キャッシュでファイルが見つからない場合、リポジトリから要求されます。 キャッシュされた値「live」は永遠ではなく、デフォルトでは寿命は24時間であり、これは最小許容値です。 Cache-Control、Pragma、またはExpiresヘッダーを使用してこの値を上げることができます。

重要な点は、ファイルをバージョン管理する必要がある場合があることです。 そうしないと、リポジトリが変更されても、ユーザーは古いファイルを受け取ります。 私たちの場合、これは問題ではないはずです-リポジトリ内のファイルを変更しません。

開発者によると、CloudFrontでS3をセットアップするのは数分です。 やってみましょう。

したがって、S3バケットがあると仮定します。

主なタスクはDistributionを作成することです。快適に動作するのは個人的な名前付きキャッシュです。 その結果、特定のドメインが取得され、ファイルへのパスを構築するときに使用する必要があることを名前で理解しています。

最初に、配布を構成する構成ファイルを作成します。

<? xml version ="1.0" encoding ="UTF-8" ? >
< DistributionConfig xmlns ="http://cloudfront.amazonaws.com/doc/2008-06-30/" >
< Origin > mybucket.s3.amazonaws.com </ Origin >
< CallerReference > 20080930090000 </ CallerReference >
< Comment > Creating my first distribution </ Comment >
< Enabled > true </ Enabled >
</ DistributionConfig >


* This source code was highlighted with Source Code Highlighter .


Originは、<バケット名> .s3.amazonaws.comという形式のS3バケットを示します。 これは、s3.amazonaws.com / <バケット名>ではなく、S3の標準機能です。 このアプローチでは、バケツの名前に特定の制限が課せられていることに注意してください。

CallerReferenceは、ランダムな再試行を除外するために必要な一意の番号です。

次に、実行

./cfcurl.pl --keyname < friendly key name > -- -X POST -i -H "Content-Type:text/xml; charset=UTF-8" --upload-file create_request.xml cloudfront.amazonaws.com/2008-06-30/distribution

* This source code was highlighted with Source Code Highlighter .

cfcurl.plフレンドリキー名に気を取られないように、これについては後で説明します。

そして、このコンテンツについての答えを得る

201 Created
Location: cloudfront.amazonaws.com/2008-06-30/distribution/PDFDVBD632BHDS5

<? xml version ="1.0" encoding ="UTF-8" ? >
< Distribution xmlns ="http://cloudfront.amazonaws.com/doc/2008-06-30/" >
< Id > PDFDVBD632BHDS5 </ Id >
< Status > InProgress </ Status >
< LastModifiedTime > 2008-07-24T19:37:58Z </ LastModifiedTime >
< DomainName > e604721fxaaqy9.cloudfront.net </ DomainName >
< DistributionConfig >
< Origin > mybucket.s3.amazonaws.com </ Origin >
< CallerReference > 20080930090000 </ CallerReference >
< Comment > Creating my first distribution </ Comment >
< Enabled > true </ Enabled >
</ DistributionConfig >
</ Distribution >


* This source code was highlighted with Source Code Highlighter .


一意の配布番号。
ステータスは、InProgressとDeployedの2つの値を取ることができます。 InProgressは、配布がまだ作成されていないことを意味します。 作成を待つ必要がある(展開済み)

呼び出してステータスを確認できます

./cfcurl.pl --keyname < friendly key name >
-- cloudfront.amazonaws.com/2008-06-30/distribution < your distribution ' s ID > ;


* This source code was highlighted with Source Code Highlighter .

DomainName要素には、ファイルパスを構築するときに使用する必要があるドメイン名が含まれています。

以上です。 image.jpgへのリンクを作成するには、次のパスを使用する必要があります<domain name> /image.jpg

この例の<ドメイン名>はe604721fxaaqy9.cloudfront.netでした。

バケットの数を使用して、すべてのファイルを保存します。 1つの目標-並列読み込みを実現する。 ファイルは小さくなく、その数はまともです。 この手法の詳細については、 Webo.inなどをご覧ください。

したがって、異なるバケットに対して複数のディストリビューションを作成し、プロジェクトに変更を加える必要があります。

ご覧のとおり、実装は非常に簡単です。 次に、価格についてのより興味深い質問に移ります。

明らかに、キャッシュにより、S3のトラフィックはドロップし、GETリクエストの数も減少します。 割合を評価することは困難です。

CloudFront'aトラフィックは、これらすべてに追加されます。 その値はわかっていますが、量を計算するのは難しく、地域によって異なります(地域ごとのトラフィックの分布を知る必要があります)

この説明では、トラフィックの価格はS3の価格よりも低くなる可能性があると述べています。 これはそうですが、メリットは、アメリカとヨーロッパで10Tb以上、アジアで40Tb以上のトラフィックがある場合のみです。 私たちのプロジェクトはまだそのような数に達していないので、CloudFrontはもう少し費用がかかります。

cfcurl.plを使用する


Amazonからスクリプトをダウンロードできます

次に、ホームフォルダーに.aws-secretsファイルを作成する必要があります

%awsSecretAccessKeys = (
# primary account
primary = > {
id = > ' < Your primary AWS Access Key ID > ',
key = > ' < Your primary Secret Access Key > ',
},
);


* This source code was highlighted with Source Code Highlighter .

この構成では、 プライマリを<friedlyキー名>として指定する必要があります。

Source: https://habr.com/ru/post/J45081/


All Articles