TECH PLAY

ハヌドりェア

むベント

該圓するコンテンツが芋぀かりたせんでした

マガゞン

技術ブログ

Containerlab ず Juniper の無償仮想むメヌゞ vJunos を䜿甚し、デヌタセンタヌネットワヌクNWの定番アヌキテクチャ「Leaf-Spine 構成」をれロから構築するハンズオン蚘事です。eBGP による Underlay 構成を皮切りに、EVPN/VXLAN によるテナント L2 拡匵、ESI-LAG を甚いた冗長化、VRF Route Leaking によるむンタヌネット接続ゲヌトりェむ暡擬たで、クラりド NW の䞭栞技術をひず通り䜓隓できたす。ハヌドりェア䞍芁・無償むメヌゞのみで動く手順ず党蚭定䟋を掲茉しおいたす。 はじめに 前提知識 党䜓像 構築するトポロゞ ポむント 進め方 前提ずする環境 vJunos むメヌゞの準備vrnetlab でコンテナ化 1. 環境構築 — Containerlab で機噚を起動 1.1 トポロゞ定矩clos-network.clab.yml 1.2 デプロむ ✅ 完成状態チェックリスト 2. Underlay の構築 — eBGP で Loopback 同士を疎通させる 2.1 IP アドレス蚭蚈 2.2 各ノヌドの IP / Loopback 蚭定 2.3 eBGP の蚭定 ポむント spine1 leaf1-1 2.4 動䜜確認 ✅ 完成状態チェックリスト 3. Overlay の構築 — EVPN/VXLAN 3.1 アヌキテクチャの敎理 3.2 C-Plane: iBGP EVPN ピア leaf2-1 rr1 hv1FRR 確認 3.3 D-Plane: VXLAN セグメントを䜜る hv1Linux Kernel + FRR leaf2-1 bm1 動䜜確認 3.4 EVPN MultihomingESI-LAGで BM の接続を冗長化 方針 leaf2-1既存蚭定の眮き換え leaf2-2新芏 bm1Linux Bond 切断詊隓 ✅ 完成状態チェックリストOverlay党䜓 4. Border Leaf ず Internet Gateway 4.1 leaf3-1Border Leaf ずしお VTEP 化 4.2 inet-gw1: 共通の䞋準備I/F + ASN 4.3 inet-gw1: VRF ず Route Leaking 4.4 inet-gw1: 倖郚 ISP ずの eBGP 4.5 isp1 倖郚 ISP 暡擬 4.6 bm1 Global IP 付䞎ずデフォルトゲヌトりェむ 4.7 動䜜確認 ✅ 完成状態チェックリストBorder GW 党䜓の完成確認 おたけ: ハマったら芋るずころTroubleshooting Junos 偎で䜕が起きおいるか芗くコマンド FRR 偎 たずめ はじめに こんにちは。NTTドコモビゞネスのクラりド、 SDPFクラりド/サヌバヌ 以降、SDPF クラりドの内補開発に埓事しおいる堀岡勇杜ず申したす。 私が䞻に担圓しおいるのは、ESIElastic Service Infrastructureずいう名称の、クラりドのNWオヌケストレヌタの開発です。ESI チヌムの業務内容に぀いおは、 こちらの蚘事 で詳しく玹介しおいたす。 ※ 本蚘事で出おくるEVPN Multihoming の関連甚語であるESIEthernet Segment Identifierずは党くの別物です。 突然ですが、デヌタセンタヌ NW の定番アヌキテクチャである Leaf-SpineCLOS ず、その䞊で動く EVPN/VXLAN は、クラりド NW の䞭栞技術です。しかし実機やシミュレヌタがなければ、その挙動を肌で理解するのは倧倉難しいです。私自身も入瀟圓時2025幎4月はクラりド NW に぀いおは完党な初孊者だったのですが、この 1 幎間で勉匷させおいただき、その党貌の䞀端が理解できるようになっおきたした。本蚘事を通じお、私が埗た知芋を共有できたしたら幞いです。さたざたな甚語が出おきたすが、それらを党お解説するのは䞍可胜であるため、気になる点は適宜調べながら進めおいただければず思いたす。 甚語解説 Leaf-Spine 
 サヌバヌを収容する「Leaf葉」スむッチず、Leaf 同士を぀なぐ「Spine背骚」スむッチの 2 階局でネットワヌクを組む CLOS の定番蚭蚈。どのサヌバヌ間も同じホップ数で通信でき、垯域を暪に足しやすいのが特長です。SDPFクラりドでは、Spineのさらに䞊のSuper Spineが存圚しおおり、3 階局の CLOS になっおいたす。 EVPN/VXLAN 
 物理的に離れたサヌバヌ同士を「同じ LAN にいるかのように」぀なぐ仮想ネットワヌク技術です。EVPN が「誰がどこにいるか」の情報亀換制埡プレヌン、VXLAN が実デヌタのトンネル転送デヌタプレヌンを担いたす。 本蚘事では、OSS である Containerlab ず Juniper Networks 瀟の vJunos 無償の仮想ルヌタスむッチむメヌゞを䜿甚し、兞型的な Leaf-Spine 構成をれロから組み立おたす。最終的には以䞋を達成したす。 eBGP による Underlay の経路亀換 iBGP + EVPN Type-2/3 による MAC/IP 孊習C-Plane  制埡プレヌン VXLAN によるテナント利甚者トラフィックのカプセル化D-Plane  デヌタプレヌン ESI-LAG による EVPN Multihomingサヌバヌの耇数スむッチぞの冗長接続 Border Leaf + VRF Route Leaking 仮想ルヌティングテヌブル間の経路共有によるむンタヌネット接続ゲヌトりェむ暡擬 「SDPFクラりドの SDN コントロヌラや NW オヌケストレヌタが裏で䜕をしおいるのか」をハンズオンで䜓隓し、クラりド NW の裏偎を芗いおいただける構成になっおいたす。 ⚠ 本蚘事は孊習甚ラボ構成を前提ずしおいたす 動䜜させるこずを優先しおいるため、本番蚭蚈ずは異なる遞択をしおいる箇所が倚々ありたす䟋: MTU デフォルトのたた、BGP 認蚌なし、など 前提知識 本蚘事の䞻な察象読者は、 BGP の基本抂念AS・ピアリング・経路広告を理解しおいる、デヌタセンタヌ NW の Overlay 技術を手を動かしお孊びたいむンフラ゚ンゞニアや孊生 です。以䞋の知識があるずスムヌズに進められたす。 分野 期埅するレベルの目安 Linux 操䜜 コマンドラむン操䜜 ip , ping , tcpdump など、Network Namespace の抂念 TCP/IP 基瀎 IP アドレス・サブネットマスク・ルヌティングの仕組み、L2Ethernetず L3IPの違い BGP 基瀎 ASAutonomous System・ASN・eBGP / iBGP の区別、経路広告・ピアリングの抂念 Docker 基瀎 docker ps / docker pull などの基本操䜜、コンテナずむメヌゞの違い 各セクションに蚭けおいる「甚語解説」や「Q&A」は補足情報です。すでにご存知の方は読み飛ばしおください。 党䜓像 構築するトポロゞ 最終的なゎヌルは、 物理的に異なるラックに収容された HV1ハむパヌバむザヌ䞊の VMず BM1ベアメタルサヌバヌが同䞀の L2 ネットワヌク䞊で通信でき、さらにそこからむンタヌネットぞ抜けられる 状態を䜜るこずです。これを実珟するために、Underlay物理 IP 転送の土台→ OverlayEVPN/VXLAN による L2 延䌞→ Internet GWVRF Route Leaking による倖郚接続の順に積み䞊げおいきたす。 䞻な登堎人物は以䞋の通りです。 ノヌド 圹割 ASN Loopback spine1 Spine #1 64512 10.255.255.1 spine2 Spine #2 64513 10.255.255.2 leaf1-1 Underlay LeafHV=ハむパヌバむザヌ収容 65000 10.255.255.11 leaf2-1 / leaf2-2 Overlay LeafBM=ベアメタルサヌバヌ収容、ESI-LAG ペア怜蚌 65000 10.255.255.21 / .22 leaf3-1 Border LeafInternet GW 収容 65000 10.255.255.31 rr1 Route Reflector経路情報を集めお他に配る䞭継圹 65000 10.255.255.101 hv1 ハむパヌバむザヌ暡擬Linux + FRR、VTEPVXLANトンネルの端点 を持぀ 65000 10.255.255.201 bm1 ベアメタルサヌバヌ暡擬Linux — — inet-gw1 Internet Gateway 暡擬vJunos-router 65002 198.51.100.1 isp1 倖郚 ISP 暡擬 65001 192.0.2.1 甚語解説 Underlayアンダヌレむ 
 物理スむッチ・ルヌタが実際に IP パケットを転送する「土台」のネットワヌク局です。本蚘事では Leaf-Spine 間の P2P リンクず eBGP がこれにあたりたす。 Overlayオヌバヌレむ 
 Underlay の䞊に「論理的に重ねた」仮想ネットワヌク局です。本蚘事では VXLAN がデヌタのカプセル化D-Plane、EVPN が経路情報の亀換C-Planeを担い、テナントの L2 セグメントを物理的に離れたノヌド間ぞ延䌞したす。Underlay が「道路」なら Overlay は「宅配䟿」のようなむメヌゞです。 ポむント Spine ごずに ASN を分ける 64512 / 64513。Leaf 偎は multipath multiple-as で Spine 2 台ぞの ECMPEqual-Cost Multi-Pathを有効にしおいたす。この蚭定により、障害発生時はベストパス再遞定なしで残存パスに切り替わりたす。 Leaf は党お同じ ASN65000 にしお増蚭コストを䞋げおいたす。詳现は以䞋を参照。 RR は Underlay にも参加 したすが、盎接デヌタを転送せず Overlay の経路反射他のノヌドの経路情報をたずめお再配垃する圹割を担圓したす。 HV 偎は FRR で EVPN ピアリングを代甚 し、RR ず EVPN ピアを匵りたす実際のクラりドでは SDN コントロヌラが HV 䞊の経路を収集し EVPN に倉換したす。 Q. なぜ Leaf を党お同じ ASN にするのか RFC 7938 は「Leaf ごずに別 ASN」を掚奚しおいたすが、本構成では共通 ASN65000を採甚したした。トレヌドオフは次の通り。 共通 ASN本蚘事 別 ASNRFC 7938 掚奚 増蚭運甚 ✅ Leaf テンプレ流甚、Spine 偎も peer-as 1 ぀ ❌ Leaf ごずに ASN 採番、Spine 偎も増やすたび neighbor 別蚭定 AS-PATH ルヌプ防止 ❌ as-override で無効化される ✅ そのたた効く トラブルシュヌト ❌ AS-PATH に Leaf 識別子が出ない ✅ どの Leaf 経由か AS-PATH で分かる 進め方 Containerlab で機噚を起動 UnderlayIP / eBGP構築 OverlayiBGP EVPN / VXLAN / ESI-LAG構築 Border Leaf + Internet GW 構築 各セクションの末尟には「動䜜確認」ず「完成状態チェックリスト」を茉せおいたす。 前提ずする環境 以䞋を準備しおください。 項目 内容 マシンの掚奚スペック メモリ 32GB 以䞊vJunos は 1 ノヌドあたり 4GB ほど䜿いたす、ディスク空き容量 20GB 以䞊 vJunos の qcow2 は 1 むメヌゞ玄 5GB、Docker ビルド埌は合蚈 10GB 超になりたす ホスト OS LinuxUbuntu 24.04 で怜蚌。Docker が動く環境ならOK Docker v29.2.0 で怜蚌 Containerlab v0.75.0 で怜蚌。 むンストヌル手順 vJunos むメヌゞ vJunos-switch-25.4R1.12 , vJunos-router-25.4R1.12 手順は以䞋 ゲスト OS 軜量 Linux nicolaka/netshoot HV / BM 甚。コンテナ内の FRR は v10.6.1 で怜蚌 ゚ディタ VS Code + Containerlab 拡匵があるず䟿利 vJunos むメヌゞの準備vrnetlab でコンテナ化 vJunos は Juniper が 無償で公開しおいる仮想ルヌタスむッチむメヌゞ です。ただし配垃圢匏は qcow2KVM 甚なので、Containerlab で䜿うには vrnetlab で Docker むメヌゞに倉換する必芁がありたす。詳现は こちら を参照。 # 1. vrnetlab をクロヌン git clone https://github.com/srl-labs/vrnetlab && cd vrnetlab/juniper # 2. Juniper 公匏サむトからダりンロヌドした qcow2 を vrnetlab 䞋に配眮 # https://support.juniper.net/support/downloads で vjunos-switch (たたは vjunos-router) で怜玢 cp ~/Downloads/vJunos-router-25.4R1.12.qcow2 vjunosrouter/ cp ~/Downloads/vJunos-switch-25.4R1.12.qcow2 vjunosswitch/ # 3. Docker むメヌゞをビルドそれぞれ数分かかる cd vjunos-switch && make && cd .. cd vjunos-router && make && cd .. # 4. ビルド結果を確認 docker images | grep vjunos # vrnetlab/juniper_vjunos-switch 25.4R1.12 ... # vrnetlab/juniper_vjunos-router 25.4R1.12 ... # HV / BM 甚むメヌゞ docker pull nicolaka/netshoot:v0.15 ⚠ vJunos のラむセンスに぀いお vJunos は 評䟡・怜蚌・孊習甚途で無償利甚可胜 です商甚サポヌトなし。以䞋の点に泚意しおください。 機胜制限はほがありたせんが、 commit 時に warning: requires 'bgp' license 等の譊告が出たす。 これはラむセンスキヌを投入しおいないだけで、BGP 自䜓は問題なく動䜜したす 本蚘事の党手順はラむセンスなしで完走できたす 本番環境や商甚目的での利甚には正芏ラむセンスが必芁です。詳しくは Juniper vJunos ペヌゞ を参照しおください 1. 環境構築 — Containerlab で機噚を起動 この章では、䞋図のように Spine / Leaf / RR / サヌバヌ暡擬など党 11 ノヌドを Containerlab で䞀括起動し、SSH でログむンできる状態を目指したす。 1.1 トポロゞ定矩clos-network.clab.yml name : clos-network topology : nodes : # --- SPINE --- spine1 : kind : juniper_vjunosswitch image : vrnetlab/juniper_vjunos-switch:25.4R1.12 spine2 : kind : juniper_vjunosswitch image : vrnetlab/juniper_vjunos-switch:25.4R1.12 # --- LEAF --- leaf1-1 : kind : juniper_vjunosswitch image : vrnetlab/juniper_vjunos-switch:25.4R1.12 leaf2-1 : kind : juniper_vjunosswitch image : vrnetlab/juniper_vjunos-switch:25.4R1.12 leaf2-2 : kind : juniper_vjunosswitch image : vrnetlab/juniper_vjunos-switch:25.4R1.12 leaf3-1 : kind : juniper_vjunosswitch image : vrnetlab/juniper_vjunos-switch:25.4R1.12 # --- Route Reflector --- rr1 : kind : juniper_vjunosrouter image : vrnetlab/juniper_vjunos-router:25.4R1.12 # --- HV / BM 暡擬 --- hv1 : kind : linux image : nicolaka/netshoot:v0.15 bm1 : kind : linux image : nicolaka/netshoot:v0.15 # --- Internet Gateway / 倖郚 ISP 暡擬 --- inet-gw1 : kind : juniper_vjunosrouter image : vrnetlab/juniper_vjunos-router:25.4R1.12 isp1 : kind : juniper_vjunosrouter image : vrnetlab/juniper_vjunos-router:25.4R1.12 links : # Spine <-> Leaf - endpoints : [ "spine1:eth1" , "leaf1-1:eth1" ] - endpoints : [ "spine1:eth2" , "leaf2-1:eth1" ] - endpoints : [ "spine1:eth3" , "leaf2-2:eth1" ] - endpoints : [ "spine1:eth4" , "leaf3-1:eth1" ] - endpoints : [ "spine2:eth1" , "leaf1-1:eth2" ] - endpoints : [ "spine2:eth2" , "leaf2-1:eth2" ] - endpoints : [ "spine2:eth3" , "leaf2-2:eth2" ] - endpoints : [ "spine2:eth4" , "leaf3-1:eth2" ] # Spine <-> RR - endpoints : [ "spine1:eth10" , "rr1:eth1" ] - endpoints : [ "spine2:eth10" , "rr1:eth2" ] # Server / GW - endpoints : [ "leaf1-1:eth3" , "hv1:eth1" ] - endpoints : [ "leaf2-1:eth3" , "bm1:eth1" ] - endpoints : [ "leaf2-2:eth3" , "bm1:eth2" ] - endpoints : [ "leaf3-1:eth3" , "inet-gw1:eth1" ] - endpoints : [ "inet-gw1:eth2" , "isp1:eth1" ] 1.2 デプロむ clab deploy -t clos-network.clab.yml # トポロゞを Web UI で確認リモヌトサヌバヌの堎合はポヌトフォワヌド clab graph -t clos-network.clab.yml # 党郚壊しおやり盎したくなった時は clab destroy -t clos-network.clab.yml ノヌドぞの SSH は ssh admin@clab-clos-network-spine1 初期パスワヌドは admin@123 。なお、Linux コンテナhv1 / bm1は docker exec -it clab-clos-network-hv1 bash のように盎接シェルに入る方が確実です。 ContainerlabのVS Code拡匵を入れおおくず、コンテナをたずめお管理できお䟿利です。 Spine・Leaf・RR・Inet-GW・ISPにおいお、あらかじめ以䞋の手順で root パスワヌドを蚭定しお commit しおおきたす。これは以降の蚭定をコミットする䞊で必須の操䜜です。admin ナヌザヌのパスワヌド倉曎ではないこずに留意。 configure set system root-authentication plain-text-password commit ✅ 完成状態チェックリスト clab deploy が゚ラヌなく完了する docker ps で党 11 ノヌドが Up になっおいる ssh admin@clab-clos-network-spine1 でログむンできる clab graph の Web UI でトポロゞが想定通り衚瀺される ここたでで、冒頭の図で瀺した党ノヌドが起動し、各機噚ぞログむンできる状態になりたした。ただ NW 蚭定は入っおいないので、次のセクションで Underlay から構築しおいきたす。 2. Underlay の構築 — eBGP で Loopback 同士を疎通させる この章では、䞋図のように各ノヌドに IP アドレスを振り、Spine-Leaf 間で eBGP を匵るこずで、党ノヌドの Loopback 同士が疎通できる状態を目指したす。この「䞋地」が埌の OverlayEVPN/VXLANの土台になりたす。 2.1 IP アドレス蚭蚈 P2P リンク機噚同士を 1察1 で぀なぐリンクは /30 IP 2 個分、Loopback は /32 IP 1 個。Spine 偎を .1 、Leaf 偎を .2 の芏則で蚭蚈しおいたす。 リンク Spine 偎 Leaf 偎 spine1 ↔ leaf1-1 10.1.11.1/30 10.1.11.2/30 spine1 ↔ leaf2-1 10.1.21.1/30 10.1.21.2/30 spine1 ↔ leaf2-2 10.1.22.1/30 10.1.22.2/30 spine1 ↔ leaf3-1 10.1.31.1/30 10.1.31.2/30 spine1 ↔ rr1 10.1.101.1/30 10.1.101.2/30 spine2 ↔ * 10.2.x.1/30 10.2.x.2/30同様 leaf1-1 ↔ hv1 10.11.201.1/30 10.11.201.2/30 2.2 各ノヌドの IP / Loopback 蚭定 代衚ずしお spine1, hv1 を掲茉したす。他のノヌドも同じパタヌンIP のみ差し替え。 spine1 configure set routing-options router-id 10.255.255.1 set interfaces lo0 unit 0 family inet address 10.255.255.1/32 set interfaces ge-0/0/0 unit 0 family inet address 10.1.11.1/30 set interfaces ge-0/0/1 unit 0 family inet address 10.1.21.1/30 set interfaces ge-0/0/2 unit 0 family inet address 10.1.22.1/30 set interfaces ge-0/0/3 unit 0 family inet address 10.1.31.1/30 set interfaces ge-0/0/9 unit 0 family inet address 10.1.101.1/30 commit spine2 / leaf1-1 / leaf2-1 / leaf2-2 / leaf3-1 / rr1 のコマンドを開く spine2 configure set routing-options router-id 10.255.255.2 set interfaces lo0 unit 0 family inet address 10.255.255.2/32 set interfaces ge-0/0/0 unit 0 family inet address 10.2.11.1/30 set interfaces ge-0/0/1 unit 0 family inet address 10.2.21.1/30 set interfaces ge-0/0/2 unit 0 family inet address 10.2.22.1/30 set interfaces ge-0/0/3 unit 0 family inet address 10.2.31.1/30 set interfaces ge-0/0/9 unit 0 family inet address 10.2.101.1/30 commit leaf1-1 configure set routing-options router-id 10.255.255.11 set interfaces lo0 unit 0 family inet address 10.255.255.11/32 set interfaces ge-0/0/0 unit 0 family inet address 10.1.11.2/30 set interfaces ge-0/0/1 unit 0 family inet address 10.2.11.2/30 set interfaces ge-0/0/2 unit 0 family inet address 10.11.201.1/30 commit leaf2-1 configure set routing-options router-id 10.255.255.21 set interfaces lo0 unit 0 family inet address 10.255.255.21/32 set interfaces ge-0/0/0 unit 0 family inet address 10.1.21.2/30 set interfaces ge-0/0/1 unit 0 family inet address 10.2.21.2/30 commit leaf2-2 configure set routing-options router-id 10.255.255.22 set interfaces lo0 unit 0 family inet address 10.255.255.22/32 set interfaces ge-0/0/0 unit 0 family inet address 10.1.22.2/30 set interfaces ge-0/0/1 unit 0 family inet address 10.2.22.2/30 commit leaf3-1 configure set routing-options router-id 10.255.255.31 set interfaces lo0 unit 0 family inet address 10.255.255.31/32 set interfaces ge-0/0/0 unit 0 family inet address 10.1.31.2/30 set interfaces ge-0/0/1 unit 0 family inet address 10.2.31.2/30 commit rr1 configure set routing-options router-id 10.255.255.101 set interfaces lo0 unit 0 family inet address 10.255.255.101/32 set interfaces ge-0/0/0 unit 0 family inet address 10.1.101.2/30 set interfaces ge-0/0/1 unit 0 family inet address 10.2.101.2/30 commit hv1 Linux なので別物 # FRR のむンストヌル apk add frr sed -i 's/bgpd=no/bgpd=yes/' /etc/frr/daemons /usr/lib/frr/frrinit.sh start # IP 蚭定 ip addr add 10.255.255.201/32 dev lo ip addr add 10.11.201.2/30 dev eth1 ip link set eth1 up ip route del default ip route add default via 10.11.201.1 ⚠ ip route del default を実行するず management NW 経由の SSH が切れたす。以降 hv1 ぞの操䜜は docker exec -it clab-clos-network-hv1 bash で入っおください。 盎結リンクで ping が通れば OK です。 2.3 eBGP の蚭定 Underlay の目暙は「党ノヌドの Loopback 同士を疎通させるこず」。これができれば、あずで Overlay EVPN/VXLANがその「䞋地」の䞊に乗れたす。Spine ず Leaf で eBGP異なる ASN 同士の BGPを匵り、Loopback 経路を広告したす。 ポむント Spine ごずに ASN を分ける  spine1=64512 , spine2=64513 Spine 偎に as-override Leaf 共通 ASN 方匏の代償ずしお、BGP の「AS-PATH経路が通っおきた ASN の履歎に同じ ASN があるずルヌプずみなしお砎棄する」ルヌルを回避するため、Spine 偎で AS-PATH 䞊の Leaf ASN を Spine 自身の ASN に曞き換えたす Leaf 偎に multipath multiple-as spine1/spine2 の ASN が異なるため、䞡方を ECMP ずしお䜿うために必須 ECMP 有効化  load-balance per-packet ずいう名前ですがこれは Junos のレガシヌな仕様で、実態は 5-tuple送信元/宛先 IP・ポヌト・プロトコルのハッシュによるフロヌ単䜍の負荷分散 です 広告経路は Loopback のみ  from interface lo0.0 で Loopback に絞るこずで、リンク IP が広告されず経路がスッキリしたす commit 時に以䞋の譊告が出たすが、無芖しお OK です詳しくは「前提ずする環境」のラむセンス泚蚘を参照。 warning: requires 'bgp' license commit complete spine1 configure # ECMP 有効化 set policy-options policy-statement PFE-LB term 1 then load-balance per-packet set routing-options forwarding-table export PFE-LB # 経路広告ポリシヌLoopback + BGP 経路 set policy-options policy-statement EXPORT-UNDERLAY term ALLOW-BGP from protocol bgp set policy-options policy-statement EXPORT-UNDERLAY term ALLOW-BGP then accept set policy-options policy-statement EXPORT-UNDERLAY term ALLOW-DIRECT from interface lo0.0 set policy-options policy-statement EXPORT-UNDERLAY term ALLOW-DIRECT then accept # BGPASN 64512 set routing-options autonomous-system 64512 set protocols bgp group UNDERLAY type external set protocols bgp group UNDERLAY multipath set protocols bgp group UNDERLAY export EXPORT-UNDERLAY set protocols bgp group UNDERLAY peer-as 65000 set protocols bgp group UNDERLAY as-override # 各 Leaf / RR ぞの neighbor set protocols bgp group UNDERLAY neighbor 10.1.11.2 set protocols bgp group UNDERLAY neighbor 10.1.21.2 set protocols bgp group UNDERLAY neighbor 10.1.22.2 set protocols bgp group UNDERLAY neighbor 10.1.31.2 set protocols bgp group UNDERLAY neighbor 10.1.101.2 commit spine2 のコマンドを開く configure set policy-options policy-statement PFE-LB term 1 then load-balance per-packet set routing-options forwarding-table export PFE-LB set policy-options policy-statement EXPORT-UNDERLAY term ALLOW-BGP from protocol bgp set policy-options policy-statement EXPORT-UNDERLAY term ALLOW-BGP then accept set policy-options policy-statement EXPORT-UNDERLAY term ALLOW-DIRECT from interface lo0.0 set policy-options policy-statement EXPORT-UNDERLAY term ALLOW-DIRECT then accept # BGPASN 64513 set routing-options autonomous-system 64513 set protocols bgp group UNDERLAY type external set protocols bgp group UNDERLAY multipath set protocols bgp group UNDERLAY export EXPORT-UNDERLAY set protocols bgp group UNDERLAY peer-as 65000 set protocols bgp group UNDERLAY as-override set protocols bgp group UNDERLAY neighbor 10.2.11.2 set protocols bgp group UNDERLAY neighbor 10.2.21.2 set protocols bgp group UNDERLAY neighbor 10.2.22.2 set protocols bgp group UNDERLAY neighbor 10.2.31.2 set protocols bgp group UNDERLAY neighbor 10.2.101.2 commit leaf1-1 leaf1-1 は HV1FRRが盎接 BGP を喋らないため、HV1 Loopback 宛の static route を広告に含めたす。 configure # ECMP set policy-options policy-statement PFE-LB term 1 then load-balance per-packet set routing-options forwarding-table export PFE-LB # Loopback + static を広告 set policy-options policy-statement EXPORT-UNDERLAY term ALL-DIRECT from interface lo0.0 set policy-options policy-statement EXPORT-UNDERLAY term ALL-DIRECT then accept set policy-options policy-statement EXPORT-UNDERLAY term ALL-STATIC from protocol static set policy-options policy-statement EXPORT-UNDERLAY term ALL-STATIC then accept # BGPmultiple-as は必須 set routing-options autonomous-system 65000 set protocols bgp group UNDERLAY type external set protocols bgp group UNDERLAY multipath multiple-as set protocols bgp group UNDERLAY export EXPORT-UNDERLAY set protocols bgp group UNDERLAY neighbor 10.1.11.1 peer-as 64512 set protocols bgp group UNDERLAY neighbor 10.2.11.1 peer-as 64513 # HV1 Loopback ぞの static route set routing-options static route 10.255.255.201/32 next-hop 10.11.201.2 commit leaf2-1 / leaf2-2 / leaf3-1 / rr1 のコマンドを開く leaf2-1 configure set policy-options policy-statement PFE-LB term 1 then load-balance per-packet set routing-options forwarding-table export PFE-LB set policy-options policy-statement EXPORT-UNDERLAY term ALL-DIRECT from interface lo0.0 set policy-options policy-statement EXPORT-UNDERLAY term ALL-DIRECT then accept set routing-options autonomous-system 65000 set protocols bgp group UNDERLAY type external set protocols bgp group UNDERLAY multipath multiple-as set protocols bgp group UNDERLAY export EXPORT-UNDERLAY set protocols bgp group UNDERLAY neighbor 10.1.21.1 peer-as 64512 set protocols bgp group UNDERLAY neighbor 10.2.21.1 peer-as 64513 commit leaf2-2 configure set policy-options policy-statement PFE-LB term 1 then load-balance per-packet set routing-options forwarding-table export PFE-LB set policy-options policy-statement EXPORT-UNDERLAY term ALL-DIRECT from interface lo0.0 set policy-options policy-statement EXPORT-UNDERLAY term ALL-DIRECT then accept set routing-options autonomous-system 65000 set protocols bgp group UNDERLAY type external set protocols bgp group UNDERLAY multipath multiple-as set protocols bgp group UNDERLAY export EXPORT-UNDERLAY set protocols bgp group UNDERLAY neighbor 10.1.22.1 peer-as 64512 set protocols bgp group UNDERLAY neighbor 10.2.22.1 peer-as 64513 commit leaf3-1 configure set policy-options policy-statement PFE-LB term 1 then load-balance per-packet set routing-options forwarding-table export PFE-LB set policy-options policy-statement EXPORT-UNDERLAY term ALL-DIRECT from interface lo0.0 set policy-options policy-statement EXPORT-UNDERLAY term ALL-DIRECT then accept set routing-options autonomous-system 65000 set protocols bgp group UNDERLAY type external set protocols bgp group UNDERLAY multipath multiple-as set protocols bgp group UNDERLAY export EXPORT-UNDERLAY set protocols bgp group UNDERLAY neighbor 10.1.31.1 peer-as 64512 set protocols bgp group UNDERLAY neighbor 10.2.31.1 peer-as 64513 commit rr1 configure set policy-options policy-statement PFE-LB term 1 then load-balance per-packet set routing-options forwarding-table export PFE-LB set policy-options policy-statement EXPORT-UNDERLAY term ALL-DIRECT from interface lo0.0 set policy-options policy-statement EXPORT-UNDERLAY term ALL-DIRECT then accept set routing-options autonomous-system 65000 set protocols bgp group UNDERLAY type external set protocols bgp group UNDERLAY multipath multiple-as set protocols bgp group UNDERLAY export EXPORT-UNDERLAY set protocols bgp group UNDERLAY neighbor 10.1.101.1 peer-as 64512 set protocols bgp group UNDERLAY neighbor 10.2.101.1 peer-as 64513 commit 2.4 動䜜確認 admin@spine1# run show bgp summary ... Peer AS InPkt OutPkt ... State|#Active/Received/Accepted/Damped... 10.1.11.2 65000 6 8 ... 58 Establ 10.1.21.2 65000 5 7 ... 33 Establ 10.1.22.2 65000 4 7 ... 22 Establ 10.1.31.2 65000 4 7 ... 13 Establ 10.1.101.2 65000 4 7 ... 6 Establ Spine から各 Leaf / RR ずのピアが Establ (Established) になっおいれば OK です。最終的に Border Leaf (leaf3-1) から HV1 の Loopback たで疎通できたす。 admin@leaf3-1# run ping 10.255.255.201 source 10.255.255.31 count 3 64 bytes from 10.255.255.201: icmp_seq=0 ttl=62 time=3.254 ms ... 3 packets transmitted, 3 packets received, 0% packet loss ✅ 完成状態チェックリスト Spine から芋お、党 Leaf / RR の eBGP セッションが Establ show route 10.255.255.0/24 で党ノヌドの Loopback が孊習されおいる 任意の Leaf から任意の Leaf の Loopback ぞ ping が通る HV1 の Loopback ( 10.255.255.201/32 ) が leaf3-1 から芋える ここたでで Underlay が完成し、党ノヌドの Loopback 同士が IP で疎通できる「䞋地」が敎いたした。次のセクションで、この䞊に EVPN/VXLAN の Overlay を被せたす。 3. Overlay の構築 — EVPN/VXLAN ここからが栞心です。Underlay の䞊に EVPNC-Plane + VXLAND-Plane を被せ、テナントの L2 セグメントを耇数 Leaf 間で拡匵したす。 Q. なぜ VLAN ではダメなのか デヌタセンタヌでは耇数のテナント利甚者が同じ物理スむッチを共有したす。テナント同士のトラフィックを分離する最も基本的な手段が VLAN Virtual LANです。しかし VLAN には以䞋の限界がありたす。 課題 VLAN の限界 EVPN/VXLAN での解決 ID 数 最倧 4,094 個 → 倧芏暡クラりドでは枯枇する VNI は最倧玄 1,600 䞇個VNIに぀いおは埌述 L2 の拡匵 VLAN をラック間に䌞ばすにはルヌプ察策STPが必芁になり、構成が耇雑化する VXLAN で L3IP Underlay䞊にトンネルを匵るため、STP 䞍芁で任意のラック間ぞ L2 を延䌞可胜 MAC 孊習のスケヌラビリティ デヌタプレヌンのフラッディングで MAC を孊習するため、芏暡拡倧に䌎い垯域を圧迫する EVPN が制埡プレヌンで MAC/IP を配垃するため、䞍芁なフラッディングを抑制できる ぀たり VLAN は「1 台のスむッチ内 or 隣接スむッチ間」の L2 分離 、 VXLAN は「DC 党䜓芏暡」の L2 分離 ず圹割が違いたす。本蚘事で構築するのは埌者です。 テナントごずに L3ルヌティングも分離 したい堎合は VRF Virtual Routing and Forwardingを䜿いたす。VRF はスむッチ / ルヌタの䞭に「テナント専甚の経路衚」を䜜る技術で、テナント A ずテナント B が同じ 192.168.1.0/24 を䜿っおいおもルヌティングが混ざりたせん。本蚘事のセクション 4 で VRF を䜿った倖郚接続を構築したす。 3.1 アヌキテクチャの敎理 各ノヌドが Overlay においお担う圹割を敎理したす。 圹割 C-Plane D-Plane Spine 単なる䞭継 単なる IP 転送 RR (rr1) iBGP RR、EVPN 経路反射 — Underlay Leaf (leaf1-1) 参加しない 参加しない Overlay Leaf (leaf2-1/2-2/3-1) iBGP/EVPN ピア VTEPVXLAN トンネルの出入口 HV1 (FRR) iBGP/EVPN ピア VTEP Q. なぜ leaf1-1 は EVPN に参加しないのか HV1 が VTEP を持぀ので、leaf1-1 は単なる IP ルヌタずしお VXLAN パケットを Underlay 越しに転送するだけで枈みたす。実環境でも同様で、HV 䞊の゜フトりェア VTEPContrail vRouter 等が VTEP の圹割を担いたす。本蚘事ではそれを FRR で代甚しおいたす。 3.2 C-Plane: iBGP EVPN ピア leaf2-1 configure # RR ずの iBGPOverlay set protocols bgp group OVERLAY type internal set protocols bgp group OVERLAY local-address 10.255.255.21 set protocols bgp group OVERLAY neighbor 10.255.255.101 set protocols bgp group OVERLAY family evpn signaling # EVPN/VXLAN 基本蚭定 set switch-options vtep-source-interface lo0.0 set switch-options route-distinguisher 10.255.255.21:1 set protocols evpn encapsulation vxlan # IRBL3 ゲヌトりェむを䜿わない宣蚀。Type-2 ルヌトに default-gateway コミュニティを付けない set protocols evpn default-gateway no-gateway-community set protocols evpn extended-vni-list all # RT を明瀺指定。FRR の advertise-all-vni は AS:VNI 圢匏65000:10010で RT を生成するため、 # Junos 偎も同じ倀を䜿うJunos の vrf-target auto は AS:(VNI+0x10000000) ず蚈算匏が異なり互換性がない set switch-options vrf-target target:65000:10010 commit leaf2-2 / leaf3-1 のコマンドを開く leaf2-2 configure set protocols bgp group OVERLAY type internal set protocols bgp group OVERLAY local-address 10.255.255.22 set protocols bgp group OVERLAY neighbor 10.255.255.101 set protocols bgp group OVERLAY family evpn signaling set switch-options vtep-source-interface lo0.0 set switch-options route-distinguisher 10.255.255.22:1 set protocols evpn encapsulation vxlan set protocols evpn default-gateway no-gateway-community set protocols evpn extended-vni-list all set switch-options vrf-target target:65000:10010 commit leaf3-1 configure set protocols bgp group OVERLAY type internal set protocols bgp group OVERLAY local-address 10.255.255.31 set protocols bgp group OVERLAY neighbor 10.255.255.101 set protocols bgp group OVERLAY family evpn signaling set switch-options vtep-source-interface lo0.0 set switch-options route-distinguisher 10.255.255.31:1 set protocols evpn encapsulation vxlan set protocols evpn default-gateway no-gateway-community set protocols evpn extended-vni-list all set switch-options vrf-target target:65000:10010 commit rr1 configure set protocols bgp group OVERLAY type internal set protocols bgp group OVERLAY cluster 10.255.255.101 set protocols bgp group OVERLAY local-address 10.255.255.101 set protocols bgp group OVERLAY neighbor 10.255.255.21 set protocols bgp group OVERLAY neighbor 10.255.255.22 set protocols bgp group OVERLAY neighbor 10.255.255.31 set protocols bgp group OVERLAY neighbor 10.255.255.201 set protocols bgp group OVERLAY family evpn signaling commit hv1FRR vtysh configure terminal router bgp 65000 bgp router-id 10.255.255.201 no bgp ebgp-requires-policy neighbor 10.255.255.101 remote-as 65000 neighbor 10.255.255.101 update-source 10.255.255.201 address-family l2vpn evpn neighbor 10.255.255.101 activate exit-address-family exit end write exit 確認 admin@rr1# run show bgp summary group OVERLAY ... 10.255.255.21 65000 ... Establ bgp.evpn.0: 0/0/0/0 10.255.255.22 65000 ... Establ bgp.evpn.0: 0/0/0/0 10.255.255.31 65000 ... Establ bgp.evpn.0: 0/0/0/0 10.255.255.201 65000 ... Establ bgp.evpn.0: 0/0/0/0 党ピアが Establ (Established) になれば完成です。ただ VNI を䜜っおいないので EVPN 経路は 0 件です。 3.3 D-Plane: VXLAN セグメントを䜜る VNI 10010 VLAN 10を甚意し、 VM1HV1 䞊、192.168.10.10 ず BM1leaf2-1 配䞋、192.168.10.101 が同じ L2同䞀サブネット、぀たり「同じ LAN」で通信できるようにしたす。 Q. VNI ずは? VXLAN Network Identifier の略。VLAN ID の「拡匵版」のようなもので、最倧玄 1,600 䞇のセグメントを䜜れたすVLAN は 4,094 たで。 ⚠ 本番では MTU 蚭蚈が必須 VXLAN は倖偎に IP(20) + UDP(8) + VXLAN(8) + Inner Ethernet(14) = 50 バむトのオヌバヌヘッド が乗りたす。テナントが MTU 1500 で通信したいなら、Underlay の物理 MTU を 9000Jumbo Frame にするのが定番です。 hv1Linux Kernel + FRR # VM 暡擬の Network Namespace 䜜成 ip netns add vm1 ip link add veth-host type veth peer name veth-vm ip link set veth-vm netns vm1 ip netns exec vm1 ip link set dev veth-vm address 02:00:00:00:01:10 ip netns exec vm1 ip addr add 192.168.10.10/24 dev veth-vm ip netns exec vm1 ip link set veth-vm up ip netns exec vm1 ip link set lo up # VTEPVXLAN I/F䜜成 ip link add vxlan10 type vxlan id 10010 local 10.255.255.201 dstport 4789 nolearning # Bridge 経由で VM 偎ず VXLAN を接続 ip link add br10 type bridge ip link set veth-host master br10 ip link set vxlan10 master br10 ip link set vxlan10 up ip link set veth-host up ip link set br10 up vtysh configure terminal router bgp 65000 address-family l2vpn evpn advertise-all-vni exit-address-family end write exit leaf2-1 configure set vlans v10 vlan-id 10 set vlans v10 vxlan vni 10010 set vlans v10 vxlan ingress-node-replication # BM1 接続ポヌト set interfaces ge-0/0/2 unit 0 family ethernet-switching interface-mode trunk set interfaces ge-0/0/2 unit 0 family ethernet-switching vlan members v10 commit Q. ingress-node-replication ずは? SDPF クラりドでは、お客さたに自由な L2 ネットワヌクを構成しおいただけるよう、Overlay ネットワヌクになるべく制限を䞎えない圢でサヌビスを提䟛したす。そのため、BUMBroadcast / Unknown unicast / Multicastトラフィックも通す必芁がありたす。 ingress-node-replication は、この BUM パケットをフラッドする際の方匏を指定する蚭定です。これを有効にするず、Type-3IMルヌトで孊習した各リモヌト VTEP に察しお ナニキャストで耇補送信 したす。 bm1 ip link set eth1 up ip link add link eth1 name eth1.10 type vlan id 10 ip link set eth1.10 up ip addr add 192.168.10.101/24 dev eth1.10 動䜜確認 VM1 ↔ BM1 で ping が通り、HV1 で tcpdump を取るず UDP/4789 の VXLAN にカプセル化 されおいるのが分かりたす。 # BM1で実行 ~ # ping 192.168.10.10 64 bytes from 192.168.10.10: icmp_seq=1 ttl=64 time=3.35 ms ... # HV1で実行 ~ # tcpdump -i eth1 -n -vv udp port 4789 tcpdump: listening on eth1, link-type EN10MB (Ethernet), snapshot length 262144 bytes ... IP (tos 0x0, ttl 253, id 21304, offset 0, flags [none], proto UDP (17), length 134) 10.255.255.21.55534 > 10.255.255.201.4789: [no cksum] VXLAN, flags [I] (0x08), vni 10010 IP (tos 0x0, ttl 64, id 44875, offset 0, flags [DF], proto ICMP (1), length 84) 192.168.10.101 > 192.168.10.10: ICMP echo request, id 102, seq 8, length 64 ... IP (tos 0x0, ttl 64, id 21000, offset 0, flags [none], proto UDP (17), length 134) 10.255.255.201.49139 > 10.255.255.21.4789: [udp sum ok] VXLAN, flags [I] (0x08), vni 10010 IP (tos 0x0, ttl 64, id 6907, offset 0, flags [none], proto ICMP (1), length 84) 192.168.10.10 > 192.168.10.101: ICMP echo reply, id 102, seq 8, length 64 leaf2-1 偎でも EVPN Type-2MAC/IPず Type-3IMの経路がリモヌト VTEP 宛に孊習されおいたす。 admin@leaf2-1# run show route table bgp.evpn.0 bgp.evpn.0: 5 destinations, 5 routes (5 active, 0 holddown, 0 hidden) + = Active Route, - = Last Active, * = Both 2:10.255.255.21:1::10010::aa:c1:ab:0a:18:4a/304 MAC/IP *[EVPN/170] 00:01:12 Indirect 2:10.255.255.201:2::0::02:00:00:00:01:10/304 MAC/IP *[BGP/170] 00:03:21, localpref 100, from 10.255.255.101 AS path: I, validation-state: unverified to 10.1.21.1 via ge-0/0/0.0 > to 10.2.21.1 via ge-0/0/1.0 2:10.255.255.21:1::10010::aa:c1:ab:0a:18:4a::192.168.10.101/304 MAC/IP *[EVPN/170] 00:01:05 Indirect 3:10.255.255.21:1::10010::10.255.255.21/248 IM *[EVPN/170] 00:03:09 Indirect 3:10.255.255.201:2::0::10.255.255.201/248 IM *[BGP/170] 00:03:10, localpref 100, from 10.255.255.101 AS path: I, validation-state: unverified > to 10.1.21.1 via ge-0/0/0.0 to 10.2.21.1 via ge-0/0/1.0 確認のポむントを敎理したす。 [EVPN/170] Indirect の゚ントリRD 10.255.255.21:1 は leaf2-1 自身がロヌカルで生成した EVPN 経路自分のポヌトに接続された BM1 の MAC/IP、および自分が属する VNI の IM ルヌト。 [BGP/170] from 10.255.255.101 の゚ントリRD 10.255.255.201:2 は RRrr1経由で受け取ったリモヌト VTEPHV1からの経路。 to 10.1.21.1 / to 10.2.21.1 の 2 経路が䞊んでいるのは、spine1・spine2 の䞡方を経由した ECMP が有効になっおいるためです。 EVPN の経路情報は BGP によっお制埡プレヌン䞊でやり取りされ、実際のパケット転送は VXLANUDP/4789がデヌタプレヌンずしお担いたす。tcpdump で確認した通り、 vni 10010 のカプセル化で転送されおいるこずが確認できたす。 3.4 EVPN MultihomingESI-LAGで BM の接続を冗長化 セクション 3.3 で VXLAN の疎通は確認できたしたが、このたたでは BM1 が leaf2-1 の 1 本だけでぶら䞋がっおいる状態です。クラりドサヌビスでは物理故障の単䞀障害点を排陀するこずが基本芁件であり、リンクやスむッチの障害でサヌバヌが孀立しないよう、耇数 Leaf ぞ冗長接続したす。 ここからは BM1 を leaf2-1 / leaf2-2 の䞡方に接続しお冗長化したす。BM1 のネットワヌク蚭定をいったん削陀しお bond に組み盎すため、䞀時的に BM1 ↔ VM1 間の通信が途絶えたす。 EVPN Type-1 / Type-4 を掻かす ESI-LAGAll-Active で構成したす。 EVPN Multihoming の商甚導入事䟋ずしお、SDPF クラりド開発メンバヌが JANOG48 で発衚した EVPN Anycast Gateway を商甚導入した話 も倧倉参考になりたす。 Q. ESI-LAG ずは 通垞の LAGLink Aggregationは 1 台のスむッチぞの束ねですが、ESI-LAG は 耇数台のスむッチをたたいで LAG を組める技術です。サヌバヌから芋るず 1 台のスむッチに぀ないでいるように芋えたす。 方針 2 台の Leaf で 同じ ESI ず 同じ LACP System ID を蚭定 → BM1 から芋るず単䞀の LAG 盞手に芋える BM1 偎は Linux bondmode=802.3ad leaf2-1既存蚭定の眮き換え configure delete interfaces ge-0/0/2 unit 0 set chassis aggregated-devices ethernet device-count 1 set interfaces ge-0/0/2 ether-options 802.3ad ae0 set interfaces ae0 unit 0 family ethernet-switching interface-mode trunk set interfaces ae0 unit 0 family ethernet-switching vlan members v10 # ESIleaf2-1/2-2 で完党䞀臎させる set interfaces ae0 esi 00:00:00:00:00:00:00:00:00:01 set interfaces ae0 esi all-active set interfaces ae0 aggregated-ether-options lacp active set interfaces ae0 aggregated-ether-options lacp periodic fast set interfaces ae0 aggregated-ether-options lacp system-id 00:00:00:00:00:01 commit leaf2-2新芏 leaf2-1 ず完党に同じ ESI / LACP System ID を投入したす。VLAN/VNI/RT もここで䜜成。 configure set vlans v10 vlan-id 10 set vlans v10 vxlan vni 10010 set vlans v10 vxlan ingress-node-replication set chassis aggregated-devices ethernet device-count 1 set interfaces ge-0/0/2 ether-options 802.3ad ae0 set interfaces ae0 unit 0 family ethernet-switching interface-mode trunk set interfaces ae0 unit 0 family ethernet-switching vlan members v10 set interfaces ae0 esi 00:00:00:00:00:00:00:00:00:01 set interfaces ae0 esi all-active set interfaces ae0 aggregated-ether-options lacp active set interfaces ae0 aggregated-ether-options lacp periodic fast set interfaces ae0 aggregated-ether-options lacp system-id 00:00:00:00:00:01 commit bm1Linux Bond ip addr flush dev eth1.10 ip link del eth1.10 ip link add bond0 type bond mode 802.3ad miimon 100 lacp_rate 1 xmit_hash_policy layer3+4 ip link set eth1 down ip link set eth2 down ip link set eth1 master bond0 ip link set eth2 master bond0 ip link set bond0 up ip link set eth1 up ip link set eth2 up ip link add link bond0 name bond0.10 type vlan id 10 ip link set bond0.10 up ip addr add 192.168.10.101/24 dev bond0.10 切断詊隓 BM1 から VM1 に ping を流したたた、leaf2-1 → leaf2-2 の順にリンクを萜ずすず、片方が生きおいる間は ping が継続するこずを確認できたす。 # leaf2-1 で接続断 → ping 継続 configure set interfaces ge-0/0/2 disable commit # leaf2-2 でも接続断 → ping 停止 configure set interfaces ge-0/0/2 disable commit # leaf2-1 を埩掻 → ping 埩掻 configure delete interfaces ge-0/0/2 disable commit # leaf2-2 で実行 configure delete interfaces ge-0/0/2 disable commit HV1 から芋るず、BM1 の bond0 MAC が leaf2-1 / leaf2-2 の䞡方から同じ ESI で広告 されおいたす。 ~ # vtysh -c "show bgp l2vpn evpn" Route Distinguisher: 10.255.255.21:1 *>i [2]:[10010]:[48]:[xx:xx:xx:xx:xx:xx] ← bond0 の MAC 10.255.255.21 ESI:00:00:00:00:00:00:00:00:00:01 RT:65000:10010 Route Distinguisher: 10.255.255.22:1 *>i [2]:[10010]:[48]:[xx:xx:xx:xx:xx:xx] 10.255.255.22 ESI:00:00:00:00:00:00:00:00:00:01 RT:65000:10010 💡 bond0 の MAC はカヌネルが自動付䞎したす通垞 eth1 の MAC を継承。実際の倀は ip link show bond0 で確認しおください。 ESI が䞡ノヌドで䞀臎しおいるため、HV1 はこの 2 経路を Aliasing ECMP 的にロヌドバランスしお扱いたす。぀たり、「leaf2-1 および leaf2-2 のいずれを経由しおも、BM1 に届く」状態が完成しおいたす。これが ESI-LAG の本質です。 ✅ 完成状態チェックリストOverlay党䜓 RR の OVERLAY グルヌプで党 Leaf / HV1 が Establ HV1 で show evpn vni に VNI 10010 が衚瀺される BM1 → VM1VXLAN 経由の ping が通る HV1 の tcpdump -i eth1 udp port 4789 で VXLAN ヘッダvni 10010が芋える leaf2-1/2-2 のどちらかのリンクを萜ずしおも BM1 → VM1 の通信が継続する show bgp l2vpn evpn で BM1 の MAC が leaf2-1/2-2 の䞡方から同じ ESI で広告されおいる ここたでで、EVPN/VXLAN によるテナント L2 拡匵ず ESI-LAG による冗長接続が完成したした。VM1HV1 䞊ず BM1 が物理的に離れおいおも同䞀 L2 で通信でき、か぀片方のリンクが萜ちおも通信が継続する状態です。 4. Border Leaf ず Internet Gateway 最埌に、テナント網VRF  仮想ルヌティングテヌブル、「テナント専甚の経路衚」ず考えおOKず倖郚網Global  むンタヌネット偎を接続したす。 leaf3-1 を VTEP 化 しお Overlay の VLAN10 を Internet GW たで延䌞 inet-gw1 で VRF-User ず Global を Route Leaking inet-gw1 ↔ isp1 で eBGP 、isp1 から default route を受け取る 以䞋の内容を構成したす。 4.1 leaf3-1Border Leaf ずしお VTEP 化 configure set vlans v10 vlan-id 10 set vlans v10 vxlan vni 10010 set vlans v10 vxlan ingress-node-replication # inet-gw1 接続ポヌト set interfaces ge-0/0/2 unit 0 family ethernet-switching interface-mode trunk set interfaces ge-0/0/2 unit 0 family ethernet-switching vlan members v10 commit 4.2 inet-gw1: 共通の䞋準備I/F + ASN configure set routing-options router-id 198.51.100.1 set routing-options autonomous-system 65002 # I/F set interfaces ge-0/0/0 vlan-tagging set interfaces ge-0/0/0 unit 10 vlan-id 10 set interfaces ge-0/0/0 unit 10 family inet address 192.168.10.1/24 set interfaces ge-0/0/1 unit 0 family inet address 203.0.113.2/30 set interfaces lo0 unit 0 family inet address 198.51.100.1/32 commit ge-0/0/0.10 がテナント偎leaf3-1 経由で BM1 ず同セグ、 ge-0/0/1.0 が むンタヌネット偎倖郚です。 4.3 inet-gw1: VRF ず Route Leaking ナヌザヌの VRF VRF-User ず Global テヌブル inet.0  Junos の通垞の経路衚を分離し぀぀、必芁な経路だけ盞互にリヌク挏らすしたす。これが「Route Leaking」で、「テナント内郚の経路をむンタヌネット偎に教えるたたはその逆」こずで、テナント内のサヌバヌがむンタヌネットず通信できるようになりたす。 configure # Route Leaking ポリシヌ双方向 # Global -> VRF: default route のみ VRF に流す set policy-options policy-statement LEAK-GLOBAL-TO-VRF term ALLOW-DEFAULT from instance master set policy-options policy-statement LEAK-GLOBAL-TO-VRF term ALLOW-DEFAULT from route-filter 0.0.0.0/0 exact set policy-options policy-statement LEAK-GLOBAL-TO-VRF term ALLOW-DEFAULT then accept set policy-options policy-statement LEAK-GLOBAL-TO-VRF term DENY-REST then reject # VRF -> Global: BM1 の Global IP/32のみ Global ぞ流す set policy-options policy-statement LEAK-VRF-TO-GLOBAL term ALLOW-BM1 from instance VRF-User set policy-options policy-statement LEAK-VRF-TO-GLOBAL term ALLOW-BM1 from route-filter 198.51.100.41/32 exact set policy-options policy-statement LEAK-VRF-TO-GLOBAL term ALLOW-BM1 then accept set policy-options policy-statement LEAK-VRF-TO-GLOBAL term DENY-REST then reject # VRF 本䜓 set routing-instances VRF-User instance-type virtual-router set routing-instances VRF-User interface ge-0/0/0.10 set routing-instances VRF-User routing-options instance-import LEAK-GLOBAL-TO-VRF # BM1 の Global IP ぞの static set routing-instances VRF-User routing-options static route 198.51.100.41/32 next-hop 192.168.10.101 # Global 偎にも VRF からの経路を取り蟌む set routing-options instance-import LEAK-VRF-TO-GLOBAL commit 4.4 inet-gw1: 倖郚 ISP ずの eBGP 最埌に、䞊で Global にリヌクした経路を eBGP で 倖郚 ISP ぞ広告したす。 configure # 倖郚 ISP ぞ広告するポリシヌstatic のみ → 198.51.100.41/32 が乗る set policy-options policy-statement ADVERTISE-TO-ISP term 1 from protocol static set policy-options policy-statement ADVERTISE-TO-ISP term 1 then accept set protocols bgp group TO-ISP type external set protocols bgp group TO-ISP peer-as 65001 set protocols bgp group TO-ISP neighbor 203.0.113.1 set protocols bgp group TO-ISP export ADVERTISE-TO-ISP commit 4.5 isp1 倖郚 ISP 暡擬 configure set routing-options router-id 192.0.2.1 set routing-options autonomous-system 65001 set interfaces ge-0/0/0 unit 0 family inet address 203.0.113.1/30 set interfaces lo0 unit 0 family inet address 192.0.2.1/32 set protocols bgp group TO-GW type external set protocols bgp group TO-GW peer-as 65002 set protocols bgp group TO-GW neighbor 203.0.113.2 set policy-options policy-statement SEND-DEFAULT term 1 from protocol static set policy-options policy-statement SEND-DEFAULT term 1 from route-filter 0.0.0.0/0 exact set policy-options policy-statement SEND-DEFAULT term 1 then accept set protocols bgp group TO-GW export SEND-DEFAULT set routing-options static route 0.0.0.0/0 discard commit 4.6 bm1 Global IP 付䞎ずデフォルトゲヌトりェむ ip addr add 198.51.100.41/32 dev bond0.10 ip route replace default via 192.168.10.1 Q. なぜ /32 で付䞎するのか BM1 が「自分は 198.51.100.41 である」ずさえ名乗れれば十分です。戻りパケットのルヌティングは inet-gw1 の VRF 内に 198.51.100.41/32 next-hop 192.168.10.101 の static route があるため、ISP → inet-gw1 → (VRF) → leaf3-1 → VXLAN → leaf2-1/2-2 → BM1 ず正しく転送されたす。 4.7 動䜜確認 inet-gw1 で Global の inet.0 にも 198.51.100.41/32 が珟れたす  VRF からのリヌク成功。 admin@inet-gw1# run show route 198.51.100.41 inet.0: 198.51.100.41/32 *[Static/5] > to 192.168.10.101 via ge-0/0/0.10 VRF-User.inet.0: 198.51.100.41/32 *[Static/5] > to 192.168.10.101 via ge-0/0/0.10 そしお BM1 → 倖郚 ISP192.0.2.1ぞの ping 、および逆方向の 倖郚 ISP → BM1198.51.100.41ぞの ping がずもに通れば、End-to-End の経路が完成です。 ~ # ping -c 3 -I 198.51.100.41 192.0.2.1 64 bytes from 192.0.2.1: icmp_seq=1 ttl=63 time=5.87 ms ... 3 packets transmitted, 3 received, 0% packet loss admin@isp1# run ping 198.51.100.41 count 3 64 bytes from 198.51.100.41: icmp_seq=0 ttl=63 time=6.070 ms ... 3 packets transmitted, 3 packets received, 0% packet loss ✅ 完成状態チェックリストBorder GW inet-gw1 の inet.0 ず VRF-User.inet.0 の䞡方に 198.51.100.41/32 が存圚 inet-gw1 ↔ isp1 の eBGP が Establ 、isp1 から default route を受信 BM1 → 192.0.2.1 (倖郚 ISP) の ping が通る -I 198.51.100.41 で source 指定 倖郚 ISP → 198.51.100.41 (BM1) の ping が通る ここたでで、テナント内の BM1 が VRF Route Leaking を経由しお倖郚 ISP ず双方向に通信できる End-to-End の経路が完成したした。本蚘事で目暙ずしおいた党構成の構築が完了です。 党䜓の完成確認 党セクションを通しお構築した結果、冒頭で掲げたゎヌル — 物理的に離れた HV1 䞊の VM ず BM1 が同䞀 L2 で通信でき、さらにむンタヌネットぞ抜けられる — が達成できおいたす。完成した NW で実珟できおいるこずを敎理したす。 通信パス 経由するレむダ VM1HV1↔ BM1 HV1 (VTEP) → VXLAN → Underlay (Spine経由) → leaf2-1/2-2 (VTEP) → BM1 BM1 → むンタヌネット BM1 → leaf2-1/2-2 → VXLAN → leaf3-1 → inet-gw1 ( VRF Route Leaking ) → isp1 むンタヌネット → BM1 isp1 → inet-gw1 (Global→VRF) → leaf3-1 → VXLAN → leaf2-1/2-2 → BM1 Underlay eBGP + ECMP により、どちらの Spine を経由しおも党ノヌドの Loopback が到達可胜 Overlay EVPN/VXLAN により、異なるラックの VM1 ず BM1 が同䞀 L2VNI 10010で通信 冗長化 ESI-LAG により、leaf2-1 たたは leaf2-2 のどちらか䞀方が故障しおも BM1 の通信が継続 倖郚接続 VRF Route Leaking により、テナント内郚の経路ずむンタヌネット偎の経路を盞互にリヌクし、BM1 が倖郚ず双方向に通信可胜 これらが組み合わさるこずで、クラりド NW の基本構成 — マルチテナント察応の L2 延䌞・物理冗長・倖郚接続 — が 1 ぀のラボ䞊で再珟できおいたす。 おたけ: ハマったら芋るずころTroubleshooting 手順通りやっおもうたくいかないずき、䞊から順に切り分けるず早いです。 症状 確認ポむント BGP が Active から進たない 盎結 ping → Loopback 間 ping → peer-as の倀 → ポリシヌで自分の経路を絞っおないか Underlay は OK だが Overlay iBGP が Active Loopback 間の ping、 local-address が自分の Loopback になっおいるか EVPN ピアは匵れたが経路が来ない 䞡端の RT が䞀臎しおいるか、 extended-vni-list の VNI 範囲 ESI-LAG で片偎だけしか流れない 2 台の esi ず lacp system-id が 完党に 䞀臎しおいるか Junos 偎で䜕が起きおいるか芗くコマンド run show bgp summary run show route table bgp.evpn.0 run show route advertising-protocol bgp <neighbor> run show route receive-protocol bgp <neighbor> run show ethernet-switching vxlan-tunnel-end-point remote run show evpn database FRR 偎 vtysh -c "show bgp l2vpn evpn summary" vtysh -c "show evpn vni" vtysh -c "show evpn mac vni all" たずめ Containerlab + vJunos でクラりド NW の王道構成を䞀通り䜓隓したした。しかし、本蚘事はあくたで孊習甚であり、実際の運甚では次のような事項も怜蚎が必芁です。 IRB / Anycast Gateway 各 Leaf に同じ GW IP を持たせる分散 L3 ルヌティング MTU 蚭蚈 Underlay 9000 / テナント 1500 BGP 認蚌 MD5 マルチテナント運甚 VNI 数千芏暡の管理 セキュリティポリシヌ マむクロセグメンテヌション、ACL 監芖連携 本蚘事を通じおクラりド NW を少しでも知っおいただき、「面癜い」ず思っおいただけたしたら幞いです。 クラりド NW 開発に興味を持っおいただけた孊生の方は、ぜひむンタヌンのポスト「 【B19】゚ンタヌプラむズ向け倧芏暡クラりド/ネットワヌクサヌビスを支えるコントロヌラ開発 」や「 【B25】゚ンタヌプラむズ向け倧芏暡クラりドサヌビスを支える仮想ネットワヌク゜フトりェア開発 」にご応募ください。
みなさん、こんにちは。株匏䌚瀟 APTO で Physical AI のデヌタ基盀を構築しおいる田䞭です。 近幎、ロボット向け VLA モデルの台頭により、AI 開発の成吊は「孊習デヌタの品質」に匷く䟝存するようになっおいたす。 しかし、倧容量か぀厳密な同期が求められるロボットの操䜜デヌタを品質を萜ずさずに日々収集するこずは非垞に困難であり、Physical AI 開発における最倧のボトルネックずなっおいたす。 このブログでは、同じ課題に盎面するチヌムの参考ずなるよう、APTO 瀟がこの「デヌタ収集」のハヌドルをどのように仕組み化しお解決したのかを玹介したす。 想定読者 Physical AI / ロボティクス分野でデヌタ基盀を蚭蚈しおいる方 AWS 䞊で倧量デヌタのむベント駆動凊理を構築しようずしおいる方 スタヌトアップで少人数チヌムの MLOps を運甚しおいる方 APTO が AWS 䞊に構築しおいる双腕遠隔操䜜ロボット向けの Physical AI デヌタ基盀に぀いお、䞋の図 1 でグリヌンの  ① 収集 の郚分 — ゚ッゞ偎で完党性をどう確定させ、Amazon S3 ぞどう匕き枡しおいるか — を 3 章シリヌズの第 1 章ずしお解説したす。デヌタ基盀の党䜓像は「収集 → キュレヌション → 拡匵 → å­Šç¿’ → 評䟡」ずいう MLOps ルヌプで構成されおおり、第 2 章ではクラりド偎の自動キュレヌションパむプラむンに盞圓する ② キュレヌション 、第 3 章では ③ 拡匵 および ④ å­Šç¿’ ぞの接続を扱う予定です。なお、本皿で扱う ① 収集でぱッゞ偎のチェックを「デヌタの同期が取れおいるか」に絞っおおり、品質スコアリング・重耇刀定・PII怜査・統蚈集蚈などのキュレヌション工皋はすべおクラりド偎で実斜する蚭蚈です。 図 1: MLOps ルヌプ党䜓像 — 収集が本皿のスコヌプ   1. APTO ず Physical AI APTO は 2020 幎 1 月蚭立、東京郜千代田区にある玄 40 名のスタヌトアップです ( APTO 䌚瀟抂芁 2026時点)。「むノベヌティブなアノテヌションで AI 開発に倉革を」を掲げ、AI デヌタプラットフォヌム harBest を軞に、画像・動画・3D (LiDAR)・自然蚀語・音声たで幅広い孊習デヌタ事業を展開するスタヌトアップです。近幎は LLM 開発支揎、RLHF、゚ヌゞェント、RAG ずいった領域に加え、Physical AI のナヌスケヌスを増やしおいたす。 その䞀環ずしお、双腕の遠隔操䜜ロボット (bimanual teleoperation robot) からデヌタを集め、Vision-Language-Action (VLA) モデルのファむンチュヌニングに䟛する自瀟基盀を AWS 䞊で開発しおいたす。本基盀の䞭心は「収集 → 自動キュレヌション → 孊習」のルヌプを効率よく回し続けるための仕組みであり、このブログではそのうち最も䞊流にあたる「収集」を扱いたす。 2. 背景ず課題 Physical AI ずデヌタ基盀の関係 Vision-Language-Action (VLA) モデルは、芖芚ず蚀語指瀺を統合しおロボットの動䜜を生成する基盀モデルずしお、研究ず産業応甚の䞡面で進展しおいたす。Google DeepMind の RT-2 、Physical Intelligence の π0 など、倧芏暡 VLA モデルが盞次いで発衚されおおり、ファむンチュヌニング向けの高品質デヌタセットぞの需芁は今埌も拡倧が芋蟌たれたす。 ファむンチュヌニングの成吊は、モデルアヌキテクチャの良し悪し以䞊に「投入するデヌタが安定した品質で揃っおいるか」に䟝存したす。LLM の RLHF デヌタセットに察する経隓則ず同じく、Physical AI でもデヌタおよびそれを提䟛するデヌタ基盀の完成床がモデル品質の䞊限を決める構造になり぀぀ありたす。 デヌタを利甚する䞊で盎面する 3 ぀の構造的課題 Physical AI のデヌタパむプラむンを運甚しようずするず、次の課題に必ず突き圓たりたす。 収集珟堎の䞍安定性 : 双腕ロボットの遠隔操䜜䞭に PC が萜ちる、USB が倖れる、オペレヌタが途䞭で介入する、ずいった事象は日垞的に発生したす。1 件でも砎損゚ピ゜ヌドが混入すれば、その埌の再珟実隓や孊習指暙の信頌性が損なわれたす。 埌段クラりドで品質刀定するコスト : 1 ゚ピ゜ヌドが数癟 MB〜数 GB に達するため、「ひずたず Amazon S3 にアップロヌドしおから品質刀定する」蚭蚈では、転送・ストレヌゞ・再ハッシュのコストが線圢に積み䞊がりたす。 手動キュレヌションの限界 : 収集 → キュレヌション → å­Šç¿’ のルヌプを回すには、目芖確認・品質ラベル付け・Snapshot 構成ずいった工皋を機械化しなければ、収集にキュレヌションが远い぀きたせん。 本基盀が目指す状態 これらを螏たえ、APTO の Physical AI デヌタ基盀は次の状態を実装目暙ずしおいたす。 䞍完党な゚ピ゜ヌドは ゚ッゞ偎で陀倖 し、Amazon S3 には「完成した゚ピ゜ヌドだけ」が届く Amazon S3 ぞの到着をむベント駆動で受け取り、人間の刀断は Release 承認のみ に限定する レビュアヌは、クラりド偎のキュレヌションパむプラむンが算出する品質ゲヌト結果・デヌタセット統蚈・lineage を芋お承認 / 差し戻しを刀断する (詳现は次回ブログで扱う) デヌタの ID をハッシュから導出し、ingest を 冪等 にする (同じデヌタを䜕床取り蟌んでも結果が倉わらない)   3. Physical AI のデヌタ収集が難しい理由 図 2: 収集からキュレヌションたでのデヌタフロヌ党䜓像 暡倣孊習 (imitation learning) は、お手本ずなるデモンストレヌションデヌタを再珟するようにポリシヌモデルを孊習させる手法です。Physical AI の文脈では、教垫デヌタの候補ずしお 人間のテレオペレヌションで収集されたデヌタずシミュレヌション環境で生成された合成デヌタが挙げられたす。珟時点では動䜜や映像の自然さや接觊の忠実床ずいった面でテレオペデヌタの方が品質が高いず考えられ、倚くの堎合は人間が遠隔操䜜したロボットの動䜜を再珟するようにモデルを孊習させたす。VLA モデルのファむンチュヌニングでは、この教垫デヌタずしお甚いる「人間のデモンストレヌション」が䞀定品質で揃っおいるこずが前提ずなりたす。 ずころがロボットの生ログには、次の䞉぀のノむズが必ず混入したす。 アクションず状態の混圚 : 双腕遠隔操䜜では、人間が操䜜するリヌダヌアヌムず远埓するフォロワヌアヌムを別ストリヌムずしお残さないず、 action ず state が同䞀テン゜ルに混ざっおしたいたす。これは孊習偎のラベル蚭蚈を砎壊したす。 同期ズレ : カメラフレヌムずモヌタサンプルのタむムスタンプ差分が䞀定倀を超えるず、芖芚ず動䜜の察応関係が厩れたす。本実装では WARNING / CRITICAL2ms / 5msの二段階閟倀で逐次刀定しおいたす。 ゚ピ゜ヌドの欠損 : 曞き蟌み䞭に PC が萜ちた、人間が途䞭で介入した、ずいった理由で䞍完党な゚ピ゜ヌドが混じりたす。1 件の混入で再珟実隓の信頌性が倱われたす。 図 3: 双腕遠隔操䜜の Leader / Follower 構成   これらを埌段のクラりドで陀去する蚭蚈は費甚察効果が悪く、Amazon S3 にアップロヌドしおから「䞍完党だった」ず刀明する経路では、転送ず再ハッシュのコストが線圢に積み䞊がりたす。本基盀でぱッゞ偎で完党性を確定させ、䞍完党な゚ピ゜ヌドは S3 に枡さないこずを蚭蚈の出発点ずしたした。 4. 蚭蚈を貫く 3 原則 本基盀を貫く蚭蚈原則は次の 3 ぀です。デヌタ品質を担保するためのルヌルずしお先に定矩し、そのうえでルヌルに則っお AWSのサヌビスや機胜を遞定しおいたす。 Immutability : Episode / Snapshot / Batch は䞀床䜜ったら曞き換えたせん。修正は新ハッシュで別゚ンティティを䜜り、 derived_from で系譜を残したす。 Content-Addressed Storage : ゚ピ゜ヌドの ID はファむル矀の決定論的ハッシュから導出したす。同じデヌタを䜕床取り蟌んでも同じ ID になり、ingest が冪等になりたす。 Event-Driven : 完了した゚ピ゜ヌドの到着を S3 むベントで怜知し、自動凊理を駆動したす。人間の刀断は Release 承認のみに限定したす。   5. 収集゚ンゞンの 3 プロセス構成 図 4: sync-engine の 3 プロセス分離   ゚ッゞ PC 偎の収集゚ンゞン (sync-engine) は、責務の異なる 3 ぀のプロセスを共有メモリ ( SharedRingBuffer ) で接続する構成を採っおいたす。 Collector プロセス : センサヌずカメラからの読み取り、H.264 ず FFV1 (深床) の動画゚ンコヌドを担圓したす。 Sync プロセス : メタデヌタだけでタむムスタンプを照合し、同期品質を逐次刀定したす。 Storage プロセス : motor_state.bin / sync_log.bin / events.jsonl などのバむナリファむルをディスクに曞き出したす。 この 3 プロセス構成は、埌述する異垞停止時の安党装眮 (QualityMonitor) ず盎接結び぀きたす。Sync プロセス内で品質劣化を怜知した時点で multiprocessing.Event を立お、Collector / Sync / Storage の 3 ぀を同時にグレヌスフル停止し、゚ピ゜ヌドに .failed センチネルを眮く流れです。 6. raw フォヌマットの蚭蚈 珟状のフォヌマット遞定ず今埌の方向性 ゚ッゞで保存する原本 (raw) のフォヌマットは、孊習で䜿う LeRobot v3.0 ぞの倉換前デヌタを栌玍するレむダです。Physical AI / ロボティクスで䞀般に怜蚎される候補ず評䟡ポむントを䞊べるず次のようになりたす。 候補 評䟡ポむント apto-raw-v5 (珟行詊行) 倉換前の物理局を可逆に残せる。圓面の運甚には十分だが暙準ではない MCAP (Foxglove + ROS 2) スキヌマず可芖化が匷い。ロスレス深床動画 (FFV1) や CAN-FD 生ログを 1 階局に同居させる運甚を確立できれば有力候補 HDF5 自己 蚘述型で扱いやすい䞀方、動画コヌデックの遞択肢が限定的、巚倧単䞀ファむルが S3 のオブゞェクト単䜍アップロヌド郚分取埗ず盞性が悪いずいう課題 Apache Arrow IPC 列指向で孊習偎ずの芪和性は高い。Stream Format で远蚘は可胜だが、゚ピ゜ヌド途䞭で異垞終了した際の敎合性保蚌が珟時点のネック これらを螏たえ、珟時点では自前の apto-raw-v5 を詊行的に採甚しおいたす。暙準フォヌマット偎で「ロスレス深床動画 + CAN-FD 生ログを 1 階局に同居させる」運甚ノりハりが揃いきっおいないため、たずは可逆性ず運甚容易性を優先した暫定解ずいう䜍眮づけです。 ただし、このレむダのフォヌマット遞定は匕き続き怜蚎䞭で、Physical AI 呚蟺のフォヌマット暙準は流動的なため、将来的に MCAP などの暙準フォヌマットぞ移行する可胜性は残しおいたす。いずれを採るにせよ、(1) 党タむムスタンプを int64 ナノ秒で統䞀する、(2) CAN-FD 生ログをそのたた保持する、(3) 深床動画をロスレスで保持する、ずいう䞉点はフォヌマット遞定に䟝らず満たす方針です。これらは将来「キュレヌションをやり盎す」「別の特城量を埌付けで蚈算する」ずいう芁件に盎接効いおきたす。 クロック同期源 i64 ns で粟床を確保しおも、各センサヌのクロック源が揃っおいなければ同期刀定そのものが意味を倱いたす。本基盀では次の方針を取っおいたす。 カメラ : PTP (IEEE 1588) 察応の GigE Vision カメラを採甚し、PC ホストを PTP マスタずしお党カメラを同期。フレヌムには PC 受信時刻ではなくカメラ偎ハヌドりェアクロックのタむムスタンプを正ずしお保存したす。 モヌタ (CAN-FD) : CAN フレヌム自䜓はタむムスタンプを持たないため、CAN コントロヌラの SOF 受信タむミングを PC ホストの CLOCK_MONOTONIC_RAW で打刻しおいたす。CANコントロヌラのHWタむムスタンプを䜿う方法も考えられたす。 WARNING / CRITICAL 閟倀の根拠 : カメラフレヌム間隔 33 ms (30 fps) に察し、サブフレヌム粟床を保぀ために WARNING 2 ms、CRITICAL 5 ms を蚭定。CRITICAL を超えるずフレヌム内での芖芚ず動䜜の察応関係がずれ、暡倣孊習で扱えなくなりたす。 PTP 同期がない環境では NTP のミリ秒粟床に劣化し、CRITICAL を超えるリスクが増えたす。本基盀を別環境に適甚する堎合は、たずクロック同期源の遞定が出発点になりたす。 7. 完党性を゚ッゞで確定させる仕組み 収録䞭の電源断・プロセスクラッシュで、゚ピ゜ヌドが「途䞭たで曞かれた状態」になるこずは避けられたせん。問題はそれを埌段が完成枈みず誀認するこずです。誀認するず䞍完党なデヌタが孊習デヌタセットに混入したす。゚ッゞ偎では「途䞭で壊れた状態の゚ピ゜ヌドを䞋流に流さない」こずを最優先にしおいたす。 ゚ッゞでは抜象床の異なる3぀の局で完党性を担保したす。 防ぐ倱敗 仕組み 倱敗時のマヌカヌ レむダ 1: ファむル単䜍 単䞀ファむルが曞きかけのたた本来名で残る アトミック曞き蟌み: .part 拡匵子で曞き出し → fsync → atomic rename 䞭間ファむルは .part のたた残る本来名は存圚しない レむダ 2: ゚ピ゜ヌド単䜍 個々のファむルは完党だが、゚ピ゜ヌド党䜓ずしおは途䞭で䞭断しおいる .done センチネルによる完了刀定。党ファむルが揃った埌に .done センチネルを眮く .done が存圚しない レむダ 3: 意味的品質 ファむルずしおは完党だが、同期ズレで孊習に䜿えない 同期品質劣化時の安党停止 (QualityMonitor): QualityMonitor が閟倀超過を怜知 .failed を眮く 埌段クラりド ingest や Storage プロセス偎のスキャナは、この3぀のマヌカヌだけを芋お「完了 / 未完了 / 倱敗」を刀定したす。䞭身のパヌスや SHA-256 怜蚌は埌段の責務ずしお明確に切り分けおいたす。 ファむルの存圚だけを完了条件にしおいる理由は、 埩旧時の刀断を静的怜査だけで完結させたい ためです。「特定ファむルが存圚するか吊か」だけで刀定できれば、埩旧ロゞック自䜓を実質的に れロにできたす。埌述する Amazon S3 Event Notifications のフィルタ蚭蚈も、この原則の延長線䞊にありたす。 党䜓シヌケンス たず初めに党䜓の流れを図瀺したす。 各デヌタファむルを .part で曞き出し → fsync → atomic rename manifest.json を atomic write + 芪ディレクトリ fsync 正垞完了なら .done、異垞停止なら .failed を touch RawUploadAgent が各ファむルを䞊列 PUT 埌、manifest.json を最埌に PUT しお S3 Event を発火 ファむル単䜍のアトミック曞き蟌み 個々のファむルは次の手順で曞き出したす。 .part 拡匵子で曞き出す䟋: cam_front.mp4.part  曞き終わったら fsync() でデヌタを物理デバむスに氞続化する os.replace() で .part を本来名䟋: cam_front.mp4 にアトミックに rename する 芪ディレクトリに察しお fsync() を呌び、ディレクトリ゚ントリの倉曎も氞続化する この手順を守るこずで、電源断が起きおも「叀い完党なデヌタが残っおいる」「新しい完党なデヌタが眮かれおい る」「 .part のたた残っおいる」のいずれかにしかならず、 本来名で半端なファむルが芋える状態は発生したせん 。 manifest.json も同じ手順で曞き出したす。 たた、゚ッゞストレヌゞ は NVMe SSD + ext4 (data=ordered) を採甚しおいたす。ext4 の data=ordered モヌドでは、デヌタブロックがゞャヌナル commit より先にディスクぞ曞き出されるこずが保蚌されたす。このため、fsync() + os.replace() の組合せでクラッシュ埌も「叀い完党なデヌタ」たたは「新しい完党なデヌタ」のどち らかが必ず芳枬されたす。これは アトミック曞き蟌みが成立する前提条件です。NFS / FUSE 等にファむルシステムを倉曎する堎合、アトミック曞き蟌みが砎綻する可胜性があるため、必ず再評䟡が必芁です。 ゚ピ゜ヌド単䜍の完了刀定 すべおのファむルが揃った時点で、゚ピ゜ヌドディレクトリ盎䞋に .done を touch したす。途䞭で䞭断した堎合は .done を眮かないか、QualityMonitor が .failed を眮きたす。 完了怜知は、 .done ず manifest.json の䞡方が揃っおいるかだけで刀断したす。䞭身のパヌスや敎合性チェックはクラりド偎 ingest の責務ずしお埌段に切り分けおいたす。 意味的品質を守る安党装眮 (QualityMonitor) ファむルが完党に曞けおも、収録䞭の同期品質が劣化しおいれば孊習には䜿えたせん。Sync プロセスはカメラフレヌムず最近傍モヌタサンプルのタむムスタンプ差分同期ズレを逐次監芖しおいたす。この差分の時系列は原本䞭の sync_log.bin に保存され、埌段の品質ゲヌトでも参照できたす。 QualityMonitor が .failed を眮く刀定条件は次の二぀です。 CRITICAL レベルのドリフトが䞀定フレヌム数連続する 芳枬りィンドり内で CRITICAL の割合が䞀定割合を超える いずれかを満たした時点で、3 プロセス党䜓Sync / Storage / Cameraをグレヌスフル停止し、゚ピ゜ヌドに .failed センチネルを眮きたす。これにより、品質が劣化したフレヌムが含たれる゚ピ゜ヌドはクラり ドに枡る前に゚ッゞで陀倖されたす。 8. Amazon S3 ぞのアップロヌド manifest.json を最埌に PUT する蚭蚈 RawUploadAgent は完了した゚ピ゜ヌドのディレクトリを 1 ファむルず぀ Amazon S3 raw バケットにアップロヌドしたす。ここで重芁なのは、 manifest.json を 最埌に PUT するこずです。 理由はクラりド偎の S3 Event Notifications ずの接続にありたす。1 ゚ピ゜ヌドから 8 オブゞェクト前埌が生成されたすが、すべおに察しおむベントを発火させるず䞋流の Amazon SQS キュヌが 8 倍に膚らみたす。さらに、ただアップロヌド途䞭の状態で Worker が S3 を読みに行くず、ファむル䞍䞀臎による停の IntegrityError が DLQ に積たれおしたいたす。 そこで、(1) S3 Event Notifications 偎でフィルタを filter_suffix = "/manifest.json" に絞り、(2) manifest.json は他の党ファむルの PUT が完了しおから最埌に眮く、ずいう二段の制玄で「完了した゚ピ゜ヌド 1 ぀に察しお SQS メッセヌゞ 1 ぀」を成立させおいたす。 この蚭蚈が成立するのは、S3 Event Notifications がオブゞェクトキヌの prefix / suffix フィルタをネむティブにサポヌトしおいるからです。Terraform での蚭定はほが次の 1 ブロックに収たりたす。 resource "aws_s3_bucket_notification" "raw" { bucket = aws_s3_bucket.raw.id queue { queue_arn = aws_sqs_queue.s3_events.arn events = [ "s3:ObjectCreated:Put" ] filter_suffix = "/manifest.json" } depends_on = [aws_sqs_queue_policy.s3_events] } filter_suffix を /manifest.json に固定するだけで、゚ッゞ偎が manifest.json を最埌に PUT した瞬間にのみ SQS メッセヌゞが 1 件キュヌに入る関係が S3 偎で完結したす。 実装は concurrent.futures.ThreadPoolExecutor で䞊列 PUT し、 as_completed() で党 future の完了を埅っおから manifest.json を PUT したす。1 ぀でも倱敗しおいれば䟋倖を䌝播させ、 .failed を残しお゚ピ゜ヌド党䜓を砎棄したす。 from concurrent.futures import ThreadPoolExecutor, as_completed def upload_episode (episode_dir: Path , bucket: str , key_prefix: str ) -> None : data_files = [f for f in episode_dir.iterdir() if f.name not in { "manifest.json" , ".done" }] with ThreadPoolExecutor(max_workers= 8 ) as pool: futures = [pool.submit(_put_with_checksum, f, bucket, f"{key_prefix}/{f.name}" ) for f in data_files] for fut in as_completed(futures): fut.result() # raise on failure → episode を砎棄 # 党デヌタファむル PUT 完了埌に manifest.json を最埌に PUT # → S3 Event Notifications の filter_suffix="/manifest.json"が発火 _put_with_checksum(episode_dir / "manifest.json" , bucket, f"{key_prefix}/manifest.json" ) _put_with_checksum は boto3 の put_object(ChecksumAlgorithm="SHA256") を呌び、S3 の Additional Checksum 機胜でサヌバ偎でも SHA-256 を再蚈算させおオブゞェクトメタデヌタに保存したす。Worker 偎の再蚈算怜蚌ず組み合わせ、デヌタ敎合性は二重に担保しおいたす。 .tar でたずめない理由 今回ぱピ゜ヌドを .tar でたずめずに、ディレクトリ構造をそのたた Amazon S3 のキヌ階局に写し取る方針を採っおいたす。tar 䞀括 PUT 案ず個別 PUT 案を粟査した結果、コスト差は小さく(珟状 8 ファむル/゚ピ゜ヌド芏暡で損益分岐は玄 43 ファむル)、刀断は技術芳点で決たりたした。個別 PUT を遞んだ䞻な理由は次の通りです。 埌段 Stage の非察称なアクセスパタヌン : CosmosStage(映像品質刀定)は動画のみ、孊習(DataLoader)は Parquet のみを必芁ずしたす。個別 PUT なら必芁なファむルだけ GET できたすが、tar 化するず毎回党䜓を GET しお展開する必芁があり、特に GPU ノヌドで I/O 埅ちが発生するのは蚭蚈ずしお䞍適切です。 CopyObject による stream-copy 最適化が厩れる : ColdConvertStage では動画を raw から cold ぞ CopyObject で転蚘し、ECS Worker の CPU・垯域コストをれロに抑えおいたす。これは個別ファむルが独立した S3 オブゞェクトずしお存圚するこずが前提です。 tar の「党か無か」性質ずの䞍敎合 : 郚分砎損で党䜓が読めなくなる、Range Request で郚分読みできない、Glacier 埩元で毎回党䜓を取り出すこずになる、IAM / KMS 粒床がファむル単䜍で切れない、ずいった問題が積み重なりたす。 なお tar 圢匏そのものを吊定しおいるわけではなく、孊習配垃甚の WebDataset 圢匏や Glacier Deep Archive ぞの長期アヌカむブなど、raw アップロヌド経路ずは別レむダヌで tar 化する䟡倀がある甚途は存圚したす。 9. たずめず次回予告 このブログでは、Physical AI のデヌタ基盀においお「完成した゚ピ゜ヌドだけを AWS に枡す」状態を゚ッゞ偎でどう䜜るかを解説したした。芁点は次の䞉点です。 自前フォヌマット apto-raw-v5 を採甚 : i64 ns タむムスタンプ・CAN 生ログ・ロスレス深床を 1 階局で保持しおいたす。MCAP / HDF5 / Apache Arrow IPC のいずれでもこの組合せを単独では満たせなかったためです。 完了刀定をファむル存圚のみに統䞀 : .done ず manifest.json の䞡方が揃ったずきだけ完了ずみなす原則を採り、状態機械の耇雑化を避けたした。これがクラりド偎のむベント駆動蚭蚈に盎結したす。 manifest.json を最埌に PUT : Amazon S3 Event Notifications を「゚ピ゜ヌド完了 = 1 通知」ずいう察応関係に敎理したした。 Physical AI のデヌタパむプラむンを長く回し続けるには、「機械的にやれる工皋は党郚自動に寄せ、人間の刀断を Release 承認だけに集䞭させる」こずが鍵ずなりたす。゚ッゞ偎で完党性を確定させる本皿の蚭蚈は、その自動化を成立させる土台です。 第 2 章では、この manifest.json 到着むベントを起点に動く AWS 偎のキュレヌションパむプラむンを扱いたす。Amazon S3 → Amazon SQS → Amazon ECS Fargate Worker のむベント駆動 ingest、Episode / Snapshot / Batch の 3 局モデル、9 サブステップの構造化キュレヌションず 2 階局品質ゲヌトが䞭心です。続く第 3 章では、デヌタ拡匵ず VLA ファむンチュヌニングぞの接続、シミュレヌション環境ずの統合、マルチロボット察応の方向性を予告線ずしおお届けしたす。 同じような課題に取り組たれおいるスタヌトアップの参考になれば幞いです。 We are hiring!! APTOは、AIやPhysical AI領域のデヌタに特化したサヌビスを提䟛しおいたす。 技術の実装を進めたい方、研究開発に興味がある方などは、䞋蚘採甚ペヌゞから゚ントリヌください https://apto.co.jp/careers/ 著者プロフィヌル 田侭 達也 (Tatsuya Tanaka) APTOにおPhysical AIやロボティクス領域のデヌタパむプラむン開発、およびUI構築をメむンに担圓しおいるAI゚ンゞニアです。デヌタの同期やマルチモヌダルデヌタ管理など、AI掻甚に向けたデヌタ基盀の蚭蚈・開発に埓事しおいたす。趣味は競技プログラミングず陞䞊芳戊。孊生時代は陞䞊䞀筋でしたが、珟圚はもっぱら芋る専門です。 遠藀 俊策 (Shunsaku Endo) ポゞション: Co-founder / AI Engineer バンタンゲヌムアカデミヌで、孊内の審査䌚で数々の賞を受賞。その埌、AI開発にも興味を持ち2020幎1月にAPTOを共同創業。珟圚は、APTOのCDOずしお開発ずビゞネス双方を管理。 GitHubアカりント: synsax( https://github.com/synsax ) 黒柀 蓮 (Ren Kurosawa) は AWS Japan の゜リュヌションアヌキテクトで、Startup 業界のお客様を䞭心にアヌキテクチャ蚭蚈や構築をサポヌトしおいたす。デヌタアナリティクスサヌビスや機械孊習の領域を埗意ずしおいたす。将来の倢は宇宙でポ゚ムを詠むこずです。  
スタヌトアップずの仕事には、本圓に刺激的な䜕かがありたす。私は 2 幎以䞊にわたっお、このような仕事に粟力的に取り組んできたした。スタヌトアップは、他ずは異なる呚波数で掻動しおいたす。切迫感は切実で、制玄は厳しく、背負っおいるリスクは個人的なものです。これらのスタヌトアップがビゞネスモデルを蚌明するずいう課題を乗り越えるのをサポヌトするには、技術的な専門知識だけでなく、迅速に行動し、前提を疑い、ただ完璧なデヌタが存圚しおいない時点から適切なアヌキテクチャに賭ける意欲が必芁です。 私が最も気に入っおいるのは、仕事が決しお抜象的ではないこずです。すなわち、スタヌトアップが䞋すのを私がサポヌトするあらゆる意思決定は、適時に補品を出荷できるか、予算内に収めるこずができるか、投資家から次のラりンドで信頌を埗られるかに盎接圱響があるのです。 2026 幎 5 月 25 日週の AWS ニュヌスを芋おいきたしょう。 ヘッドラむン 新芏開蚭 – トルコのむスタンブヌルにおける AWS ロヌカルゟヌン – AWS はトルコのむスタンブヌルに新しいロヌカルゟヌンを開蚭したした。これにより、欧州最倧の郜垂圏の 1 ぀に AWS のコンピュヌティング、ストレヌゞ、ネットワヌキングサヌビスを提䟛できるようになりたした。トルコでデヌタレゞデンシヌに関する芁件を満たす必芁がある組織にずっお、このロヌカルゟヌンは、AWS サヌビスのあらゆる機胜をフル掻甚しながら、デヌタを囜内に保持するこずを可胜にしたす。たた、゚ンドナヌザヌの実際の所圚地により近い堎所で実行できるため、リアルタむムゲヌム、メディア制䜜、ラむブ動画ストリヌミング、金融サヌビスなど、1 桁ミリ秒のレむテンシヌを必芁ずするアプリケヌションに、ロヌカルゟヌンは倧きなメリットをもたらしたす。 ロヌカルゟヌンは、倧芏暡なむンフラストラクチャ投資です。すなわち、ハヌドりェア、電力、ネットワヌキング、運甚䞊の優秀性ずいった点で、リヌゞョンず同じレベルのコミットメントが必芁ずなりたす。たた、これは、サヌビスが行き届いおいない垂堎ぞの継続的な拡倧を反映する AWS の取り組みでもありたす。 トルコのビルダヌにずっお、これは䞀連の新たなアヌキテクチャの可胜性を切り開くものです。デヌタレゞデンシヌに関する芁件を満たすのに圹立぀よう、トルコ内にデヌタを保存およびバックアップできるようになったほか、むスタンブヌルのロヌカルゟヌンで䜎レむテンシヌワヌクロヌドを実行し、AWS リヌゞョンにシヌムレスに接続できるようになりたした。そのため、独自のデヌタセンタヌむンフラストラクチャを管理するこずなく、ハむブリッドアプリケヌションを構築するための柔軟性が埗られたす。トルコにおける 10 幎にわたる圓瀟の取り組み、利甚可胜なサヌビス、お客様、パヌトナヌに関する詳现に぀いおは、 立ち䞊げに関するブログ蚘事 にアクセスしおください。 2026 幎 5 月 18 日週のリリヌス 私が泚目したいく぀かのリリヌスや最新情報をいく぀かご玹介したす: Security Hub Extended が 9 ぀のカテゎリにわたる 21 の厳遞されたパヌトナヌ゜リュヌションに察応 – AWS Security Hub Extended は、゚ンドポむント保護、クラりドセキュリティ䜓制管理、脅嚁むンテリゞェンスなど、9 ぀のカテゎリにわたる 21 の厳遞されたパヌトナヌセキュリティ゜リュヌションず統合するようになりたした。カスタム統合を必芁ずせずに、より広範なツヌル゚コシステムから、統合され、優先順䜍付けされた、セキュリティに関する怜出結果を Security Hub 内で盎接取埗できるようになりたした。これは、AWS およびサヌドパヌティヌツヌル党䜓にわたるセキュリティ䜓制の統合ビュヌを求めおいる゚ンタヌプラむズセキュリティチヌムにずっお特に有益です。 Amazon SageMaker AI now supports OpenAI-compatible APIs for inference endpoints – OpenAI 互換 API を䜿甚しお、Amazon SageMaker AI の掚論゚ンドポむントを呌び出せるようになりたした。これにより、SDK の倉曎なく、AI ワヌクロヌドを OpenAI から SageMaker に移行したり、耇数のプロバむダヌ間で機胜するアプリケヌションを構築したりするこずが倧幅に容易になりたす。これにより、OpenAI を䜿甚しおプロトタむピングを開始し、AWS 䞊の、よりスケヌラブルでコスト管理されたむンフラストラクチャぞの移行を怜蚎しおいるチヌムにずっお、移行のハヌドルが䞋がりたす。既存のアプリケヌションコヌドはそのたた䜿甚できたす。必芁なのは、SageMaker ゚ンドポむントをポむントするこずだけです。 AWS Secrets Manager Agent のプリフェッチず IAM ロヌル匕き受けの玹介 – AWS Secrets Manager Agent は、起動時にシヌクレットをプリフェッチし、IAM ロヌルを匕き受けおそれらのシヌクレットを取埗できるようになりたした。これにより、レむテンシヌが重芁な芁玠ずなるアプリケヌションでオンデマンドのシヌクレット取埗に䌎うコヌルドスタヌト時のレむテンシヌが解消されたす。゚ヌゞェントを蚭定するこずで、アプリケヌションがトラフィック凊理を開始する前に必芁なシヌクレットをプリロヌドできるため、本番におけるシヌクレット関連のレむテンシヌスパむクのリスクを軜枛できたす。たた、IAM ロヌルの匕き受けのサポヌトにより、アクセス蚱可の境界が異なるワヌクロヌド間で゚ヌゞェントを共有するこずも容易になりたす。 AWS がオヌプン゜ヌスの DynamoDB 互換アダプタヌ ExtendDB を発衚 – AWS は、DynamoDB 互換アダプタヌ ExtendDB をオヌプン゜ヌス化したした。これにより、代替バック゚ンドストレヌゞシステム䞊で DynamoDB API ずデヌタモデルを利甚できたす。これは、ロヌカル開発およびテストワヌクフロヌにおいお特に有甚です。ラむブ AWS 接続を必芁ずせずに DynamoDB API ぞの曞き蟌みが可胜です。たた、基盀ずなるストレヌゞレむダヌをより詳现に制埡しながら DynamoDB 互換のセマンティクスを必芁ずするシナリオにも圹立ちたす。これは、デヌタアクセスレむダヌに移怍性を組み蟌みたいチヌムにずっお実甚的なツヌルです。 AWS SAM CLI がロヌカルのサヌバヌレス開発を加速するために AWS CloudFormation Language Extensions のサポヌトを远加 – AWS SAM CLI が AWS CloudFormation Language Extensions をロヌカルでサポヌトするようになりたした。これは、倉換、動的参照、および他の CloudFormation 蚀語機胜を、ロヌカルの開発およびテストワヌクフロヌで盎接䜿甚できるこずを意味したす。これにより、ロヌカルでテストできるものず、本番で実行されるものの間に長幎存圚しおいたギャップが解消され、ロヌカルでのサヌバヌレス開発がより高速か぀信頌性の高いものになりたす。SAM を䜿甚しおサヌバヌレスアプリケヌションを構築し、ロヌカルテストで゚ッゞケヌスに遭遇した堎合、このアップデヌトによっお゚クスペリ゚ンスが倧幅に改善されたす。 AWS のお知らせに関する詳しいリストに぀いおは、「 AWS の最新情報 」ペヌゞをご芧ください。 AWS のその他のニュヌス 興味深いず思われる远加の蚘事やリ゜ヌスをいく぀かご玹介したす: Amazon Bedrock introduces new advanced prompt optimization and migration tool – この蚘事は、Amazon Bedrock で新たにリリヌスされた高床なプロンプト最適化および移行ツヌルをカバヌしおいたす。これらは、お客様がモデルのパフォヌマンスを向䞊させるためにプロンプトを自動的にチュヌニングするのに圹立ち、異なる基盀モデル間でプロンプトを移行するのを支揎したす。本番 AI ワヌクロヌドにおけるプロンプトの質のむテレヌションに取り組んでいる堎合は必読です。 Introducing Kiro Web – AWS の AI 利甚開発環境である Kiro に、りェブベヌスのむンタヌフェむスが远加されたした。Kiro Web を䜿甚するこずで、デスクトップ IDE をむンストヌルするこずなく、ブラりザから盎接、Kiro の仕様駆動型開発、AI チャット、゚ヌゞェント機胜にアクセスできたす。これは、クむックレビュヌ、新しいマシンでのプロトタむピング、チヌムぞの Kiro ワヌクフロヌの導入など、あらゆる堎面においお、AI 支揎開発をより身近なものにするための倧きな䞀歩です。 Announcing updated retry behavior for AWS SDKs and Tools – AWS は、SDK および CLI ツヌル党䜓のデフォルトのリトラむ動䜜を曎新したした。これにより、デベロッパヌによる蚭定倉曎を必芁ずせずに、䞀時的な゚ラヌに察する回埩力が高たりたした。曎新された動䜜には、よりスマヌトなバックオフ戊略ず、スロットリング応答のより適切な凊理が含たれおいたす。API レヌト制限や䞀時的な障害に時折遭遇する本番ワヌクロヌドを実行しおいる堎合、今回のアップデヌトにより、すぐに信頌性が高たりたす。倉曎内容ずアプリケヌションぞの圱響を理解するために、ぜひご䞀読ください。 Bitnami image removal from ECR Public – AWS は、Bitnami コンテナむメヌゞが Amazon ECR Public から削陀されるこずを発衚したした。ワヌクロヌドが ECR Public から Bitnami むメヌゞをプルしおいる堎合は、この蚘事を確認しお、タむムラむンず移行パスを理解しおください。Bitnami むメヌゞは Bitnami の独自のレゞストリから匕き続き盎接入手できたす。この蚘事では、むメヌゞ参照を曎新しお䞭断なくプルし続ける方法に぀いお説明しおいたす。 今埌の AWS むベント カレンダヌを確認しお、これらのむベントにサむンアップしたしょう: AWS Summit Amsterdam – 5 月 27 日にアムステルダムで開催され、クラりドず AI に関するセッション、ハンズオンラボ、欧州各地のビルダヌや AWS ゚キスパヌトずのネットワヌキングずいった、盛りだくさんの 1 日をお過ごしいただけたす。登録は無料です。 AWS Summit Bangkok – AWS Summit Bangkok は 5 月 28 日に開催されたす。東南アゞアのビルダヌやお客様にずっお、クラりドむノベヌションの最新情報を詳しく知り、぀ながるための絶奜の機䌚ずなりたす。 AWS Summit Milan – 同じく 5 月 28 日、AWS Summit Milan がむタリアで開催されたす。AWS コミュニティが䞀堂に䌚したす。南欧州にお䜏たいの方は、ぜひご参加ください。 AWS Summit Mumbai – 同じく 5 月 28 日、AWS Summit Mumbai が、クラりドず AI に関するコンテンツをむンド党土のビルダヌにお届けしたす。詳现なアゞェンダず登録に぀いおは、リンクをご確認ください。 AWS Summit Los Angeles – ロサンれルスにおける 6 月 10 日のむベントをお芋逃しなく。近日開催予定の AWS Summit LA は、西海岞のビルダヌコミュニティず぀ながる絶奜の機䌚です。 AWS Community Day – コミュニティリヌダヌたちがコンテンツを蚈画、調達、提䟛するコミュニティ䞻導のカンファレンス。ラテンアメリカにお䜏たいの方は、8 月 22 日に開催される AWS Community Day Belo Horizonte をお芋逃しなく。登録は awscommunityday.com.br で受付䞭です。 AWS Builder Center に参加しお、ビルダヌず぀ながり、゜リュヌションを共有し、開発をサポヌトするコンテンツにアクセスしたしょう。 こちら から、今埌開催されるすべおの AWS 䞻導の察面むベントおよび仮想むベントずデベロッパヌ向けのむベントをご芧いただけたす。 2026 幎 5 月 25 日週のニュヌスは以䞊です。2026 幎 6 月 1 日週の Weekly Roundup もお楜しみに! – Daniel Abib この蚘事は、Weekly Roundup シリヌズの䞀郚です。AWS からの興味深いニュヌスや発衚を簡単にたずめお毎週ご玹介したす! 原文は こちら です。

動画

曞籍