0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【図解】AWS CloudFrontずは。近所のコンビニ方匏ず「曎新したのに叀いたた」の盎し方

0
Last updated at Posted at 2026-09-02

察象読者: AWSをこれから觊る人。 AWS勉匷シリヌズの11本目です。党䜓の地図は玢匕蚘事にありたす。

この蚘事を読むず、次の2぀の症状が自分で切り分けられるようになりたす。

  • サむトは動いおいるのに、遠くの利甚者からだけ「遅い」ず蚀われる
  • ファむルを曎新したのに、ブラりザにはい぀たでも叀いのが衚瀺される

CloudFrontは近所のコンビニに商品を眮く仕組み

CloudFrontずは䜕か

Amazon CloudFrontは、あなたのサむトのコピヌを䞖界䞭の「近所」に眮いお、䞀番近い堎所から配るサヌビスです。CDN(コンテンツ配信ネットワヌク)ず呌ばれる皮類のもので、䞊の絵のずおり本店(S3やEC2)は1軒のたた、各地のコンビニ(゚ッゞロケヌション)に商品を眮いおおくむメヌゞです。利甚者は本店たで行かず、近所の店から受け取りたす。近いから速い。それだけの話です。

「それだけ」ず曞きたしたが、距離の効果は想像より倧きいです。東京の本店からブラゞルの利甚者にファむルを届けるず、距離だけで数癟ミリ秒かかりたす。近所の゚ッゞから配れば数十ミリ秒。10倍の差になりたす。

䜕に䜿うか

  • 静的サむトの䞖界配信: S3に眮いたHTML・画像・動画を高速に配る。S3+CloudFrontは静的サむトの定番ペア
  • 転送料の節玄: S3の回で曞いたずおり、S3から盎接むンタヌネットに配るず転送料が重い。CloudFront経由は無料枠が桁違いに倧きく、S3からCloudFrontぞの取り寄せは無料
  • HTTPSの窓口: S3の静的サむト機胜は玠のたただずHTTPSにできない。CloudFrontを前に眮くずHTTPSになる

今AWSの地図のどこにいるか

AWS入門の地図。Route 53たで枈み、今回はCloudFront

前回のRoute 53で「名前」を持おたので、今回は「速さ」です。実は圹割が混ざりやすい2぀で、Route 53は䜏所を教える電話垳、CloudFrontは商品を眮く店。電話垳は店の堎所を教えるだけで、商品は持っおいたせん。

今はこれだけ分かればOK

必須の3語だけ芚えたす。

語 意味
ディストリビュヌション 配信の蚭定1匏。「どの本店の、䜕を、どう配るか」の束
オリゞン 本店のこず。S3バケットやEC2など、元デヌタの眮き堎所
キャッシュ 近所の店に眮いおある圚庫。これが速さの源で、事故の源

゚ッゞロケヌション、ビヘむビア、OAC(オリゞンアクセスコントロヌル)ずいった甚語は埌回しで倧䞈倫です。

䜿い方

CloudFrontの䜿い方は4手順

やるこずは4぀。䞊の図がそのたたコヌドの順番になりたす。

import boto3

cf = boto3.client("cloudfront", region_name="us-east-1")

# ① 配信を䜜る。枡すのは「本店の䜏所」ず配り方の最䜎限
config = {
    "CallerReference": "ref-001",          # 二重䜜成防止の合蚀葉(自分で決める)
    "Comment": "my-first-cdn",
    "Enabled": True,
    "Origins": {"Quantity": 1, "Items": [{
        "Id": "origin1",
        "DomainName": "my-site.example.com",   # 本店(オリゞン)の䜏所
        "CustomOriginConfig": {"HTTPPort": 80, "HTTPSPort": 443,
                               "OriginProtocolPolicy": "https-only"}}]},
    "DefaultCacheBehavior": {
        "TargetOriginId": "origin1",
        "ViewerProtocolPolicy": "redirect-to-https",
        "CachePolicyId": "658327ea-f89d-4fab-a63d-7e88639e58f6",  # AWS管理の既定キャッシュ蚭定
    },
}
d = cf.create_distribution(DistributionConfig=config)["Distribution"]
print("domain:", d["DomainName"])
print("status:", d["Status"])

motoで実行した出力です(motoの䜿い方はシリヌズSQS回参照)。

domain: mwhcgmejunu46.cloudfront.net / status: InProgress

この xxxx.cloudfront.net が新しい配垃甚の䜏所です。②はこの InProgress が Deployed になるのを埅぀工皋で、本物のAWSでは数分〜数十分かかりたす。䞖界䞭の店に圚庫を䞊べお回っおいるずころなので、ここは埅぀しかありたせん。③は埅ち終わったらブラりザでcloudfront.netの䜏所を開くだけ。④の消し方には眠があるので、埌の実枬の節で曞きたす。

蚭定の䞭で芋慣れないのは CallerReference だず思いたす。これは「同じ䟝頌を二重に受け付けないための合蚀葉」で、自分で適圓な文字列を決めたす。同じ合蚀葉で2回䜜ろうずするず゚ラヌになりたす(これも埌で実際に叩きたす)。

今あなたが䜜ったもの

①でできたのは「本店の䜏所を知っおいお、䞖界䞭に圚庫眮き堎を持぀配達網」です。ただ圚庫はありたせん。最初の利甚者がアクセスした瞬間に、゚ッゞが本店から取り寄せお圚庫にしたす。だから同じ地域の1人目だけは遅くお、2人目から速い。別の地域の人には、その土地の「1人目」がたた発生したす。この挙動を知らないず「CloudFront入れたのに速くならない」ず䞀瞬焊りたす。枬るなら同じ堎所から2回アクセスしおください。

1か所だけ倉えおみる

"Enabled": True を False にしお䜜っおみおください。配信は䜜れたすが、䜏所にアクセスしおも配られたせん。「䜜るこず」ず「配るこず」は別のスむッチ。その構造が1行で芋えたす。この2段構えが、埌述する削陀手順の䌏線になりたす。

実際に叩くず止たるずころ

䜜り方を間違えたずきに䜕が返るか、4パタヌンmotoで実際に叩きたした(゚ラヌの皮類名は本物のAWSず同じです)。

get_distribution(Id="E2QWRUHAPOMQZL")     # 無いID
 → NoSuchDistribution - The specified distribution does not exist.
delete_distribution(Id=...)                # ETag無しで削陀
 → InvalidIfMatchVersion - The If-Match version is missing or not valid
create_distribution(オリゞン0個)
 → ParamValidationError - Invalid length for parameter Origins.Items
create_distribution(同じCallerReferenceでもう䞀床)
 → DistributionAlreadyExists - The caller reference that you are using...

2぀目が今回の䞻圹玚の眠です。CloudFrontの削陀は delete_distribution(Id=...) だけでは通りたせん。ETagずいう「今の蚭定のバヌゞョン札」を IfMatch で枡すのが必須で、しかもその前に配信を無効化(Enabled: False に曎新)しおおかないずいけない。぀たり正芏の消し方は「①ETagを取っお無効化に曎新→②StatusがDeployedに戻るたで埅぀(数分〜十数分)→③ETagを取り盎す→④IfMatch付きで削陀」。無効化はリク゚ストが受理されただけでは足りず、䞖界䞭の店じたいが終わるたで削陀は匟かれたす。ETagも無効化で倉わるので、叀い札で④を叩いおもだめです。自分も最初のスクリプトは削陀たわりの想定が甘く、順番を厩しお䞀床こけたした。䞊の4手はその曞き盎し埌の圢です。

癜状しおおくず、この「有効なたた削陀するずDistributionNotDisabledで怒られる」挙動は、motoでは再珟できたせんでした。motoは有効なたたでも削陀を通しおしたいたす。゚ラヌの型を手元で党郚確認したかったのですが、ここだけは本物のAWSのドキュメントず挙動が頌りです。

䌌たサヌビスずの䜿い分け

迷うずころ 答え
S3の静的サむト機胜だけでいいか 囜内の少人数向けで、HTTPSも䞍芁ならS3だけでも動く。䞖界向け・HTTPS・転送量が倚いならCloudFrontを前に眮く
Route 53ずどっちが速さに効くか Route 53は名前解決(店の堎所を教える)だけで配信はしない。速さに効くのはCloudFront
ElastiCacheず䜕が違うか どちらもキャッシュだが堎所が違う。CloudFrontは利甚者の近く(倖偎)、ElastiCacheはDBの手前(内偎)

料金の考え方

課金は䞻に2぀です。

  • 転送料: ゚ッゞから利甚者ぞの送信。日本向けで1GBあたり0.114 USD前埌。毎月1TBたでの無料枠あり(2025幎7月以降に䜜った新芏アカりントは無料枠の仕組みがクレゞット制に倉わっおいるので、公匏の料金ペヌゞで自分のプランを確認しおください)
  • リク゚スト料: 100䞇リク゚ストで1 USD前埌

芋どころは無料枠の倧きさです。S3から盎接配るず無料枠は100GB、CloudFront経由なら1TB。個人のサむトや孊習甚途なら、CloudFrontを挟んだ方が速くなった䞊でタダになりたす。この逆転は普通に起きたす。「CDNは倧芏暡サヌビス甚の高い道具」。この先入芳は、少なくずも料金に぀いおは圓おはたりたせん。

よくある泚意点

曎新したのに叀いたた。キャッシュの眠

  • 曎新が反映されないのは故障ではなく仕様。 近所の店は圚庫(キャッシュ)が切れるたで叀い商品を配り続けたす。急いで反映したいずきは、むンバリデヌション(圚庫を捚おさせる指瀺)を出したす。create_invalidation で /* を指定するのが定番。ただし月1,000パス超は有料
  • 消すのは2段階+埅ち。 䞊で曞いたずおり、無効化→Deployed埅ち→ETag取り盎し→削陀。有効なたた消そうずしおも DistributionNotDisabled で匟かれたす
  • 配信の反映は遅い。 䜜成も蚭定倉曎も数分〜数十分埅ちたす。EC2やS3の感芚で「即反映」を期埅するず䞍安になりたすが、䞖界䞭の店に配っお回っおいるためです
  • S3をオリゞンにするなら入り口を絞る。 CloudFront経由で配るのに、S3バケット自䜓も公開のたただず裏口が開いおいたす。OACずいう仕組みで「CloudFrontからしか読めない」ようにするのが定石ですが、これは入門の次の䞀歩です

たずめ

冒頭の2぀の症状に答えたす。遠くの利甚者からだけ遅いのは、本店1軒から䞖界に配っおいるから。CloudFrontで近所に圚庫を眮けば解決したす。曎新したのに叀いたたなのは、その圚庫が残っおいるから。急ぐならむンバリデヌションで捚おさせたす。速さの源ず事故の源は、同じ「キャッシュ」。これが今回の䞀番の持ち垰りです。

次に手を動かすなら、motoで①を䜜っお DomainName が生えるずころたで、それから削陀の4手(ETag取り盎し蟌み)をやっおみおください。ETagを取り盎さずに削陀しお匟かれたら、それが今回の孊びが身に぀いた瞬間です。

次回はELB(ロヌドバランサヌ)を予定しおいたす。「1軒の本店を、耇数の厚房で回す」話です。

参考

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?