多くのIoTデバイスは一度設置されると、問題が起きた際に現地に駆けつけて調査や対応が物理的に難しくなります。また、デバイスの数が増えてくると個別の対応はより困難になります。理想的なIoTデバイスは、ハードウェアの故障やソフトウェアのトラブル、回線の一時的な障害に対して自律的な回復手段を持っていることが求められます。
本セッションではそういったデバイスを実装するために考慮すべきプラクティスをご紹介します。
株式会社ソラコム ソリューションアーキテクト 小梁川 貴史
%FFQ%JWF*P5σόΠεઃܭʹ͓͚ΔϕετϓϥΫςΟειϦϡʔγϣϯΞʔΩςΫτɿখྊ
View Slide
ຊͷϋογϡλάTPSBDPN!403"$0.@13IUUQTXXXGBDFCPPLDPNTPSBDPNKQ
ࣗݾհגࣜձࣾιϥίϜ ιϦϡʔγϣϯΞʔΩςΫτখྊ و࢙ ͜ͳ͕Θ ͔ͨ͠ܦྺ• 4*ձࣾͰ։ൃΠϯϑϥઃܭɺߏஙͳͲ෯͘ܦݧ• ిػϝʔΧʔͰࣗࣾαʔϏεɺࣾڞ௨ϓϥοτϑΥʔϜͷ։ൃɺӡ༻• ֎ࢿܥΫϥυͷιϦϡʔγϣϯΞʔΩςΫτͱͯ͠ύʔτφʔ୲ *P5εϖγϟϦετϓϩτλΠϐϯά
ηογϣϯʹ͍ͭͯ• ͓͢Δ͜ͱ͠ͳ͍͜ͱ• ͜͜Ͱ͓͢ΔσόΠεσόΠε্Ͱಈ͘ιϑτΣΞʹ͍ͭͯߟ͑Δ͖ඇػೳཁ݅Λத৺ʹ͓͠·͢ɻϋʔυΣΞతͳσόΠεηϯαʔͳͲͷతʹग़͖ͯ·ͤΜɻ• σόΠεͱநతͳදݱͱͳΓ·͕͢ɺ*P5σόΠεͱͯ͠௨৴Λߦ͏ͷΛࢦͯ͠ར༻͍ͯ͠·͢ɻʢ*P5ήʔτΣΠ#$ͷʣ• ඞͣ͠ղͱͳ͍ͬͯΔͷͰͳ͘ɺΕ͕ͪͳݕ౼߲ͦΕʹର͢Δରࡦྫͱͯ͠͝հ͠·͢ɻ• ରͷํ• *P5γεςϜΞʔΩςΫτ• σόΠεઃܭऀ• *P5γεςϜʹؔΘΔόοΫΤϯυٕज़ऀ
"HFOEB• ϓϩϏδϣχϯά• ঢ়ଶཧ• ϦϞʔτίϚϯυϦϞʔτϝϯςφϯε• ࢄ• ·ͱΊ
ϓϩϏδϣχϯάσόΠεΛར༻͢Δ·ͰͷఔͰߟ͑Δ͖༰ʹ͍ͭͯཧ͠·͢ɻҎԼྫͰ͕͢ɺॳظઃఆ෦ɺόοΫΤϯυ։ൃऀͱͷဃΛੜΈ͍ͨ͢ΊʹɺશମΛઃܭ্ͨ͠Ͱػೳઃܭɺ୲Λݕ౼͢Δඞཁ͕͋Γ·͢ɻ ###$ͷੜ࢈ηοτΞοϓ͔Βར༻͞ΕΔ·Ͱͷϑϩʔ ֎෦͔Βߪೖͨ͠(BUFXBZͷॳظηοτΞοϓ ࣮σόΠεͱόοΫΤϯυαʔϏεͷొ
Α͋͘Δٞ• ͰͰ͖Δ͜ͱͷൣғͷ֬ೝ• ೝূใͱͳΔݸผೝূݤͷઃఆ͍͜͠ͱ͕ଟ͍• ཧͷػثͱόοΫΤϯυΫϥυαʔϏεͷݻ༗ࣝผࢠ%#ͱͷඥ͚ઃఆ• ग़ՙલͷςετɺग़ՙ·Ͱͷϑϩʔ• ࣮ࡍͷՔಇςετ͕͋Δ߹ɺ՝͕ۚ࢝·ͬͯ͠·͏403"$0.ͷ4*.ಉ༷ɺάϩʔόϧ4*.Λ͝ར༻͍ͨͩ͘͜ͱͰதஅதεςʔλεͰແବΛল͚ΔՄೳੑ͋Γ·͢
ղܾࡦ• ϒʔτετϥοϐϯάॲཧ• σόΠεॳճىಈ࣌ͷ௨৴Ͱग़ՙͰઃఆͰ͖ͳ͍ॲཧΛσόΠεଆͷॲཧͱͯ͠࡞ΓࠐΉ• 403"$0. ϝλσʔλαʔϏεΫϥυαʔϏεͷূ໌ॻൃߦػೳΛར༻• ࡏݿظ͕ؒ͋Δ• ར༻։࢝ΛτϨʔεͰ͖ΔΑ͏ͳΠϕϯτཧɺ౷ܭػೳΛར༻ɻ403"$0.4*.Λར༻͢Δ߹403"$0.*P54*.ɺΠϕϯτϋϯυϥͷݕ౼
σόΠεཧग़ՙࡁσόΠεͷঢ়ଶΛཧ͢Δ͜ͱͰɺӡ༻࣌ʹ͓͚ΔόοΫΦϑΟεۀͱͯ͠ͷσόΠεཧϑΝʔϜΣΞΞοϓσʔτͷΑ͏ͳ௨ɺྉۚʹؔΘΔ༰Λݕ౼͓ͯ͘͠ͱن͕େنʹͳͬͨͱ͖ʹγεςϜͰରԠ͕ՄೳʹͳΓ·͢ɻΦϯϥΠϯͷσόΠεʁGJSNWFS YZͷͷʁγεςϜؒ࿈ܞঢ়ଶ͍߹Θͤ ࣮ଶͱ%#ͷTZODTIBEPXEJHJUBMUXJO
Α͋͘Δ՝• ࣮ࡍͷσόΠεͱΫϥυࣗࣾϗετʹ͓͚Δཧ༻ͷཧ໊ɺ4*.ͷཧΛ͍ͨ͠• 4*.ͷར༻ྉ͕ߴ͍͚Ͳɺ͜ΕͲ͜ͰΘΕ͍ͯΔσόΠεͩΖ͏ʁ• ར༻ΛΊͨσόΠεͷ4*.ͲΕͩΖ͏• σόΠεࠓΦϯϥΠϯͳͷ͔ʁ• ࠓࢢʹग़͍ͯΔσόΠεͰΘΕ͍ͯΔͷঢ়ଶ• σόΠεͷઃఆมߋɺϑΝʔϜΣΞΞοϓσʔτΛߦ͍͍ͨ• ݸผɺಛఆɺάϧʔϓ୯ҐͳͲͷཧ୯Ґͷઃܭ• ܰͷઃఆมߋ• ΞϓϦέʔγϣϯશମͰͷઃఆมߋ
ղܾࡦ• σόΠεཧ• σόΠεཧ༻ͷ%#ΫϥυαʔϏεͷػೳͷ׆༻ɺ403"$0.ͷ߹ 4*.ϝλαʔϏεͷ׆༻ͳͲ• ࣗͷϢʔεέʔεԿΛத৺ʹσόΠεΛΈΔͷ͔Ͱཧ໊ΫΤϦͷઃܭΛ͢Δ͜ͱ͕ॏཁ• ઃఆมߋϑΝʔϜΣΞΞοϓσʔτ• ΫϥυαʔϏεͷσόΠεཧػೳͰɺઃఆมߋͱ௨ػೳ͕ҰମԽ͍ͯ͠Δͷ͕͋Δ• ঢ়ଶ֬ೝ༻ͷϝοηʔδػೳɺ"1*ͷݕ౼• ϑΝʔϜϑΝΠϧͷஔ͖ॴͳͲͷݕ౼ɿΦϒδΣΫτετϨʔδ 403"$0.)BSWFTU'JMFTͷར༻Λݕ౼ɻオブジェクトストレージを利用する場合はセキュアアクセスの設計も重要
403"$0.)BSWFTU'JMFTΛ׆༻ͨ͠ϑΝʔϜΞοϓσʔτ௨ͷྫ࠷৽'8࣍ि݄࣍࣍Ͱ͍߹Θͤ6QMPBE)BSWFTU'JMFTͰϑΝΠϧͷϝλใͱͯ͠&5BHΛαϙʔτ͍ͯ͠ΔͨΊมߋ͕ಉ͡ύεʹ͍߹ΘͤΛͯ͠มߋ͕͋ͬͨࡍʹͷΈμϯϩʔυ͕Մೳ&5BHʹมߋ͕͋ͬͨࡍʹμϯϩʔυ)BSWFTU'JMFT403"$0.TFSWJDFFOEQPJOU ΫϥυαʔϏεࣗࣾαʔϏεͷΤϯυϙΠϯτྫ'8μϯϩʔυηϯγϯάσʔλͷΞοϓϩʔυར༻͍ͯ͠ΔΤϯυϙΠϯτ
ϦϞʔτίϚϯυϝϯςφϯε*P5σόΠεͷಛੑͱͯ͠ɺଟ͘ͷ߹σόΠεͷϑΟʔυόοΫίϚϯυ࣮ߦΛߦ͍͍ͨέʔεଟ͋͘Γ·͢ɻ͜͜ͰΑ͋͘ΔϑΟʔυόοΫύλʔϯͱཁ݅ʹ͍ͭͯཧ͠·͢ɻ• σόΠεͷঢ়ଶ• ઃఆ• ࠶ىಈσόΠεͷঢ়ଶʁίϚϯυ࣮ߦΛ͍ͨ݁͠ՌDPNNBOE
Α͋͘Δٞ• σόΠεͷঢ়ଶऔಘͳͲσόΠεͷࠓͷঢ়ଶΛऔಘ͍ͨ͠• σόΠεͷઃఆঢ়گ• ͓٬༷͔Βෆௐͷ͍߹Θͤͷ࿈བྷΛݩʹෆఆظͳϩάऔಘNFNPSZEVNQͷऔಘͳͲ࡞ۀϫʔΫϩʔυΛέΞ͍ͨ͠• తͳ(6*ͷૢ࡞ɺ͘͠ෆఆظͳλΠϛϯά͔ͭෆఆظͳίϚϯυͷ࣮ߦΛߦ͍͍ͨ• σόΠεͷଓ• ϩάΠϯ
ղܾࡦ ௨৴ϕʔεͰͷίϚϯυ࣮ߦґཔ• ࣄલʹΓ͍ͨ͜ͱ͕ཧͰ͖͓ͯΓɺίϚϯυ͕ࣄલʹ༻ҙͰ͖Δ• σόΠε04ͷίϚϯυͰ࣮ݱͰ͖Δ• ্ه͕ཧͰ͖͍ͯΔલఏͰɺ.255)551 5$16%1ʹΑΔίϚϯυ࣮ߦͷݕ౼͕Ͱ͖·͢ɻϝοηʔδͷϖΠϩʔυ.255ͷ߹ UPQJDʹίϯςΩετ٧ΊͯɺσόΠε͕ίϚϯυΛ࣮ߦɺ݁ՌΛϦϓϥΠͰ௨͢Δ
ղܾࡦ ϩάΠϯͰͷૢ࡞*171/ɺηΩϡΞτϯωϦϯάαʔϏεͷར༻Λݕ౼͢Δඞཁ͕͋Γ·͢ɻ403"$0.ͷ߹ɺ403"$0.(BUF /BQUFSαʔϏεͷར༻͕ީิͱͳΓ·͢ɻ
͓٬༷γεςϜSORACOM CanalSORACOM DirectSORACOM DoorSORACOM Gateଓ༻αʔόSORACOM Gateਖ਼ͳϢʔβ ΞΫηεΛϦΫΤετʢ4*.*% ϙʔτ ༗ޮظؒʣ άϩʔόϧ*1ͱϙʔτ403"$0./BQUFS ࢦఆͷάϩʔόϧ*1ͱϙʔτʹΞΫηε403"$0.(BUF403"$0./BQUFS
ࢄͷඞཁੑখنͳ͏͕ͪͳ͔ͬͨͣͳͷʹɺσόΠεͷ͕૿͑ΔʹͭΕͯ௨৴ྔɺ௨৴Τϥʔ͕ൃੜ૿Ճ͍ͯ͠ΔɻσʔλΛΓऔΓ͢Δࡍͷ࣌ؒىಈपظىಈΛ࣌ࠁϕʔεʹ͢Δͱॲཧ௨৴͕ඇޮʹͳΔ͜ͱ͕͋ΔɻDSPO EBUBTFOEJGIUUQFSSPS\TMFFQSFUSZ^
Α͋͘Δ՝ ޙͰؾ͕ͭ͜ͱ͕ଟ͍ͷͰٞͰͳ͘՝• ͳͥूத͕ඇޮͳͷ͔• Ϋϥυαʔόͷεέʔϧ؍ͱͯ࣌ؒ͠ߴෛՙͰεέʔϧ͕ؒʹ߹Θͳ͍͜ͱ͕͋Δɻ• όοΫΤϯυͷॲཧྔΛ͑ΔϦΫΤετϦτϥΠ͕ଓ͘ͱαʔϏεμϯى͖ಘΔ• ίετ؍ͱͯ͠ɺશମͱͯ͠ͷ୯Ґ࣌ؒʹඞཁͳॲཧྔ͕૿͑Δɺ௨৴ྔ͕૿͑Δ定刻起動、固定リトライ値の設定retry瞬間的なピークが続き処理が捌ききれない、ピークに合わせたサーバの準備は無駄が多い(オートスケールなども間に合わない)retryデータ取得は定時、送信タイミング/retryに幅を持たせる許容可能な時間の分だけピークを低くできる。バックエンドのリソースも均等に使うことでメリットがでる
ରࡦ• ࢄͷߟ͑ํ• ཚ4FFE+JUUFSʹΑΔࢄΞϧΰϦζϜ• αʔόαΠυ͔ΒͷϨεϙϯεͰͷXBJUࢄɺϝϯςϯεதͷରԠ• ڐ༰Ͱ͖Δσʔλ౸ୡͷ෯ɺ݁Ռ߹ੑͰૹ৴λΠϛϯάʹΒ͖͕ͭ͋ͬͨΑ͍ઃܭͷݕ౼• ϦτϥΠͷߟ͑ํ• ϦτϥΠͷߟ͑ํͱͯ͠ΤΫεϙωϯγϟϧόοΫΦϑࢦؔతޙୀͱ͍͏ߟ͑ํ͕͋Δ• ௨৴ΤϥʔͱϝϯςφϯείʔυΛ͚ΔͳͲΤϥʔʹ͖ͪΜͱҙຯఆٛɺͦΕʹ߹ΘͤͨσόΠεΞΫγϣϯͷ࣮Λ͢Δ
·ͱΊຊ։ൃॳظʹɺΕΒΕ͕ͪͳඇػೳཁ݅ʹϑΥʔΧεΛ͓͍͖ͯͯͤͯͨͩ͞·ͨ͠ɻօ༷͕ΘΕ͍ͯΔzσόΠεzͷఆٛʹΑΓɺຊͷʹ͋Δʹɺͯ·Δͷͯ·Βͳ͍ͷ͕͋Δ͔ͱࢥ͍·͢ͷͰɺνΣοΫͷΑ͏ͳܗͰݟ͍͚ͯͨͩΕͱࢥ͍·͢ɻ
ؔ࿈ηογϣϯͷ͝հ%BZ• σόΠεɺΫϥυͷํ௨৴σβΠϯύλʔϯͱ࣮ફ• %FFQ%JWFແઢςΫϊϩδʔͱ௨৴ϓϩτίϧͱলిྗੑೳ
403"$0.ͷئ͍Ϋϥυ 㱺ଟ͘ͷϏδωεɺ8FCαʔϏε403"$0. 㱺ଟ͘ͷ*P5ϏδωεɺγεςϜͨ͘͞Μͷ*P5ϓϨΠϠʔ͕ੜ·Ε·͢Α͏ʹ
ੈքதͷώτͱϞϊΛͭͳ͛ڞ໐͢Δࣾձ