Share
Embed
Cloudflare Workers + R2で低コストで画像配信を移行した話/cloudflare_workers_r2_migration
Workers Tech Talks #1 #workers_tech
https://workers-tech.connpass.com/event/287490/
で発表した
「Cloudflare Workers + R2で低コストで画像配信を移行した話」の資料になります。
元ネタになった記事は以下になります。
https://qiita.com/teckl/items/4314aa210a689d08e759
Shigeki SUGAI
July 19, 2023
Transcript
70 slides
-
ࣗݾհ w !UFDLMʢͯͬ͘Δʣ w γʔαʔגࣜձࣾͰ1FSMͷαʔϏεΛத৺ʹΠϯϑϥతͳ͓कΓΛͨ͠Γɺ ഇᆣΛͨ͠ΓɺσʔλҠߦͳͲͷࡶ༻Λͨ͠Γ͍ͯ͠·͢ w ࠷ۙͷझຯɿϫʔέʔγϣϯ ੍࣭ݶ w
ϦϞʔτϫʔΫͰϚϯωϦԽͨ࣌͠ϫʔέʔγϣϯ͕࠷ߴͰ͢ʂ w ཱྀઌͰ࣭ͷऔΓ͗͢ʹ͘Ε͙Εҙ͠·͠ΐ͏ʜ -
ΞδΣϯμ w $MPVE fl BSF8PSLFSTͱ w $MPVE fl BSF3ͱ w
Ҡߦ͢ΔࣄʹͳͬͨܦҢ w Ҡߦલͷߏ w ҠߦͷྲྀΕ w ·ͱΊ -
$MPVEGMBSF8PSLFSTͱ w IUUQTXXXDMPVE fl BSFDPNKBKQQSPEVDUTXPSLFST w αʔόϨε 'BB4 w
-BNCEB!&EHF $MPVG'SPOU'VODUJPOTΈ͍ͨͳͭʢࡶʣ w +BWB4DSJQU 7 ͳͲ͕ಈ࡞ w 4FSWJDF8PSLFS͕ಈ͘ w ؆୯ͳ,7ʢLFZWBMVFʣͷΩϟογϡػೳ w ؆୯ͳΞϓϦέʔγϣϯͳΒαʔόϨεͰՄೳ -
$MPVEGMBSF3ͱ w IUUQTXXXDMPVE fl BSFDPNKBKQQSPEVDUTS w "NB[PO4ޓͷΦϒδΣΫτετϨʔδ w ΤάϨεྉ͕ۚແྉ w
4ͱൺͯ͞Βʹίετ w 4ͱҧ͍ɺϦʔδϣϯͷ֓೦ແ͍ w 8PSLFSTͱͷ࿈ܞ͕؆୯ -
$MPVEGMBSF3ͷඅ༻ײ w 4ͱൺֱͯ͠ͲΕ͚ͩ҆͘ͳΔͷ͔ʁ w 31SJDJOH$BMDVMBUPS w IUUQTSDBMDVMBUPSDMPVE fl BSFDPN w
ϢʔεέʔεʹΑΔ͕ɺίετѹॖޮՌ͕ߴ͘ͳΔ͜ͱ͕ݟࠐ·ΕΔ w ྉۚମܥ͕ඇৗʹγϯϓϧ w 4ޓͳͷͰσʔλҠߦൺֱత༰қ -
$MPVEGMBSF8PSLFST 3ʹҠߦ͢Δࣄʹͳͬͨཧ༝ w ࡢࠓͷٸܹͳԁ҆ͷӨڹʹΑΔίετ૿Ճͷରࡦ͕ඞਢʹ w τϥϑΟοΫͱετϨʔδίετΛগ͠Ͱ͍҆͑ͨ͘ͱ͍͏త w 34ޓͰίετݮ͕ظग़དྷΔ͔Βϕʔλ൛ൃද͔࣌Β͍ͯͨ͠ w ·ͩ·ͩ("͞Ε͔ͨΓͰ࣮ࡍͷࣄྫগͳ͘ɺॳগʑා͍ͱ͜Ζ͋ͬ
͕ͨɺνϟϨϯδ͢ΔՁ͕͋Δͱߟ͑ͨ w ࣮ࡍʹͲΕ͚ͩ҆͘ͳΔ͔Ͳ͏͔Ϣʔεέʔε࣍ୈͳͷͰҙ͕ͩɺࠓճͷέ ʔεͰେ͖ͳίετݮޮՌ͕͋ͬͨ -
Ҡߦલͷߏ w 4 OHJOY &$ ʹΑΔଟஈߏ w OHJOYDPOG͕ॳݟࡴ͠ w #BTJDೝূͷػೳͷ͓͔͛Ͱ݁ߏཪଆ͕ෳࡶͳࣄʹ
ͳ͍ͬͯͨ w ཁ݅తʹ63-શͯʹରͯ͠ػցతͳఆ͕ग़དྷͣɺ /HJOY OHY@NSVCZͰ63-ຖʹఆ͍ͤͯͨ͞ w $%/Ҏ֎ʹೝূج൫Λҡ࣋͢Δίετ͕͔͔ͬ ͍ͯͨͨΊɺ$MPVE fl BSFҠߦΛػʹ#BTJDೝূػೳ ഇࢭͯ͠γϯϓϧͳߏʹ͢Δࣄʹ -
ҠߦͷྲྀΕ 8PSLFSTػೳ࣮ ΞϓϦέʔγϣϯ͔Β4ͱ3ͷμϒϧϥΠτ࣮ 43ͷϑϧίϐʔ ߹ੑνΣοΫ
Ωϟογϡύʔδͷ࣮ ϩΪϯά Γସ͑ʢ/4ͷҕʣ ࡞ۀ Ҡߦޙʹ໌ͨ͠ -
8PSLFSTػೳ࣮ ͦͦ3৴Ͱ8PSLFSTΛ͏͖͔ʁ w ͷ3ͷ("ͷλΠϛϯάͰɺެ։όέοτ 1VCMJDCVDLFUT ͱ͍͏ػೳ͕ఏڙ͞ΕΔ Α͏ʹͳͬͨͨΊɺγϯϓϧͳόέοτͷެ։͚ͩͰ͋Ε8PSLFSTΛ௨͞ͳͯ͘৴Ͱ͖ ΔΑ͏ʹͳ͍ͬͯͨ w IUUQTEFWFMPQFSTDMPVE
fl BSFDPNSCVDLFUTQVCMJDCVDLFUT w ύεͷϚοϐϯά͕γϯϓϧͳ߹ɺ8PSLFSTΛΘͣͱ3FXSJUF63-3VMFT͚ͩͰे w IUUQTEFWFMPQFSTDMPVE fl BSFDPNSVMFTUSBOTGPSNVSMSFXSJUFFYBNQMFT w ͔͠͠ɺݱࡏར༻͍ͯ͠Δฐࣾ4ͷόέοτΦϯϓϨͷϑΝΠϧαʔό͔࣌Βଓͪ͘ΐͬ ͱհͳύεߏʢޙड़ʣʹͳ͓ͬͯΓɺެ։όέοτػೳͦͷ··Ͱ͑ͳ͍͜ͱ͕໌ -
8PSLFSTػೳ࣮ Ҡߦલͷը૾63-ͱόέοτͷΠϝʔδ 63- IUUQTIPHFIPHFFYBNQMFOFUJNBHFIFMMPKQH IUUQTUFTUTVCEPNBJOFYBNQMFOFUJNBHFBCDQOH όέοτύε IIPIPHFIPHFJNBHFIFMMPKQH UUFUFTUTVCEPNBJOJNBHFBCDQOH w αϒυϝΠϯϢʔβ͕ҙʹࢦఆՄೳ
w ΦϯϓϨ࣌ͷ໊ͰαϒυϝΠϯͷ಄จࣈ͕֊ʹͳ͍ͬͯΔ FYIUUQTTBQOPSUIFBTUBNB[POBXTDPNYYYYQSPEVDUJPOIIPIPHFIPHFJNBHFIFMMPKQH MPDBUJPOd? QBUI \ JG IPTUd? EJS EJS EJS<?> a \ QSPYZ@QBTTIUUQOFYU@IPTUOFYU@QBUIEJSEJSEJSEJSEJSEJSQBUIJT@BSHTBSHT ^ ^ -
8PSLFSTػೳ࣮ ·ͣ8PSLFSTͰ3ͷϑΝΠϧදࣔΛݕূ w $MPVE fl BSF8PSLFSTΛ͏͜ͱͰෳࡶͳύεฤूΩϟογϡ੍ޚͳͲ͕Τ οδଆ͚ͩͰ࣮Մೳͳ͜ͱ͕໌ w ҎԼͷϖʔδͳͲΛࢀߟʹ࠷ݶͷදࣔ֬ೝ w
<3VTU>$MPVE fl BSF8PSLFSTͰ3ʹΞΫηεͯ͠ΈΔ<5ZQF4DSJQU> w IUUQTEFWDMBTTNFUIPEKQBSUJDMFTXPSLFSTS w IUUQTEFWFMPQFSTDMPVE fl BSFDPNSBQJXPSLFSTXPSLFSTBQJVTBHF -
8PSLFSTػೳ࣮ ·ͣ8PSLFSTͰ3ͷϑΝΠϧදࣔΛݕূ w 8PSLFST͔Β3ʹϑΝΠϧΛΞοϓϩʔυআͤͨ͞Γɺࡉ͔͍Ωϟ ογϡ੍ޚΛͨ͠Γͱɺͬͱڽͬͨ͜ͱΛΓ͍ͨํΏʔ͚͢ʔ͞Μ ʹΑΔߴͳ$MPVE fl BSF8PSLFSTϑϨʔϜϫʔΫʮ)POPʯΛ͏ͱྑ͞ ͦ͏Ͱ͢ɻ w
IUUQTIPOPEFW w $MPVE fl BSF3͍͍ͧʂ w IUUQTZVTVLFCFDPNQPTUTSCFUB -
8PSLFSTػೳ࣮ $BDIFʹ͍ͭͯ w ը૾৴͕த৺ʹͳΔͨΊɺ͜Ε·ͰͷΑ͏ʹग़དྷΔݶΓΩϟογϡ͍ͨ͠ͱߟ ͑·ͨ͠ɻ w $MPVE fl BSF8PSLFSTͷΩϟογϡෳͷํ๏͕͋Γ·͢ w
GFUDIDG w $BDIF"1* w ,7 w %VSBCMF0CKFDUT -
8PSLFSTػೳ࣮ $BDIFʹ͍ͭͯ w ΩϟογϡώοτͳͲΛߟ͑Δͱ,7͕ ཧతʹݟ͑ͨͷͰ͕͢ɺ,7ैྔ՝ ۚͷͨΊίετ͕ผ్͔͔ͬͯ͠·͏ʜ w ͜ͷͨΊࠓճ௨ৗͷ$%/අ༻ʹؚ·Ε Δ$BDIF"1*ΛͬͯΩϟογϡ͢ΔΑ ͏ʹ
w IUUQTEFWFMPQFSTDMPVE fl BSFDPN SFYBNQMFTDBDIFBQJΛগ͠Χελ ϚΠζͨ͠ఔͰे࣮༻ग़དྷͨ Ҡߦޙͷߏ -
8PSLFSTػೳ࣮ $BDIFʹ͍ͭͯิ w ϑΝΠϧ͕݅গͳ͔ͬͨΓɺγϯϓϧͳαΠτͷ߹ɺ$BDIF"1*ΑΓ,7%VSBCMF 0CKFDUT GFUDIDG͕ྑͦ͞͏Ͱ͢ w IUUQTEFWFMPQFSTDMPVE fl BSFDPNXPSLFSTSVOUJNFBQJTSFRVFTUSFRVFTUJOJUDGQSPQFSUJFT
w ·ͨɺ$BDIF"1*Τοδαʔό୯ҐͰͷΩϟογϡͱͳΔͨΊɺҰճͷϦΫΤετͰશ෦ͷΩϟ ογϡ͕ೖΔ༁Ͱແ͍ͷͰҙ w ,7ͩͱෳڌؒͰڞ༗͞ΕΔ w $BDIF"1*ෳճͷϦΫΤετ͕ඞཁ w ฐࣾͷ߹αΠτ͕αϒυϝΠϯܗࣜͰେྔͷաڈը૾͕ଘࡏ͢ΔͨΊɺίετΛ࠷༏ઌͯ͠ $BDIF"1*Λ࠾༻ -
8PSLFSTػೳ࣮ ༨ஊɿը૾৴ʹ͍ͭͯ w αʔϏεͷཁ݅ʹΑΓ·͕͢ɺྫ͑ίετ໘ΑΓॊೈͳը૾ϦαΠζ ຖͷࣗಈ࠷దԽΛ͍ͨ͠ͷͰ͋Εʮ$MPVE fl BSF*NBHFTʯʮ$MPVE fl BSF *NBHF3FTJ[JOHʯͱ͍ͬͨαʔϏεΛબఆ͢ΔͷΞϦͩͱࢥ͍·͢
w IUUQTXXXDMPVE fl BSFDPNKBKQQSPEVDUTDMPVE fl BSFJNBHFT w IUUQTEFWDMBTTNFUIPEKQBSUJDMFT DMPVE fl BSFJNBHFT@SFTJ[JOH@BOE@QPMJTI w IUUQTEFWFMPQFSTDMPVE fl BSFDPNJNBHFTJNBHFSFTJ[JOH -
8PSLFSTػೳ࣮ $BDIFʹ͍ͭͯิ w औΓٸ͗$MPVE fl BSF8PSLFSTͰ$BDIF"1*Λ͏͜ͱͰɺ3ͷϑΝΠϧΛ ΧελϜυϝΠϯͰΑ͠ͳʹ৴ग़དྷΔࣄ·ͰѲग़དྷͨ w ଞʹҠߦʹ͋ͨͬͯඞཁʹͳΓͦ͏ͳཁ݅ͳͲΛચ͍ग़ͭͭ͠ɺ $MPVE
fl BSF+BQBO༷ʹ֓ࢉݟੵΓٕज़తͳ࣭ͷαϙʔτΛ͍͖ͨͩ ͳ͕Βɺฒߦͯ͠ཪଆͷ࣮ΛਐΊ͍͖ͯ·ͨ͠ -
ΞϓϦέʔγϣϯ͔Β4ͱ3ͷμϒϧϥΠτ࣮ Ҡߦʹ͋ͨͬͯҙ͢Δ w ҎલΦϯϓϨ͔Β4ʹҠߦͨ࣌͠సૹྔΛ͋·Γҙࣝ͠ͳͯ͘ྑ͔ͬͨ ͷͰૉʹσΠϦʔͰϑΝΠϧͷࠩγϯΫΛ͍ͯͨ͠ w ͔͠͠4͔Β3ͷҠߦͰΫϥυؒͷҠߦͱͳΔͨΊτϥϑΟοΫͷྉ ۚʹγϏΞʹͳΔඞཁ͕͋Δ w όέοτͷίϐʔग़དྷΔݶΓճ͚ͩͰޭͤ͞Δඞཁ͕͋Δ
w Γସ͑࣌ͷίϐʔʹΑΔαʔϏεͷఀࢭ࣌ؒʢϝϯςφϯεʣۃྗແ͘͠ ͍ͨɺཧͱͯ͠%/4Γସ͑ͷΈͰࡁ·͍ͤͨ -
4͔Β3ͷશσʔλίϐʔ ํ๏34VQFS4MVSQFS چ3.JHSBUPS ͰҠߦ w ެࣜʹΑΔ3ͷҰׅҠߦπʔϧ w 34VQFS4MVSQFSຊ࣌Ͱ·ͩ#FUB൛ w ΦϒδΣΫτͷαΠζΦϒδΣΫτͳͲʹ੍͍͔ͭ͘ݶ͕͋Δ
w IUUQTCMPHDMPVE fl BSFDPNKBKQDMPVE fl BSFSTVQFSTMVSQFSKBKQ w IUUQTEFWFMPQFSTDMPVE fl BSFDPNSEBUBNJHSBUJPO -
4͔Β3ͷશσʔλίϐʔ ํ๏SDMPOFͰҠߦ w 3DMPOFͱΦʔϓϯιʔεͷίϚϯυϥΠϯϕʔεͷϑΝΠϧಉظ͓Αͼసૹ πʔϧ w IUUQTSDMPOFPSH w $MPVE fl
BSFެࣜͰ3ͰͷSDMPOFͷ͍ํΛհ͞Ε͍ͯΔ w IUUQTEFWFMPQFSTDMPVE fl BSFDPNSFYBNQMFTSDMPOF w 34VQFS4MVSQFS·ͩϕʔλ൛Ͱ͋ΓɺόέοτͷαΠζίϐʔͷλΠϛ ϯά੍ޚͳͲʹෆ͕҆͋ͬͨͨΊɺࠓճͪ͜ΒͷSDMPOFΛ༻͢Δ͜ͱʹ -
4͔Β3ͷશσʔλίϐʔ SDMPOFͷίϚϯυΦϓγϣϯ w SDMPOFʹଟ͘ͷΦϓγϣϯ͕͋Γ·͕͢ɺҎԼͷαΠτͳͲࢀߟʹɺ ࠷దͱͳΓͦ͏ͳΦϓγϣϯΛௐ͠·ͨ͠ɻ w IUUQTGPSVNSDMPOFPSHUIPXUPNBYJNJ[FTJOHMF fi MFNVMUJQBSU VQMPBETQFFEUPDMPVE
fl BSFSTDPNQBUJCMF w IUUQTSDMPOFPSH fl BHTΑΓ w -
4͔Β3ͷશσʔλίϐʔ SDMPOFͷ᠘ͦͷ w ͪͳΈʹSDMPOFADPQZAͱATZODAίϚϯυ͕͋Γ·͕͢ɺ w STZODͱҧͬͯATZODAίϚϯυΛ͏ͱSTZODEFMFUFͷڍಈͱͳΔͷ Ͱཁҙ w ҰճݶΓͷϑϧίϐʔͰADPQZAΛ͏ͷ͕҆શ w
IUUQTEFYMBCOFUQVLJXJLJJOEFYQIQ .FNP-JOVY SDMPOFTF w IUUQTSDMPOFPSHDPNNBOETSDMPOF@TZOD -
4͔Β3ͷશσʔλίϐʔ ίϐʔʹ͔͔Δ3ૢ࡞ؔ࿈ͷίετνΣοΫ w ڊେͳόέοτΛίϐʔ͢Δ࣌ͲΕ͚ͩͷΦϒδΣΫτૢ࡞Ͱίετ͕͔ ͔Δ͔Λ44UPSBHF-FOTͰ༧Ί༧ଌ͓ͯ͘͠ͱྑ͍ w IUUQTEFWFMPQFSTDMPVE fl BSFDPNSQMBUGPSNQSJDJOH w
$MBTT"0QFSBUJPOTʢ-JTU0CKFDUT 1VU0CKFDUͳͲʣ w $MBTT#0QFSBUJPOTʢ)FBE0CKFDU (FU0CKFDUͳͲʣ͕ݱঢ়ͲΕ͚͔ͩ ͔͍ͬͯͯɺҠߦͰͲΕ͚͔͔ͩΓͦ͏͔ΛѲ͢Δ w 3ଆ͚ͩͰͳ͘ɺ4ଆͷίετ৻ॏʹνΣοΫ -
4͔Β3ͷશσʔλίϐʔ ίϐʔʹ͔͔Δ3ૢ࡞ؔ࿈ͷίετνΣοΫ w $MPVE fl BSFͰ(SBQI2-"1*͕༻ҙ͞Ε͍ͯΔ w ҎԼͷهࣄͰհ͞Ε͍ͯΔΑ͏ʹɺ3ͷ֤छϝτϦΫεΛ (SBGBOBͰͪΐͪ͘ΐ֬͘ೝग़དྷΔΑ͏ʹ͢Δͱྑͦ͞͏ w
$MPVE fl BSF3ͷ(SBQI2-"OBMZUJDTΛ(SBGBOBͰՄࢹԽ ͢Δ w IUUQTRJJUBDPNLIBZBNBJUFNTCCGCCBCE -
4͔Β3ͷશσʔλίϐʔ /"5(BUFXBZ՝ۚͷ᠘ w όέοτίϐʔ࡞ۀ։࢝ॳɺૉʹSDMPOFΛ։࢝ͨ͠ͷͷɺࢥͬͨΑ Γ"84ଆͷྉ͕ۚͶ্͕ͬͯ͠·͏͕ൃੜ w ௐࠪͨ͠ͱ͜Ζɺ࡞ۀ༻ͷ&$͕ϓϥΠϕʔταϒωοτʹଐ͍ͯͯ͠ɺͦ ͔͜Β4Λ3ʹίϐʔͨͨ͠Ί֎෦$MPVE fl BSFͷΞτόϯυ௨৴͕
/"5(BUFXBZܦ༝ʹͳͬͯ͠·͍ͬͯͨ w ͜ΕΛճආ͢Δʹ&$ΛύϒϦοΫαϒωοτʹஔ͔͘ɺ71$ &OEQPJOUΛར༻͢Δͱ/"5(BUFXBZܦ༝ʹͳΒͳͯ͘ࡁΉͷͰΓସ͑ Λߦͬͨ -
4͔Β3ͷશσʔλίϐʔ /"5(BUFXBZ՝ۚͷ᠘ w ҎԼͷهࣄͳͲ͕ࢀߟʹͳΓ·ͨ͠ɻɻ w ͦͷτϥϑΟοΫɺ/"5ήʔτΣΠΛ௨͢ඞཁ͋Γ·͔͢ʁదͳܦ࿏Ͱෆཁͳσʔλॲཧྉ ۚݮ͠·͠ΐ͏ w IUUQTEFWDMBTTNFUIPEKQBSUJDMFTSFEVDFVOOFDFTTBSZDPTUTGPSOBUHBUFXBZ w
&$͔Β4ΞΫηε͢Δͭͷϧʔτͱίετ w IUUQTUFDIOSJOFUDPNFOUSZBDDFTT@SPVUFT@GSPN@&$@UP@4 w Γ͜͏͍͏࡞ۀΛ͢ΔࡍɺظؒͰҰؾʹίϐʔΛߦΘͣɺ$PTU&YQMPSFSΛࡉ͔͘νΣο Ϋ͠ͳ͕ΒͦΕͳΓʹ࣌ؒΛ͔͚͍ͯͬͯ͘ͷ͕ྑͦ͞͏ w ७ਮʹίϐʔ͕ૣ͚Εྑ͍ͱ͍͏ͷͰແ͍ͷͰ͍͠ͱ͜Ζ -
߹ੑνΣοΫ w 8PSLFSTෳͷΧελϜυϝΠϯΛϚοϐϯά͢Δࣄ͕Մೳ w ຊ൪ͱผͷԾυϝΠϯΛ༻ҙͯ͠ɺࣄલʹݟൺग़དྷΔΑ͏ʹςετ w QSPEVDUJPOFYBNQMFOFUʢຊ൪༻υϝΠϯʣ w QSPEVDUJPOFYBNQMFDPNʢ߹ੑνΣοΫ༻υϝΠϯʣ w
࣮ࡍʹαʔϏεͰΘΕΔ63-ΛϥϯμϜʹੜͯ͠Ϩεϙϯείʔυ A$POUFOU5ZQFA A$POUFOU-FOHUIAͳͲͷൺֱΛߦ͏εΫϦϓτΛ༻ҙ w ͜ͷ߹ੑνΣοΫʹΑΓҰ෦όέοτͷίϐʔ࿙ΕΛݕग़དྷ·ͨ͠ʜ -
Ωϟογϡύʔδͷ࣮ ୯ҰϑΝΠϧআͷ߹ w $MPVE fl BSF$BDIF"1*ΛͬͯΩϟογϡ͍ͯ͠Δ߹Ωϟογϡͷύ ʔδΛ$MPVE fl BSF"1*Λͬͯߦ͏ඞཁ͕͋Δ w
IUUQTEFWFMPQFSTDMPVE fl BSFDPNDBDIFIPXUPQVSHF DBDIFQVSHFCZTJOHMF fi MFCZVSM w $MPVE'SPOUͷ*OWBMJEBUJPOTͱҧ͍ɺ$MPVE fl BSFͷΩϟογϡύʔδϦΫ ΤετࣗମແྉͷͨΊɺίετؾʹͤͣʹૉʹআ͞ΕͨϑΝΠϧ ͷ63-ΛదٓΩϡʔʹೖΕͯ͛ΔΑ͏ʹΞϓϦέʔγϣϯଆʹΈࠐΈ -
Ωϟογϡύʔδͷ࣮ Ұׅআͷ߹ w ෳϑΝΠϧͷҰׅআͷ߹ɺ$MPVE'SPOUͷ*OWBMJEBUJPOͰαϒυϝ ΠϯʹରԠ͍ͯ͠ͳ͍ΘΓʹύε୯ҐͰϫΠϧυΧʔυύʔδ͕ར༻Մೳ ͩͬͨ w $MPVE fl BSFͷ߹ɺϫΠϧυΧʔυͷΘΓʹUBHQSF
fi YͰҰׅআͱ ͍͏ͷ͕ଘࡏ͢ΔͷͰ͜ΕΛར༻ʢཁ&OUFSQSJTF1MBOʣ w IUUQTEFWFMPQFSTDMPVE fl BSFDPNBQJPQFSBUJPOT[POF QVSHFQVSHFDBDIFEDPOUFOUCZUBHIPTUPSQSF fi Y -
ϩΪϯάͷઃఆ w Ҡߦલͷ$MPVE'SPOUͰɺఆظతʹಛఆͷ֦ுࢠͷϦΫΤετ݅ͳͲΛ ूܭͯ͠%#ʹೖΕΔͱ͍ͬͨࣄΛߦ͍ͬͯͨ w $MPVE fl BSFͰ-PHQVTIͱ͍͏ػೳ͕͋ΔͨΊɺ͜ΕΛར༻ ཁ &OUFSQSJTFϓϥϯ
w $MPVE fl BSF3ʹ)551ΞΫηεϩάΛϓογϡͯ͠"1*Ͱऔಘ͢Δ·Ͱ w IUUQTEFWDMBTTNFUIPEKQBSUJDMFTDMPVE fl BSFSMPHQVTI -
ϩΪϯάͷઃఆ -PHQVTI w -PHQVTIϩΪϯάʹඞཁͳϧʔϧΛਖ਼نදݱ "/% 03ͳͲͰࡉ͔͘ࢦ ఆՄೳ w IUUQTEFWFMPQFSTDMPVE fl
BSFDPNMPHTSFGFSFODF fi MUFST -
ϩΪϯάͷઃఆ -PHQVTI w ࣌ؒΛࢦఆͯ͠ಛఆͷϩάΛऔΓग़͢߹ w IUUQTEFWFMPQFSTDMPVE fl BSFDPNMPHTSMPHSFUSJFWBMSFUSJFWF MPHTCZUJNFSBOHF w
ϩάͷྲྀྔ͕ଟ͍ͱ࣌ؒൣғΛখࠁΈʹ͢Δඞཁ͕͋ΔͷͰҙ DVSMTH9(&5IUUQTBQJDMPVE fl BSFDPNDMJFOUWBDDPVOUT"$$06/5@*%MPHTSFUSJFWF TUBSU5;FOE5;CVDLFUDMPVE fl BSFMPHTQSF fi YIUUQ@SFRVFTUTFYBNQMFDPN\%"5&^a )9"VUI&NBJM&."*-a )9"VUI,FZ"1*@,&:a )3"DDFTT,FZ*E3@"$$&44@,&:@*%a )34FDSFU"DDFTT,FZ3@4&$3&5@"$$&44@,&:cKR -
Γସ͑ʢ/4ͷҕʣ αϒυϝΠϯ୯ҐͷυϝΠϯΓସ͑ͷ߹ w ఀࢭϝϯςφϯεΛ͠ͳ͍ͰࡁΉΑ͏ʹɺ1BSUJBM $/".& TFUVQΛར༻ͯ͠Γସ͑Λߦͬͨ w IUUQTEFWFMPQFSTDMPVE fl BSFDPNEOT[POFTFUVQTQBSUJBMTFUVQTFUVQ
1BSUJBM $/".& TFUVQͰຊ൪༻υϝΠϯΛೝূͤ͞Δ ݩʑ3PVUFΛར༻͍ͯͨ͠ͷͰɺ3PVUFଆͰADMPVE fl BSFWFSJGZFYBNQMFOFUAͷΑ͏ͳ595Ϩί ʔυΛ࡞ $MPVE fl BSFଆͷ%/4ʹ༧Ίطଘͷ3PVUFͱಉ͡ϨίʔυΛͯ͢ઃఆ͓ͯ͘͠ 3PVUFଆͷ$MPVE'SPOUͷ"MJBTϨίʔυͱಉ͡ϨίʔυΛ$MPVE fl BSFଆʹ$/".&Ͱొ͓ͯ͠ ͘ɻ͜ͷࡍɺ1SPYJFEͰͳ͘ʮ%/4POMZʯͱ͢Δ 8PSLFSTͷ$VTUPN%PNBJOΛઃఆ -
Γସ͑ʢ/4ͷҕʣ αϒυϝΠϯ୯ҐͷυϝΠϯΓସ͑ͷ߹ 8PSLFSTͷAXSBOHMFSUPNMAͷDVTUPN@EPNBJOઃఆ͠ɺAXSBOHMFSEFQMPZAͰσϓϩΠ͢Δ 8PSLFSTͷຊ൪༻$VTUPN%PNBJO͕A*OJUJBMJ[JOHA͔ΒA"DUJWFAʹมΘΔͷΛͭ "DUJWFʹͳͬͨΒɺDVSMͰ֬ೝ ADVSM*9(&5IUUQTIPHFFYBNQMFOFUUFTUQOHSFTPMWFIPHFFYBNQMFOFU\DMPVE fl BSF*1^A ͜͜·Ͱແ͔ͬͨΒɺ/4ͷҕ࡞ۀΛߦ͏ A$/".&4FUVQA͔ΒA'VMM4FUVQAʹมߋ͢Δ
3PVUFଆʹ/4ϨίʔυΛ࡞ͯ͠ɺ$MPVE fl BSFʹҕ ࣄલʹೖΕ͓͍ͯͨDMPVEGSPOUͷϨίʔυΛXPSLFSTʹมߋ͢Δɻ͜ͷࡍɺA%/4POMZA͔ΒA1SPYJFEAʹมߋ AXSBOHMFSUBJMAͰϩάΛࢹ͢Δʢͨͩ͠ྲྀྔ͕૿͑ΔͱݟΕͳ͍ࣄʣ -
Γସ͑ʢ/4ͷҕʣ ;POF"QFYʢωΠΩουυϝΠϯʣͷΓସ͑ͷ߹ ޙߦͬͨผαʔϏεͷ$MPVE fl BSF8PSLFST 3ҠߦͰɺ;POF"QFYʢωΠΩου υϝΠϯʣͷΓସ͑ͱͳͬͨͨΊɺ্Ґ%/4ͷΩϟογϡʢʁʣͳͲ͕ൃੜ͠· ͨ͠ɻ ΧελϜυϝΠϯͷө͕ͳ͔ͳ͔͞Εͳ͍ʢ&EHF$FSUJ fi
DBUFTͷऔಘ͕ਐ·ͳ͍ʣͱ ͍͏͕ؔ࿈͓ͯ͠Γɺ߹ʹΑͬͯϦϦʔε࣌ͷௐʹҙ͕ඞཁͦ͏Ͱ͢ɻ ઌͷهࣄʹগ͠هΛߦ͍ͬͯΔͷͰڵຯͷ͋Δํࢀߟʹ͍ͯͩ͘͠͞ɻ IUUQTRJJUBDPNUFDLMJUFNTBBBEF -
Γସ͑ʢ/4ͷҕʣ ສ͕Ұͷ߹ͷΓ͠ w ͠Γ͠Λߦ͍͍ͨ߹ɺ$MPVE fl BSFଆ%/4ͷ8PSLFSTͷ $/".&ΛݩͷDMPVEGSPOUͷ"-*"4Ϩίʔυʹมߋʢ͔ͭA1SPYJFEAΛ A%/4POMZAʹʣ͢Δ͜ͱͰΓ͕͠Մೳ w ۓٸͷΓ͠ͷՄೳੑఆͯ͠ɺݹ͍$MPVE'SPOU༻ͷ$/".&Ϩίʔ
υΛμϛʔϨίʔυͱ͓ͯͯ͘͠͠ͱ҆৺ w $MPVE fl BSF%/43PVUFͷΓ͠ͳͲ͕͔͔࣌ؒΔͨΊ $MPVE fl BSF%/4෦ͷΈͰ$/".&ͰͷΓ͠Λͨ͠ํ͕ૣ͍ͱߟ͑ͨ -
࡞ۀ w $MPVE fl BSF3 8PSLFSTڥʹΓସ͑ޙɺ͠Β͘ͷظؒฒߦՔಈͰ༷ ࢠΛݟͭͭɺΓ͠ͷඞཁ͕ແ͘ͳͬͨͱஅग़དྷͨλΠϛϯάʹͳͬͨ ΒΞϓϦέʔγϣϯଆͷ4ͱ3ͷμϒϧϥΠτͷΈΛഇࢭ͠ɺ3ͷ Έॻ͖ࠐΈͷγϯάϧߏʹมߋ͢Δ w
ఆظతʹআ͢Δཁ݅ͳͲ͕͋ΕϥΠϑαΠΫϧϧʔϧͷΈࠐΈ w 4όέοτ$MPVE'SPOUͷσΟετϦϏϡʔγϣϯͳͲɺؔ࿈͢ΔϦιʔε ͷΞʔΧΠϒআΛߦ͏ w Ҏ্ͰҠߦ࡞ۀͱͯ͠ऴྃʹͳΓ·͢ -
Ҡߦޙʹ໌ͨ͠ SDMPOFͷ᠘ͦͷɿΦϒδΣΫτΩʔʹ͕ଘࡏ͍ͯ͠Δྫ֎έʔε w 4όέοτʹͱ͍͏ΦϒδΣΫτΩʔ͕ଘࡏ͍ͯ͠Δͱ3ʹҠߦग़དྷ͍ͯͳ͍͕໌ w ྫʣ w IUUQTIPHFIPHFFYBNQMFOFUEVQMJDBUFGPXBSETMBTIQOH w IUUQTIPHFIPHFFYBNQMFOFUJNBHFIPHFKQH
BXTTMTTYYYCVDLFUQSPEVDUJPOIIPIPHFIPHFcXDM BXTTMTTYYYCVDLFUQSPEVDUJPOIIPIPHFIPHFcXDM ͱผ SDMPOFDPQZTYYYCVDLFUQSPEVDUJPOIIPIPHFIPHFSYYYCVDLFUQSPEVDUJPOIIPIPHFIPHF ্هͩͱAAԼ͚͕ͩίϐʔग़དྷ͍ͯͳ͍ -
Ҡߦޙʹ໌ͨ͠ SDMPOFͷ᠘ͦͷɿΦϒδΣΫτΩʔʹ͕ଘࡏ͍ͯ͠Δྫ֎έʔε 3ʹۭͷόέοτΛ४උͯ͠ςετͯ͠ΈΔͱ BXTTMTTUFTUCVDLFU 13& DMPVE fl BSF@XPSLFSTQOH BXTTMTTUFTUCVDLFU HJUIVCQOH
SDMPOFMTTUFTUCVDLFU HJUIVCQOH DMPVE fl BSF@XPSLFSTQOH SDMPOFMTSUFTUCVDLFU SDMPOFDPQZTUFTUCVDLFUSUFTUCVDLFU &3303&OUSZEPFTOUCFMPOHJOEJSFDUPSZ TBNFBTEJSFDUPSZ JHOPSJOH SDMPOFMTSUFTUCVDLFU DMPVE fl BSF@XPSLFSTQOH AAͱ͍͏ΦϒδΣΫτΩʔ͕ҠߦͰ͖͍ͯͳ͔ͬͨɻʢΦϒδΣΫτΩʔʹ͕ೖ͍ͬͯͳ͍ϑΝΠϧ͚͕ͩίϐʔ͞ΕΔʣ -
Ҡߦޙʹ໌ͨ͠ SDMPOFͷ᠘ͦͷɿΦϒδΣΫτΩʔʹ͕ଘࡏ͍ͯ͠Δྫ֎έʔε w ͔ͳΓͷྫ֎έʔεͰ͕͋ͬͨɺಛघͳύλʔϯͰଘࡏ͍ͯͨ͠ w ͦͦΦϒδΣΫτΩʔʹAAΛڐ༰͢Δ͖Ͱͳ͍ w ΞϓϦέʔγϣϯଆͰೖΒͳ͍Α͏ʹ͖͢ w ͱݴ͍͑αʔϏεͳͷͰ͘͝Ұ෦ͷϢʔεέʔεͰଘࡏ͍ͯͨ͠
w ݱঢ়ͷSDMPOFͰ͜ͷέʔεҠߦରԠग़དྷͳ͍ͨΊɺ"84$-*ͰόέοτΛमਖ਼ͯ͠ରԠ w ͜͏͍͏έʔε͋ͬͨΓ͢ΔͷͰɺҠߦޙͷ4ଆόέοτͷআλΠϛϯάཁҙ w 41SF fi YFTXJUIDBVTFTSDMPOFDPNNBOETUPGBJMMPPLGPSUIF XSPOHPCKFDUT w IUUQTHJUIVCDPNSDMPOFSDMPOFJTTVFT -
Ҡߦޙʹ໌ͨ͠ SDMPOFͷ᠘ͦͷɿΦϒδΣΫτΩʔʹ͕ଘࡏ͍ͯ͠Δྫ֎έʔε export default { async fetch(request, env, context) {
try { let requestUrl = request.url; // "%3F" Λ "?" ʹஔ requestUrl = requestUrl.replace("%3F", "?"); // "//" Λ "/" ʹஔʢͨͩ͠ "https://" ͷεϥογϡͦͷ··ʣ requestUrl = requestUrl.replace(/([^:]\/)\/+/g, "$1"); const url = new URL(requestUrl); // Construct the cache key from the cache URL const cacheKey = new Request(url.toString(), request); w ࣅͨΑ͏ͳͰɺΦϒδΣΫτΩʔʹ63*ΤϯίʔυͷAA͕ΘΕ͍ͯΔέʔεଘࡏͯ͠ ͍ͨ w 3෦ͷΦϒδΣΫτΩʔΛͯ͢ཧͨ͠ޙͰɺҎԼͷΑ͏ʹ63-ΛϊʔϚϥΠζͯ͠ରԠ -
·ͱΊ w $MPVE'SPOU 4ڥ͔Β$MPVE fl BSF3 8PSLFSTʹҠߦ͢Δํ๏ͷҰྫͱϋϚͬͨΛ հ͠·ͨ͠ɻ w $MPVE
fl BSF8PSLFST 3ڥʹҠߦ͔Βϲ݄΄Ͳܦա͠·͕ͨ͠ɺࠓͷͱ͜Ζ᠘Ͱհͨ݅͠ Ҏ֎ʹେ͖ͳൃੜ͍ͯ͠·ͤΜɻΩϟογϡώοτҠߦલͱมΘΒͣɺύϑΥʔϚϯ εʹ͍ͭͯಛʹແ͘ӡ༻Ͱ͖͍ͯ·͢ɻ w ಛʹίετ໘ʹ͍ͭͯඇৗʹେ͖ͳΠϯύΫτ͕͋Γ·ͨ͠ɻ w 8PSLFSTΛબͨ͜͠ͱͰࡉ͔͍ௐ͘͢͠ɺը૾৴༻ͷαʔόӡ༻͔Β։์͞Εͨͷඇ ৗʹਫ਼ਆతʹྑ͍ w 8PSLFSTʑਐԽ͍͍ͯͬͯͯ͠ඇৗʹָ͍͠ͳͷͰɺଞͷҊ݅ͳͲͰద༻ग़དྷͦ͏ͳΒ ࢼ͍͖͍ͯͨ͠ -
খωλ XPSLυϝΠϯͰͷݕূͷ᠘ w ಈ࡞ݕূஈ֊ʹ͓͍ͯɺݸਓతͳςετ༻υϝΠϯͱͯ͠ʮXPSLʯͱ͍͏ υϝΠϯΛͬͯΧελϜυϝΠϯΛ༻ͨ͠ͱ͜ΖɺXPSLFSTͷΧελϜ υϝΠϯͷө͕ͳ͔ͳ͔͞Εͳ͍ʢ*OJUJBMJ[JOH͔Β"DUJWFʹͳΒͳ͍ʣ ͱ͍͏͕ൃੜ w ʮTJUFʯͳͲɺผͷH5-%ʹมߋͨ͠ͱ͜Ζ߈Ͱө͞Εͨ w
ʮXPSLʯυϝΠϯԁͰ҆Ձʹऔಘग़དྷͨͨΊ͓खܰʹ͑Δͱࢥͬͯ ͍͕ͨɺ߹ʹΑͬͯ͜͏͍͏ࣄ͋Δ͔͠Εͳ͍ͷͰҙ w ࠶ݱੑෆ໌Ͱ͕͢ɺ͋͘·Ͱ͜͏͍͏ࣄ͋ͬͨͱ͍͏ڞ༗ͱͳΓ·͢