
API
ã€ãã³ã
ãã¬ãžã³
æè¡ããã°
æºå¡åŸ¡ç€ŒïŒ Claude Code ã«ããéçºäœéšã¯ãŒã¯ã·ã§ãããã€ãã³ãã¬ããŒãã
ã¢ããŸã³ ãŠã§ã ãµãŒãã¹ ãžã£ãã³ã®ãœãªã¥ãŒã·ã§ã³ã¢ãŒããã¯ããéœè€ã§ãã NHN ãã³ã©ã¹æ§ãäž»å¬ãã ãã¯ãããŠã§ã倧äžå€« â ä»ããã§ãé
ããªããClaude Code ã«ããéçºäœéšã¯ãŒã¯ã·ã§ããã ã«ãAWS ã®ãœãªã¥ãŒã·ã§ã³ã¢ãŒããã¯ããç»å£ããŸãããæ¬ã€ãã³ãã¯å®å¡ã«éãæºå¡åŸ¡ç€Œã§ã®éå¬ãšãªããŸããããåå ããã ããçæ§ãããããšãããããŸããïŒ æ¬ã€ãã³ãã¯ããAI ã³ãŒãã£ã³ã°ããŒã«ã¯æ°ã«ãªã£ãŠãããã©ããŸã è§Šã£ãããšããªãããšãããšã³ãžãã¢ã®æ¹ã察象ã«ãClaude Code ã䜿ã£ã Agentic Coding ãå®éã«äœéšããã ããªãã©ã€ã³åœ¢åŒã®ã¯ãŒã¯ã·ã§ããã§ãã Claude Code å
¥é & ãã³ãºãªã³ ïœ Agentic Coding ãäžç·ã«äœéšãããïœ AWS ãœãªã¥ãŒã·ã§ã³ã¢ãŒããã¯ã 山柀ã«ãã座åŠã»ãã·ã§ã³ 座åŠããŒãã§ã¯ãAgentic Coding ã®æŠèŠã«å ãã CLAUDE.md ã«ããèšå®ãPlan Mode ã䜿ã£ãèšç»çãªå®è£
ãã³ã³ããã¹ã管çãMCPïŒModel Context ProtocolïŒãšãã£ã Claude Code ã䜿ãããªãããã®ãã€ã³ãã解説ããŸããã ãã³ãºãªã³ã«åãçµãåå è
ã®æ§å ãã³ãºãªã³ã§ã¯ã æãåãããŠåŠã¶ Claude Code å
¥éã¯ãŒã¯ã·ã§ãã ã®ã¢ãžã¥ãŒã« 1 ããAWS ãœãªã¥ãŒã·ã§ã³ã¢ãŒããã¯ãã®éœè€ããã¡ã·ãªããŒã¿ãŒãšããŠé²è¡ããŸããããªãŒãã³ãœãŒã¹ã®ãã¯ã€ãããŒãã£ã³ã°ããŒã« Excalidraw ã顿ã«ãæ¬ç©ã®ã³ãŒãããŒã¹ãž Claude Code ã§æ©èœè¿œå ãè¡ãäœéšãããŠããã ããŸããã AWS ãœãªã¥ãŒã·ã§ã³ã¢ãŒããã¯ã éœè€ã«ãããã³ãºãªã³ã»ãã·ã§ã³ åå è
㯠AWS äžã«ãããã€ããã Code Editor ãµãŒããŒã«ãã©ãŠã¶ããã¢ã¯ã»ã¹ããã ãã§ãããŒã«ã« PC ã«äœãã€ã³ã¹ããŒã«ããããšãªã Claude Code ãäœéšã§ããç°å¢ãçšæããŸãããClaude Code 㯠Amazon Bedrock çµç±ã§ Claude ã¢ãã«ãåŒã³åºãæ§æã§ããã¢ãžã¥ãŒã« 1 ã§ã¯ã以äžã®å
容ãäœéšããŸããã Claude Code ã®åºæ¬æäœïŒããã³ããã®æžãæ¹ããã¡ã€ã«æäœïŒ CLAUDE.md ã®äœæãšæŽ»çš Plan Mode ã䜿ã£ãèšç»çãªå®è£
Excalidraw ãžã®æ©èœè¿œå Playwright MCP ã䜿ã£ãèŠèŠçãªåäœç¢ºèª Claude Code ã AWS ã§å§ããã«ã¯ ïœ Amazon Bedrock 飿ºããçµç¹å°å
¥ãŸã§ïœ NHN ãã³ã©ã¹æ ªåŒäŒç€Ÿ AWS Ambassador çŠæ°ž æ æ æ° 2 ã€ç®ã®ã»ãã·ã§ã³ã§ã¯ãNHN ãã³ã©ã¹ã®çŠæ°žæ°ãããClaude Code ã AWS ç°å¢ã§åããããã® 2 ã€ã®éžæè¢ã解説ããã ããŸããã Amazon Bedrock API 飿º â ã»ããã¢ããæé ãå¿
èŠãª IAM æš©éã®èšå®æ¹æ³ AWS Marketplace Enterprise Plan â è«æ±ã®äžå
åã管çé¢ã§ã®ã¡ãªãããªã©ãçµç¹å°å
¥ãèŠæ®ããéžæè¢ äŒæ¥ã§ Claude Code ãå°å
¥ããéã®å
·äœçãªã¹ãããã瀺ããããææ¥ããèªç€Ÿã§ãå§ãããããããšãã声ãèãããŸããã åå è
ã®å£° ãèªç¶èšèªã§ã³ãŒããæ¹ä¿®ã§ããããšãäœæã§ãããããµããŒããæåãå®å¿ããŠåãçµããããšãã£ã声ãå€ããåã㊠AI ã³ãŒãã£ã³ã°ããŒã«ã«è§Šããæ¹ã«ãšã£ãŠå®è·µçãªåŠã³ã®å Žã«ãªã£ãã»ããã第äºåŒŸã»ç¬¬äžåŒŸãéå¬ããŠã»ããããšãããªã¯ãšã¹ãããããããå©çšã»ææ¡äºå®ããšããåçãå€ããæ¬ã€ãã³ãã Claude Code ã®å°å
¥æ€èšãåŸæŒãããæ©äŒã«ãªããŸããã ãããã« æ¬ã€ãã³ãã§ã¯ãClaude Code on Amazon Bedrock ãæŽ»çšããå®è·µçãªéçºäœéšãæäŸããŸãããAI ã³ãŒãã£ã³ã°ããŒã«ã®ç¬¬äžæ©ãèžã¿åºããã£ãããšãªãã°å¹žãã§ãã ä»å䜿çšããã¯ãŒã¯ã·ã§ããã³ã³ãã³ãã¯å
¬éãããŠããŸãããèªèº«ã® AWS ã¢ã«ãŠã³ãã«ãããã€ããŠåãçµãããšãã§ããŸãã®ã§ããã²ã詊ããã ããã ã¯ãŒã¯ã·ã§ãã: æãåãããŠåŠã¶ Claude Code å
¥éã¯ãŒã¯ã·ã§ãã 解説ããã°: æãåãããŠåŠã¶ Claude Code å
¥éã¯ãŒã¯ã·ã§ãããå
¬éããŸãããïŒ AWS ã§ã¯ä»åŸãããŒãããŒäŒæ¥æ§ãšé£æºããææ°ã® AI éçºããŒã«ãäœéšããã ããã€ãã³ããäŒç»ããŠãŸãããŸãã èè
ã«ã€ã㊠éœè€ æå·³ ãœãªã¥ãŒã·ã§ã³ã¢ãŒããã¯ããšããŠå¹
åºãã客æ§ã® AWS å°å
¥æ¯æŽãæ
åœããŠããŸããAWS Lambda ã Amazon API Gateway ãªã©ã®ãµãŒãã¬ã¹ã®ãµãŒãã¹ã奜ãã§ãã æ£® çèŒ ãœãªã¥ãŒã·ã§ã³ã¢ãŒããã¯ããšããŠå¹
åºãã客æ§ã® AWS å°å
¥æ¯æŽãæ
åœããŠããŸãã奜ã㪠AWS ãµãŒãã¹ã¯ Amazon Connect ã§ãæ¥çåããã³ã³ã¿ã¯ãã»ã³ã¿ãŒé¢é£ã®æè¡æ¯æŽãè¡ã£ãŠããŸããå
æ¥å¿µé¡ã ã£ããã«ãã©ãœã³å®èµ°ãéæããããšãã§ããŸããã ç»å£è
ã«ã€ã㊠山柀 è¯ä» ãœãªã¥ãŒã·ã§ã³ã¢ãŒããã¯ããšããŠãæ¥ç𮿥æ
ãåããæ§ã
ãªã客æ§ãæ¯æŽãããŠé ããŠããŸããåè·ã§ã¯äž»ã«ãããã¯ãŒã¯æ¡ä»¶ãæ
åœããŠããŸããã奜ããªãµãŒãã¹ã¯ãAmazon Bedrock ãš AWS Transit Gateway ã§ããäŒæ¥ã¯ã¹ããŒããŒãã倧奜ããªã®ã§ãã·ãŒãºã³äžã¯æ¯é±ã¹ããŒå Žã«è¡ã£ãŠãããŸãã çŠæ°ž æ æ NHN ãã³ã©ã¹ã«ãŠããŒã¿ã»AI 掻çšãäžå¿ã«ã客æ§ã®ã¯ã©ãŠãæŽ»çšæ¯æŽã«åŸäºã2025 幎ã«ã¯ãAWS ãã°ããŒãã«ã§éžåºãã衚地ããã°ã©ã ã§ãã AWS Ambassador ã«èªå®ãAWS æ®åã»åçºæŽ»åã粟åçã«æšé²ããŠããã
ã¯ããã« ååã®èšäº ã§ã¯ãWebã¢ããªã§æ åãæ±ãéã®ç£æ¥çšéã«ããããªã¢ã«ã¿ã€ã ã³ãã¥ãã±ãŒã·ã§ã³å®çŸã®ããã®æ€èšãã€ã³ããšãintdashãšintdash-RTC SDKãšããéžæè¢ã玹ä»ããŸããã èŠç¹ããããããããš: SFUéžå®æã¯ãã³ããŒåºæã®å®è£
ã«äŸåããç¹ãèæ
®ãå¿
èŠ ã»ã³ãµãŒããŒã¿ãšã®çµ±åãé²ç»ã»è§£æã¯è¿œå ã®èšèšãå¿
èŠã«ãªãå¯èœæ§ intdashã¯ãç£æ¥çšéã«é©ããããäžã€ã®éžæè¢ åç·šã§ã¯æŠèŠããè§Šããªãã£ããããå®éã®äœ¿çšæã«ã€ããŠèå³ããæã¡ããã ããæ¹ãããã£ããããšæããŸãã æ¬èšäºã§ã¯ãintdash-RTC SDKã®å
·äœçãªå®è£
æ¹æ³ããµã³ãã«ã³ãŒãä»ãã§è§£èª¬ããŸããç°å¢ãæºåã§ããŠããã°ãçŽ30åã§åäœãããããªãã£ããã宿ããŸãã®ã§ããã²ã詊ããã ããã ã©ã€ãã©ãªã®æŠèŠ intdashã¯æ åã»é³å£°ã»ã»ã³ãµãŒããŒã¿ãçµ±åããŠäŒéã§ãããã©ãããã©ãŒã ã§ããintdash-RTC SDKã¯ãintdashã§æ±ãããŒã¿ã®ãã¡æ åã»é³å£°ãWebã¢ããªããç°¡åã«æ±ããããã«ããã©ã€ãã©ãªã§ãã æ¬ã©ã€ãã©ãªã¯3ã€ã®ã€ã³ã¿ãŒãã§ãŒã¹ã§æ§æãããŠããŸãã âââââââââââââââââââââââââââââââââââââââââââââââ â MediaConnection â çµ±å管ç âââââââââââââââââââââââ¬âââââââââââââââââââââââ†â MediaSender â MediaReceiver â éåä¿¡ âââââââââââââââââââââââŽââââââââââââââââââââââââ | ^ v | âââââââââââââââââââââââââââââââââââââââââââââââ â intdash (iSCP) â äŒé âââââââââââââââââââââââââââââââââââââââââââââââ MediaConnection: éåä¿¡ãçµ±å管çã start() / stop() ã§æ¥ç¶å¶åŸ¡ MediaSender: ããŒã«ã«ã¡ãã£ã¢ãintdashã«éä¿¡ MediaReceiver: intdashããã¡ãã£ã¢ãåä¿¡ããvideoèŠçŽ ã«çŽæ¥æ¥ç¶ æ¬ã©ã€ãã©ãªã¯ãTypeScript åãã®intdashéä¿¡ã©ã€ãã©ãª iscp-ts ã®ã©ãããŒãšããŠãå©çšã§ããŸãããä»åã®ãããªã¢ããªã±ãŒã·ã§ã³ã§ã¯æ¥ç¶èšå®ãçŽæ¥æå®ããã·ã³ãã«ãªäœ¿ãæ¹ãå¯èœã§ãã å®è£
ã¹ããã 以äžã§ã¯ãåºæ¬çãªãããªãã£ãããå®è£
ãããµã³ãã«ã³ãŒãã5ã€ã®ã¹ãããã«åããŠç޹ä»ããŸããå
šéã¯èšäºæ«å°Ÿã®ãAppendix: ãµã³ãã«ã³ãŒãå
šæãã«åæ²ããŠããŸãã 1. ã©ã€ãã©ãªã®importãšMediaConnectionã®äœæ // 1. ã©ã€ãã©ãªã®import import { createMediaConnection } from "@aptpod/intdash-rtc" ; // 2. MediaConnectionã®äœæïŒintdashãžã®æ¥ç¶ãå
éšã§è¡ããŸãïŒ const { mediaConnection } = await createMediaConnection( { address : "your-intdash.example.jp" , // intdashæ¥ç¶ã¢ãã¬ã¹ projectUuid : "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" , // intdashãããžã§ã¯ãã®UUID nodeId : "yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy" , // éä¿¡å
ïŒèªååŽïŒã®ããŒãUUID enableTLS : true , apiToken : "your_token_here" , // intdash Web ConsoleããäœæããAPIããŒã¯ã³ïŒOAuth2ãµã€ã³ã€ã³ã䜿ãå Žåã¯apiTokenãçç¥ïŒ } , { sender : { // é³å£°ã«é¢ããèšå® audio : { codec : "PCM" , // PCM, OPUS, AACããµããŒã } , // æ åã«é¢ããèšå® video : { codec : "H264" , // H264, VP9ããµããŒã } , } , receiver : { sourceNodeIds : [ "zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz" ] , // éä¿¡çžæã®ããŒãUUID } , } , ); @aptpod/intdash-rtc ãä»åã®intdash-RTC SDKã§ãããããimportããã ãã§ãintdashãä»ãããããªãã£ãããå®è£
ã§ããŸãïŒ @aptpod/iscp-ts 㯠peer dependency ãšããŠäœµããŠã€ã³ã¹ããŒã«ãå¿
èŠã§ãïŒã createMediaConnection 颿°ã§ãintdashãžã®æ¥ç¶ãšMediaConnectionã®äœæããŸãšããŠè¡ããŸãã第1åŒæ°ã§æ¥ç¶æ
å ±ïŒã¢ãã¬ã¹ã»ãããžã§ã¯ãUUIDã»ããŒãUUIDã»APIããŒã¯ã³ïŒãã第2åŒæ°ã§éåä¿¡ãªãã·ã§ã³ãæå®ããŸãããããã®å€ã¯ intdash Web Console ããååŸã§ããŸããAPIããŒã¯ã³ã¯é·æéæå¹ãªåºå®ããŒã¯ã³ã§ãããããå®å
šãªã¯ã³ã¿ã€ã ããŒã¯ã³ãOAuth2ã«ããèªèšŒãå©çšå¯èœã§ããéåä¿¡ãªãã·ã§ã³ã¯éå±€åãããæ§é ã«ãªã£ãŠããã sender.audio ã§é³å£°èšå®ã sender.video ã§æ åèšå®ã receiver ã§å信察象ããŒããæå®ããŸããã³ãŒããã¯ã¯åå®å
šãªæååãªãã©ã«åã§æå®ã§ããèšå®ãã¹ãé²ããŸãã 2. ããŒã«ã«ã¡ãã£ã¢ã®ååŸãšè¡šç€º // 3. ããŒã«ã«ã¡ãã£ã¢ã¹ããªãŒã ã®ååŸãšèšå® const localStream = await navigator .mediaDevices. getUserMedia ( { video : true , audio : true , } ); await mediaConnection.sender.setLocalMediaStream(localStream); // ããŒã«ã«æ åãvideoèŠçŽ ã«è¡šç€º const localVideoEl = document . getElementById ( "local-video" ) as HTMLVideoElement ; localVideoEl.srcObject = new MediaStream (localStream.getVideoTracks()); localVideoEl.muted = true ; await localVideoEl.play(); getUserMedia ã§ã«ã¡ã©ãšãã€ã¯ããã¹ããªãŒã ãååŸãã setLocalMediaStream ã§èšå®ããŸããååŸããã¹ããªãŒã ã¯ãã®ãŸãŸããŒã«ã«ã®videoèŠçŽ ã«ã衚瀺ã§ããŸãã 3. åä¿¡ã¡ãã£ã¢ã®videoèŠçŽ ãžã®æ¥ç¶ // 4. åä¿¡ã¡ãã£ã¢ã¹ããªãŒã ã®åŠç const remoteVideoEl = document . getElementById ( "remote-video" , ) as HTMLVideoElement ; mediaConnection.receiver.on( "statechange" , ( state ) => { if (state === "running" ) { // åä¿¡ãéå§ãããããvideoèŠçŽ ã«çŽæ¥æ¥ç¶ mediaConnection.receiver.attach(remoteVideoEl); } else if (state === "stopped" || state === "failed" ) { // åä¿¡ã忢ããããvideoèŠçŽ ããåæ mediaConnection.receiver.detach(remoteVideoEl); } } ); åä¿¡åŽã®ç¶æ
å€å㯠statechange ã€ãã³ãã§ç£èŠããŸãã running ã«ãªã£ãã attach() ã§videoèŠçŽ ã«çŽæ¥æ¥ç¶ã§ããŸããå
éšã®å€æåŠçïŒãã³ãŒãçïŒã¯intdash-RTC SDKãåŠçãããããæèããå¿
èŠããããŸããã 4. æ¥ç¶éå§ // 5. æ¥ç¶éå§ïŒrunningç¶æ
ãŸã§åŸ
æ©ïŒ await mediaConnection.start( { waitUntil : "running" } ); console . log ( "æ¥ç¶ã確ç«ããŸãã" ); start({ waitUntil: 'running' }) ã§æ¥ç¶ãéå§ãã running ç¶æ
ã«ãªããŸã§åŸ
æ©ããŸããããã«ãããæ¥ç¶ãå®å
šã«ç¢ºç«ããŠããæ¬¡ã®åŠçã«é²ããŸãã 5. UIæäœãšåæ¢åŠç // 6. UIæäœïŒæ åã»é³å£°ã®æå¹/ç¡å¹åãæ¿ãïŒ document . getElementById ( "toggle-video" )?. addEventListener ( "click" , async () => { const enabled = await mediaConnection.sender.setVideoEnabled( !mediaConnection.sender.videoEnabled, ); console .log( `æ å: ${ enabled ? "æå¹" : "ç¡å¹" } ` ); } ); document . getElementById ( "toggle-audio" )?. addEventListener ( "click" , async () => { const enabled = await mediaConnection.sender.setAudioEnabled( !mediaConnection.sender.audioEnabled, ); console .log( `é³å£°: ${ enabled ? "æå¹" : "ç¡å¹" } ` ); } ); // 7. 忢åŠçïŒã¯ãªãŒã³ã¢ããïŒ document . getElementById ( "stop" )?. addEventListener ( "click" , async () => { await mediaConnection. stop (); await mediaConnection.iscpConn. close (); localStream.getTracks(). forEach (( track ) => track. stop ()); console .log( "æ¥ç¶ãçµäºããŸãã" ); } ); setVideoEnabled / setAudioEnabled ã§æ åã»é³å£°ãåå¥ã«å¶åŸ¡ã§ããŸããçµäºæã¯ stop() ã§ã¡ãã£ã¢åŠçã忢ãã iscpConn.close() ã§intdashæ¥ç¶ãã¯ããŒãºããŸããå
éšã®ã¯ãŒã¯ã¬ããããããã¡ãèªåçã«ã¯ãªãŒã³ã¢ãããããŸãã å®éã®åäœã®ç¢ºèª ãã®ããã«ãWebRTCãšéè²ãªãç°¡æœãã§ãintdashã䜿ã£ãæ åã»é³å£°éä¿¡ãå®è£
ã§ããŸãã å®éã«ãµã³ãã«ã¢ããªãåäœãããæ§åã以äžã®åç»ã§ãã youtu.be ç»é¢ã®å·ŠåŽããµã³ãã«ã¢ããªãEasy Video Chatããå³åŽãintdashã«ä»å±ããç°¡æå¯èŠåããŒã«ãEdge Finderãã§ãã ãµã³ãã«ã¢ããªãEasy Video Chatãã«ã¯ãããªããïŒå·ŠïŒãšãçžæãïŒå³ïŒã®2ã€ã®æ å衚瀺ããããŸããä»åã®ãã¢ã§ã¯éä¿¡å
ãšåä¿¡å
ã®ããŒããåäžã«èšå®ããŠãããããå·Šå³ã«åãæ åã衚瀺ãããŠããŸããå·Šã®ãããªãã㯠getUserMedia ã§ååŸããããŒã«ã«æ åããã®ãŸãŸè¡šç€ºãããã®ãå³ã®ãçžæãã¯ãã®ããŒã«ã«ã¡ãã£ã¢ãintdashãžéä¿¡ããããšå床åä¿¡ããŠãã³ãŒãã»è¡šç€ºãããã®ã§ãã å®éã«äºè
éã§é話ããå Žåã¯ãçžæåŽã§ãåæ§ã«intdashãžã®æ¥ç¶ãšåä¿¡å
ããŒãã®æå®ãè¡ãããšã§ãåæ¹åã§ã®æ åã»é³å£°é話ãæç«ããŸãã åæã«Edge FinderåŽã§ã¯ãéä¿¡ãããH.264æ åãã¬ãŒã ãšPCMé³å£°ããŒã¿ããããããæç³»åã®ããŒã¿ãã€ã³ããšããŠintdashã«èšé²ãããŠããæ§åã確èªã§ããŸãã ãããªãæ¡åŒµæ§ ããŒã¿ã®å¯èŠåãšããã·ã¥ããŒãã®ã«ã¹ã¿ãã€ãº åç»ã§ç޹ä»ãããEdge Finderãã¯intdashã«æšæºã§ä»å±ããŠãããéåä¿¡ãããŠããããŒã¿ãããã«ç¢ºèªã§ããç°¡æããŒã«ã§ãã ããé«åºŠãªå¯èŠåãããã·ã¥ããŒãã®ã«ã¹ã¿ãã€ãºãå¿
èŠãªå Žåã¯ãåŒç€Ÿã®å¯èŠåã¢ããªã±ãŒã·ã§ã³ãVM2M Data Visualizerãããå©çšããã ããŸããããŒã³ãŒãã§æç³»åããŒã¿ã®ããã·ã¥ããŒããæ§ç¯ã§ããæ åãšã»ã³ãµãŒããŒã¿ãæå»åæãããåçããå€åœ©ãªãŠã£ãžã§ãããçµã¿åãããè§£æç»é¢ã®äœæã«å¯Ÿå¿ããŠããŸãã VM2M Data Visualizer: è€æ°ã®æ åãšæç³»åããŒã¿ãæå»åæããŠåçããã¿ã€ã ã©ã€ã³ãã¥ãŒ VM2M Data Visualizer: ã²ãŒãžã»ã°ã©ãã»ã¬ãŒããŒãã£ãŒããªã©å€åœ©ãªãŠã£ãžã§ãããçµã¿åãããã«ã¹ã¿ã ããã·ã¥ããŒã Appendix: ãµã³ãã«ã³ãŒãå
šæ ãããŸã§ã¹ãããããšã«åå²ããŠç޹ä»ããŠãããµã³ãã«ã³ãŒãã®å
šéãã以äžã«åæ²ããŸãã // 1. ã©ã€ãã©ãªã®import import { createMediaConnection } from "@aptpod/intdash-rtc" ; // 2. MediaConnectionã®äœæïŒintdashãžã®æ¥ç¶ãå
éšã§è¡ããŸãïŒ const { mediaConnection } = await createMediaConnection( { address : "your-intdash.example.jp" , // intdashæ¥ç¶ã¢ãã¬ã¹ projectUuid : "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" , // intdashãããžã§ã¯ãã®UUID nodeId : "yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy" , // éä¿¡å
ïŒèªååŽïŒã®ããŒãUUID enableTLS : true , apiToken : "your_token_here" , // intdash Web ConsoleããäœæããAPIããŒã¯ã³ïŒOAuth2ãµã€ã³ã€ã³ã䜿ãå Žåã¯apiTokenãçç¥ïŒ } , { sender : { // é³å£°ã«é¢ããèšå® audio : { codec : "PCM" , // PCM, OPUS, AACããµããŒã } , // æ åã«é¢ããèšå® video : { codec : "H264" , // H264, VP9ããµããŒã } , } , receiver : { sourceNodeIds : [ "zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz" ] , // éä¿¡çžæã®ããŒãUUID } , } , ); // 3. ããŒã«ã«ã¡ãã£ã¢ã¹ããªãŒã ã®ååŸãšèšå® const localStream = await navigator .mediaDevices. getUserMedia ( { video : true , audio : true , } ); await mediaConnection.sender.setLocalMediaStream(localStream); // ããŒã«ã«æ åãvideoèŠçŽ ã«è¡šç€º const localVideoEl = document . getElementById ( "local-video" ) as HTMLVideoElement ; localVideoEl.srcObject = new MediaStream (localStream.getVideoTracks()); localVideoEl.muted = true ; await localVideoEl.play(); // 4. åä¿¡ã¡ãã£ã¢ã¹ããªãŒã ã®åŠç const remoteVideoEl = document . getElementById ( "remote-video" , ) as HTMLVideoElement ; mediaConnection.receiver.on( "statechange" , ( state ) => { if (state === "running" ) { // åä¿¡ãéå§ãããããvideoèŠçŽ ã«çŽæ¥æ¥ç¶ mediaConnection.receiver.attach(remoteVideoEl); } else if (state === "stopped" || state === "failed" ) { // åä¿¡ã忢ããããvideoèŠçŽ ããåæ mediaConnection.receiver.detach(remoteVideoEl); } } ); // 5. æ¥ç¶éå§ïŒrunningç¶æ
ãŸã§åŸ
æ©ïŒ await mediaConnection.start( { waitUntil : "running" } ); console . log ( "æ¥ç¶ã確ç«ããŸãã" ); // 6. UIæäœïŒæ åã»é³å£°ã®æå¹/ç¡å¹åãæ¿ãïŒ document . getElementById ( "toggle-video" )?. addEventListener ( "click" , async () => { const enabled = await mediaConnection.sender.setVideoEnabled( !mediaConnection.sender.videoEnabled, ); console .log( `æ å: ${ enabled ? "æå¹" : "ç¡å¹" } ` ); } ); document . getElementById ( "toggle-audio" )?. addEventListener ( "click" , async () => { const enabled = await mediaConnection.sender.setAudioEnabled( !mediaConnection.sender.audioEnabled, ); console .log( `é³å£°: ${ enabled ? "æå¹" : "ç¡å¹" } ` ); } ); // 7. 忢åŠçïŒã¯ãªãŒã³ã¢ããïŒ document . getElementById ( "stop" )?. addEventListener ( "click" , async () => { await mediaConnection. stop (); await mediaConnection.iscpConn. close (); localStream.getTracks(). forEach (( track ) => track. stop ()); console .log( "æ¥ç¶ãçµäºããŸãã" ); } ); ãããã« æ¬èšäºã§ã¯ãintdash-RTC SDKã䜿ã£ããããªãã£ããã®å®è£
æ¹æ³ãèŠãŠããŸããã ãã€ã³ãã®ãŸãšã: WebRTCãšåçã®ç°¡æœãã§ãintdashçµç±ã®ãããªãã£ãããå®è£
å¯èœ æåã¯ãããªãã£ããããå§ããŠãå°æ¥ã¯ã»ã³ãµãŒããŒã¿ãå«ããã«ãã¢ãŒãã«ã·ã¹ãã ãžæ¡åŒµã§ããã®ãintdashã®åŒ·ã¿ã§ããåããã©ãããã©ãŒã ãåãSDKã§å¯Ÿå¿ã§ãããããæè¡éžå®ã§åŸæãããªã¹ã¯ãæžãããŸãã ã詊ããŠã¿ããããããå°ã詳ããç¥ãããããšããæ¹ã¯ããã²ãæ°è»œã« ãåãåãã ãã ãããæ¬ã©ã€ãã©ãªã¯çŸåšãåãåããããŒã¹ã§ã®å奿äŸãšãªã£ãŠããŸãã
æ¬èšäºã¯ 2026 幎 5 æ 28 æ¥ ã«å
¬éãããã The next generation of Amazon OpenSearch Serverless: Built from the ground up for agents ãã翻蚳ãããã®ã§ãã 察象èªè
åãã®æ³šèš: æ¬èšäºã¯æè¡çãªè©³çްãæãäžããããŒã³ãèšäºã§ãã倿Žç¹ãšãã®çç±ãç°¡æœã«ãŸãšããæŠèŠã¯ãé¢é£ãã AWS News Blog ã®èšäºãã芧ãã ããã æ¬æ¥ãAmazon OpenSearch Serverless ã®ã¢ãŒããã¯ãã£ããŒãããå·æ°ããããšãçºè¡šããŸããæ°ããã¢ãŒããã¯ãã£ã§ã¯ããªãŒãã¹ã±ãŒãªã³ã°ãåŸæ¥æ¯ã§æå€§ 20 åã«é«éåããã³ã³ãã¥ãŒãã£ã³ã°ããŒããŸã§ã¹ã±ãŒã«ã§ããããã«ãªããŸãããããŒã¯è² è·ã«åãããŠã¯ã©ã¹ã¿ãŒãããããžã§ãã³ã°ããå Žåãšæ¯ã¹ãŠã³ã¹ãã¯æå€§ 60% åæžã§ããŸããAmazon OpenSearch Service ã¯ããã¯ãã«ãã¬ãã·ã«ã«ããã€ããªããããšãŒãžã§ã³ãæ€çŽ¢ãçµ±åãããã«ãããŒãžãã®ãªãŒãã³ãœãŒã¹æ€çŽ¢ãšã³ãžã³ã§ãäœã¬ã€ãã³ã·ãŒãã€æ£ç¢ºã§é¢é£æ§ã®é«ãçµæãæäŸããŸããAmazon OpenSearch Serverless ã¯ããã®èªåã¹ã±ãŒãªã³ã°åã®ãããã€ãªãã·ã§ã³ã§ãã æè¿ã®ã¯ãŒã¯ããŒãã¯ãŸããŸãåçã§äºæž¬ãã«ãããªã£ãŠããŸããE ã³ããŒã¹ãã©ãããã©ãŒã ã§ã¯ããã©ãã·ã¥ã»ãŒã«æã«ãã©ãã£ãã¯ã 10 åã«æ¥å¢ããŸãã人工ç¥èœ (AI) ãšãŒãžã§ã³ãã¯ãè€æ°ã¹ãããã®ã¿ã¹ã¯ãæšè«ããéçšã§æ°çŸãã®åæãã¯ãã«ã¯ãšãªãããªã¬ãŒãããã®åŸã¢ã€ãã«ç¶æ
ã«ãªããŸãããã«ãããã³ã SaaS ã¢ããªã±ãŒã·ã§ã³ã§ã¯ã掻åãã¿ãŒã³ã倧ããç°ãªãæ°åã®ããã³ããåŠçããŸããããããã¯ãŒã¯ããŒãã«ã¯ãéèŠã«åãããŠã¹ã±ãŒã«ã¢ããããéèŠãäžããã°ãªãœãŒã¹ãè§£æŸã§ããã€ã³ãã©ãå¿
èŠã§ãã ããã§ã Amazon OpenSearch Serverless ã®ã¢ãŒããã¯ãã£ããŒãããåæ§ç¯ããŸãããæ°ããã¢ãŒããã¯ãã£ã§ã¯ãã³ã³ãã¥ãŒãã£ã³ã°ãšã¹ãã¬ãŒãžãåé¢ããŠããŸããã€ã³ãã©ã®ããããžã§ãã³ã°ã¯ååäœã§ã¯ãªãç§åäœã§å®äºããã¢ããªã±ãŒã·ã§ã³ãã¢ã€ãã«ç¶æ
ã®ãšãã«ã¯ã³ã³ãã¥ãŒãã£ã³ã°ããŒããŸã§ã¹ã±ãŒã«ããŠã³ããŸããæ¬èšäºã§ã¯ãæ°ããã¢ãŒããã¯ãã£ã®å
容ãã¢ããªã±ãŒã·ã§ã³ãžã®åœ±é¿ããã³ãºãªã³ãã¥ãŒããªã¢ã«ã§ã®äœ¿ãå§ãæ¹ã解説ããŸãã æ°ããããŒã³ãã«äŒŽããAmazon OpenSearch Serverless ã§ã¯ 2 ã€ã®ã¢ãŒããã¯ãã£ã«ååãä»ããŸãããæ¢åã®ã³ã¬ã¯ã·ã§ã³ã¯ Classic ã³ã¬ã¯ã·ã§ã³ãšåŒã³ãŸããæ°ããã¢ãŒããã¯ãã£ã¯ NextGen ãšåŒã³ãAWS ã³ã³ãœãŒã«ããæ°ããã³ã¬ã¯ã·ã§ã³ãäœæãããšãã®ããã©ã«ãã«ãªããŸããAPI ã§ NextGen ã¢ãŒããã¯ãã£ã䜿çšããã«ã¯ãCLI ã§ --generation NEXTGEN ãæå®ããŸããClassic ã¢ãŒããã¯ãã£ãåŒãç¶ã䜿çšããå Žåã¯ãCLI ã§ --generation CLASSIC ãæå®ãããããªãã·ã§ã³ã® --generation ãã©ã¡ãŒã¿ãçç¥ããŸãã ã¢ããªã±ãŒã·ã§ã³ãžã®åœ±é¿ æ°ããã¢ãŒããã¯ãã£ã¯ãããã©ãŒãã³ã¹ãã³ã¹ããã·ã³ãã«ãªãŠãŒã¶ãŒäœéšãšãã 3 ã€ã®æ±ã§æ¹åããããããŸãã ããã©ãŒãã³ã¹: ç§åäœã®ãªãŒãã¹ã±ãŒãªã³ã° OpenSearch Compute Unit (OCU) ã¯ãã€ã³ããã¯ã¹äœæãšæ€çŽ¢ã®ã¯ãŒã¯ããŒããæ¯ããã³ã³ãã¥ãŒãã£ã³ã°å®¹éã®åäœã§ããAmazon OpenSearch Serverless ã¯ã远å ã® OCU ãç§åäœã§ããããžã§ãã³ã°ã§ããããã«ãªããŸããããã©ãã£ãã¯ãå°çãããšãã«ã¯ãã¯ãŒã«ãŒããã§ã«é«è² è·ã«é¥ã£ãŠãã察å¿ããã®ã§ã¯ãªããéèŠã«åãããŠäºåã«ãªãœãŒã¹ã远å ããŸããåãä»çµã¿ã§ããã©ãã£ãã¯ãäžãããšã€ã³ãã©ãçŽ æ©ãã¹ã±ãŒã«ããŠã³ããŸããæ°ããã¢ãŒããã¯ãã£ã¯ã容éã®ã¹ã±ãŒã«é床ã以åã®ã¢ãŒããã¯ãã£ã® æå€§ 20 å ã«éããããããã©ãã£ãã¯ã®æ¥å¢æã«ãäžè²«ããããã©ãŒãã³ã¹ããŠãŒã¶ãŒã«æäŸã§ãã容éãäžèŠã«ãªãã°æ¯æããæ¢ãŸããŸãã ã³ã¹ãå¹ç: 䜿ã£ãåã ãæ¯æã ã€ã³ããã¯ã¹äœæãæ€çŽ¢ãã¹ãã¬ãŒãžããã¯ãã«ã€ã³ããã¯ã¹ã® GPU ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ã¯ãããããç¬ç«ããŠèšæž¬ã»èª²éããããããã¯ãŒã¯ããŒãã®å次å
ãåå¥ã«ææ¡ããæé©åã§ããŸãã ã³ã³ãã¥ãŒãã£ã³ã°ãšã¹ãã¬ãŒãžã®åé¢: OpenSearch Serverless ã§ã¯ã³ã³ãã¥ãŒãã£ã³ã°ãšã¹ãã¬ãŒãžãå®å
šã«åé¢ãããŠãããã³ã¬ã¯ã·ã§ã³ã«ä¿åãããŠããããŒã¿éãšã¯ç¡é¢ä¿ã« OCU ãã¹ã±ãŒã«ã¢ããã»ã¹ã±ãŒã«ããŠã³ã§ããŸããããã¯ãã€ã³ããã¯ã¹äœæ OCU ãšæ€çŽ¢ OCU ã®äž¡æ¹ããã¢ã¯ã»ã¹ã§ããæ°ããã¹ãã¬ãŒãžå±€ã«ãã£ãŠå®çŸãããŠããŸããè€æ°ã®ã€ã³ããã¯ã¹ã«ããŒã¿ãæ ŒçŽããŠããŠããããŒã¿ã®ã€ã³ããã¯ã¹äœæãæ€çŽ¢ãå®éã«è¡ã£ãŠããªããã°ãã³ã³ãã¥ãŒãã£ã³ã°ã³ã¹ãã¯çºçããŸãããã¢ã€ãã«æéãé·ãã¯ãŒã¯ããŒãã§ã¯ãããŒã¯å®¹éã«åãã㊠OpenSearch Service ãã¡ã€ã³ãããããžã§ãã³ã°ããå Žåãšæ¯ã¹ãŠãæ°ããã¢ãŒããã¯ãã£ã«ããã€ã³ãã©ã³ã¹ããæå€§ 60% åæžã§ããŸãã ãŒããŸã§ã®ã¹ã±ãŒã«: ã¢ã€ãã«ã¿ã€ã ã¢ãŠãæé (10 å) ã®éã«ãªã¯ãšã¹ããå°çããªããšããµãŒãã¹ã¯ã³ã³ãã¥ãŒãã£ã³ã°ãªãœãŒã¹ãè§£æŸããOCU ã®äœ¿çšéã¯ãŒããŸã§ã¹ã±ãŒã«ããŠã³ããŸãããã©ãã£ãã¯ãåéãããšãçŽ 10 ç§ã§å®¹éã埩掻ããŸããã¹ã±ãŒã«ããŠã³äžãããµãŒãã¹ã¯å°çãããªã¯ãšã¹ãããã¥ãŒã«å
¥ãã容éãå©çšå¯èœã«ãªã次第åŠçããããããªã¯ãšã¹ããç Žæ£ããããšã¯ãããŸãããã¹ã±ãžã¥ãŒã«ãããããããžã§ããããŒã±ãã£ã³ã°ãã£ã³ããŒã³ã®åãªã©ããã©ãã£ãã¯ã®æ¥å¢ãäºæ³ãããå Žåã¯ãæ¬çªãã©ãã£ãã¯ãéä¿¡ããåã«è»œéãªã¯ãšãª (äŸ: size=1 ã® match_all ) ãéä¿¡ããŠã³ã¬ã¯ã·ã§ã³ããŠã©ãŒã ã¢ããããŠãããŸããããã«ãããæåã®å®ãªã¯ãšã¹ãã§ãŠãŒã¶ãŒãäœæããã¬ã€ãã³ã·ãŒãæããããŸããã€ã³ããã¯ã¹äœæãšæ€çŽ¢ã¯ç¬ç«ããŠã¹ã±ãŒã«ããŸããæ€çŽ¢ãªã¯ãšã¹ãããªããã°ãæ€çŽ¢ OCU ã¯ãŒããŸã§ã¹ã±ãŒã«ããŸãããã€ã³ããã¯ã¹äœæãªã¯ãšã¹ããããã° OpenSearch Serverless ã¯ã€ã³ããã¯ã¹äœæ OCU ãç¶æããŸããéåãã§ãåãã§ãã ãã¯ãã«ã¯ãŒã¯ããŒãåãã® GPU ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³: æ°ããã¢ãŒããã¯ãã£ã§äœæãããã¯ãã«ã³ã¬ã¯ã·ã§ã³ã§ã¯ãOpenSearch Serverless ã GPU ããã¯ãšã³ãã®ã³ã³ãã¥ãŒãã£ã³ã°ãèªåçã«äœ¿çšããŠãHierarchical Navigable Small World (HNSW) ãã¯ãã«ã€ã³ããã¯ã¹ã®æ§ç¯ãå éããCPU ã®ã¿ã§æ§ç¯ããå Žåãšæ¯ã¹ãŠã€ã³ããã¯ã¹äœææéã倧å¹
ã«ççž®ããŸããGPU ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ã¯ãå
šäœã®ã€ã³ããã¯ã¹äœææéãšã³ã¹ããåæžã§ããæ©äŒãããã°èªåçã«æå¹ã«ãªããŸããClassic ã¢ãŒããã¯ãã£ã§ã¯ãAPI ãä»ããŠã³ã¬ã¯ã·ã§ã³ã¬ãã«ã§ GPU ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ã®ãªããã€ã³ã»ãªããã¢ãŠããå¿
èŠã§ãããNextGen ã³ã¬ã¯ã·ã§ã³ã§ç¹å®ã®ã€ã³ããã¯ã¹ã® GPU ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ãç¡å¹ã«ãããå Žåã¯ã ã€ã³ããã¯ã¹ã¬ãã«ã§ãªã¢ãŒãã€ã³ããã¯ã¹ãã«ãèšå®ããªã ã«ã§ããŸããGPU ã®äœ¿çšéã¯è«æ±æžã«å¥ã®é
ç®ãšããŠè¡šç€ºãããããããã€ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ãæå¹ã§ããããããã£ãããå®å
šã«ææ¡ã§ããŸããGPU ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ã®ä»çµã¿ãããã©ãŒãã³ã¹ãã³ãããŒã¯ã®è©³çްã¯ã Amazon OpenSearch Service ã® GPU ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ã§ 10 åã¹ã±ãŒã«ã®ãã¯ãã«ããŒã¿ããŒã¹ã 1 æé以å
ã«æ§ç¯ãã ãåç
§ããŠãã ããã ã·ã³ãã«ãªäœéš: æ¬çªç°å¢ãŸã§ã®ã¹ãããåæž OpenSearch Serverless ãæ¥ã
éçšããäœéšãã·ã³ãã«ã«ãªããŸããã æ°ããã¢ãŒããã¯ãã£ã§ã¯ãã³ã¬ã¯ã·ã§ã³ãããããžã§ãã³ã°ããŠæ°ç§ã§ãªã¯ãšã¹ããéä¿¡ãå§ããããŸãã容éèšç»ããµã€ãžã³ã°ã®å€æãã€ã³ãã©ã®ãŠã©ãŒã ã¢ããåŸ
ã¡ãäžèŠã§ããããã«ãããAI ãšãŒãžã§ã³ãããªã³ããã³ãã§ãã¯ãã«æ€çŽ¢ãæ€çŽ¢ã¹ããããèµ·åããé
å»¶ãªãã¬ã¹ãã³ã¹ãæåŸ
ã§ããããšãŒãžã§ã³ãã¯ãŒã¯ããŒãã« Amazon OpenSearch Serverless ãèªç¶ãšé©åããŸãã 䜿ãå§ããããã«é«éåãããããã³ã³ãœãŒã«ã« Express Create ãå°å
¥ããŸãããã³ã¬ã¯ã·ã§ã³åãšã³ã¬ã¯ã·ã§ã³ã¿ã€ããæå®ããExpress Create ãéžã¶ãšããããã¯ãŒã¯ãæå·åãã¢ã¯ã»ã¹ããªã·ãŒã®äºåèšå®ãªãã§ãã³ã¬ã¯ã·ã§ã³ãæ°ç§ã§ã¢ã¯ãã£ãã«ãªããŸããã¯ãŒã¯ããŒãã«å¿
èŠã§ããã°ãåŸãã远å ã§ããŸãã ã³ã¬ã¯ã·ã§ã³ã°ã«ãŒããšã³ã¬ã¯ã·ã§ã³ã¯ãAWS Command Line Interface (AWS CLI) ã AWS SDK ã䜿ã£ãŠããã°ã©ã ããäœæããããšãã§ããŸããAWS CloudFormation ã®ãµããŒããè¿æ¥æäŸäºå®ã§ãã æ°ããã¢ãŒããã¯ãã£ã§ã¯ã on.aws ãã¡ã€ã³äžã« 2 ã€ã®ãšã³ããã€ã³ã圢åŒãå°å
¥ãããŸãããã³ã¬ã¯ã·ã§ã³åäœã®ãšã³ããã€ã³ã ( <collectionId>.aoss.<region>.on.aws ) ã¯ãã³ã¬ã¯ã·ã§ã³ 1 ã€ã«ã€ããšã³ããã€ã³ã 1 ã€ãšããããããŸã§ãšåãåäœã§ããã¢ã«ãŠã³ãåäœã®ãªãŒãžã§ãã«ãšã³ããã€ã³ã ( <accountId>.aoss.<region>.on.aws ) ã¯æ°ããã1 ã€ã®ãã¹ãåã§å
šã³ã¬ã¯ã·ã§ã³ãåŠçãã察象ã®ã³ã¬ã¯ã·ã§ã³ã¯åãªã¯ãšã¹ãã§ x-amz-aoss-collection-name ãŸã㯠x-amz-aoss-collection-id ããããŒã§æå®ããŸããã³ã¬ã¯ã·ã§ã³æ°ã«é¢ä¿ãªããã³ãã¯ã·ã§ã³ããŒã« 1 ã€ãTransport Layer Security (TLS) ã»ãã·ã§ã³ 1 ã€ã管çãããšã³ããã€ã³ã 1 ã€ã§æžã¿ãŸããããã³ãããšã«ç¬èªã®ã³ã¬ã¯ã·ã§ã³ãå²ãåœãŠããã«ãããã³ãã¯ãŒã¯ããŒãã§ã¯ã倧ããªæ¹åã«ãªããŸããäž¡æ¹ã®ãšã³ããã€ã³ãã¯æšæºã® AWS PrivateLink ã䜿çšãããããä»ã® AWS ãµãŒãã¹ãšåæ§ã«ãVPC ã³ã³ãœãŒã«ã EC2 API ãã Virtual Private Cloud (VPC) ãšã³ããã€ã³ããäœæã§ããŸããPrivate Domain Name System (DNS) ã¯èªåã§æ§æããããããå
ã®ã¢ãŒããã¯ãã£ã§å¿
èŠã ã£ã Amazon Route 53 ãã©ã€ããŒããã¹ããŸãŒã³ã転éã«ãŒã«ãã«ã¹ã¿ã DNS ã€ã³ãã©ãäžèŠã«ãªããŸããã¯ãã¹ VPCãã¯ãã¹ã¢ã«ãŠã³ãããªã³ãã¬ãã¹ããã®ã¢ã¯ã»ã¹ã¯ã远å ã®ã»ããã¢ãããªãã«æšæºã® vpce-* DNS åã§åäœããŸãã ã³ã¬ã¯ã·ã§ã³ã°ã«ãŒãã¯ãã³ã¬ã¯ã·ã§ã³ãæŽçããæ°ããåäœ ã§ãã ã³ã¬ã¯ã·ã§ã³ã°ã«ãŒã ã䜿ããšãè€æ°ã®ã³ã¬ã¯ã·ã§ã³éã§ã³ã³ãã¥ãŒãã£ã³ã°å®¹éãå
±æã§ãããã©ãã£ãã¯ãã¿ãŒã³ãè£å®çãªå°èŠæš¡ã³ã¬ã¯ã·ã§ã³ã®ã³ã¹ããåæžã§ããŸããåãã°ã«ãŒãå
ã®ã³ã¬ã¯ã·ã§ã³ã«ç°ãªã AWS Key Management Service (AWS KMS) ããŒãå²ãåœãŠãããšãã§ããã³ã¹ãå¹çãšã³ã¬ã¯ã·ã§ã³åäœã®æå·ååé¢ã®äž¡æ¹ãåŸãããŸããæ°ããã¢ãŒããã¯ãã£ã§ã³ã¬ã¯ã·ã§ã³ãäœæããå Žåãã³ã¬ã¯ã·ã§ã³ã°ã«ãŒãã¯å¿
é ã§ãã ããŒãžã§ã³ãšã¢ããã°ã¬ãŒãã管çããæéãªããOpenSearch ãªãŒãã³ãœãŒã¹ãªãªãŒã¹ã®å©ç¹ãåŸãããŸãããµãŒãã¹ã¯ã¢ããã¹ããªãŒã ã®ãªãªãŒã¹ãèªåçã«è¿œè·¡ããŸãã Amazon OpenSearch Serverless 㯠Vercel Marketplace ã§ãå©çšå¯èœã«ãªã£ãŠãããéçºè
㯠Vercel ãããžã§ã¯ãããæ€çŽ¢ã€ã³ãã©ãçŽæ¥è¿œå ã§ããŸããå§ä»»ã¢ã¯ã»ã¹ãéããŠæ¢åã® AWS ã¢ã«ãŠã³ãããªã³ã¯ããããAWS ãåããŠã®å Žå㯠USD $100 ã® AWS ã¯ã¬ãžããä»ãã® Limited Scope Account ãéããŠäœ¿ãå§ããããŸãã ãã®çµ±åã§ã¯ãé©åãªããã©ã«ãããŒããŸã§ã®ã¹ã±ãŒã«èª²éããããªãã¯ãšã³ããã€ã³ããAWS ãããŒãžãæå·åãåããã³ã¬ã¯ã·ã§ã³ãäœæãããæ¥ç¶æ
å ±ã Vercel ãããžã§ã¯ãã®ç°å¢å€æ°ãšããŠèªåçã«èšå®ãããŸãããã«ããã¹ãæ€çŽ¢ã§ããã»ãã³ãã£ãã¯ã AI ãæŽ»çšããæ€çŽ¢ã§ãããŠãŒã¹ã±ãŒã¹ã«å¿ã㊠Search ãŸã㯠Vector Search ã®ã³ã¬ã¯ã·ã§ã³ã¿ã€ããéžã¹ãŸãã ã¢ãŒããã¯ãã£ã®ä»çµã¿ æ°ãã Amazon OpenSearch Serverless ã¢ãŒããã¯ãã£ã¯ãã³ã³ãã¥ãŒãã£ã³ã°ãšã¹ãã¬ãŒãžãå®å
šã«åé¢ããŸããOCU ã¯ã¹ããŒãã¬ã¹ã§ãã€ã³ããã¯ã¹äœæ OCU ãšæ€çŽ¢ OCU ã®äž¡æ¹ããã¢ã¯ã»ã¹å¯èœãªåæ£å
±æã¹ãã¬ãŒãžå±€ããèªã¿æžãããŸããã¹ãã¬ãŒãžå±€ã¯é«ãèä¹
æ§ã念é ã«èšèšãããŠãããããŒã¿ãåŠçããã³ã³ãã¥ãŒãã£ã³ã°ããŒããšã¯ç¬ç«ããŠããŒã¿ãå©çšå¯èœã«ä¿ã¡ãŸãã ãã®èšèšã¯ãå®çšäž 2 ã€ã®å¹æããããããŸãã é«éãªããããžã§ãã³ã°ã ããŒãã¹ãã©ããããããŒã«ã«ãã£ã¹ã¯ããªããããæ°ãã OCU ã¯æ°ç§ã§ãªã¯ãšã¹ãã®åŠçãéå§ããŸããOCU ã¯å
±æã¹ãã¬ãŒãžå±€ãããŠã³ãããããã«åŠçãéå§ããŸãã å¹ççãªã¹ã±ãŒã«ããŠã³ã ããŒã¿ã OCU äžã«ååšããããšããªããããä¿åãããããŒã¿ã«åœ±é¿ãäžããã«ã¢ã€ãã«å®¹éãè§£æŸã§ããŸãããã©ãã£ãã¯ãäžãããšã³ã³ãã¥ãŒãã£ã³ã°ãªãœãŒã¹ãè§£æŸãããããã«å¿ããŠã³ã¹ããäžãããŸãã ã¢ãŒããã¯ãã£ã®æ¯èŒ 次ã®è¡šã§ãå
ã®ã¢ãŒããã¯ãã£ãšæ°ããã¢ãŒããã¯ãã£ã®äž»ãªéãããŸãšããŸãã æ©èœ Classic ã¢ãŒããã¯ã㣠NextGen ã¢ãŒããã¯ã㣠æå°å®¹é 2 OCU (åžžæçšŒå) 0 OCU (ãŒããŸã§ã®ã¹ã±ãŒã«) ã¹ã±ãŒãªã³ã°é床 ååäœ ç§åäœ ã¹ãã¬ãŒãž ã³ã³ãã¥ãŒãã£ã³ã°ããŒãããšã®ããŒã«ã«ã¹ãã¬ãŒãž 忣å
±æã¹ãã¬ãŒãž (åé¢) ã³ã¬ã¯ã·ã§ã³ã®æŽç åå¥ã³ã¬ã¯ã·ã§ã³ (ããã©ã«ã) ã³ã¬ã¯ã·ã§ã³ã°ã«ãŒã (ãªãã·ã§ã³) ã³ã¬ã¯ã·ã§ã³ã°ã«ãŒã (å¿
é ) ãŒãããã®ã³ãŒã«ãã¹ã¿ãŒã 該åœãªã (åžžæçšŒå) çŽ 10 ç§ ãšã³ããã€ã³ã ã³ã¬ã¯ã·ã§ã³åäœã®ãšã³ããã€ã³ã ãªãŒãžã§ãã«ãšã³ããã€ã³ã (ã¢ã«ãŠã³ãããšã«éç) OpenSearch Service ãã¡ã€ã³ã«å¯Ÿããã³ã¹ã ããŒã¹ã©ã€ã³ æå€§ 60% äœã³ã¹ã ã¹ã±ãŒãªã³ã°é床 (Classic æ¯) ããŒã¹ã©ã€ã³ ããŒã¹ã©ã€ã³ã®æå€§ 20 å ãŠã©ãŒã¯ã¹ã«ãŒ: ãã¯ãã«ã³ã¬ã¯ã·ã§ã³ã®äœæãšãŒããŸã§ã®ã¹ã±ãŒã«ã®èŠ³å¯ ãã®ãŠã©ãŒã¯ã¹ã«ãŒã§ã¯ãExpress Create ã§ãã¯ãã«æ€çŽ¢ã³ã¬ã¯ã·ã§ã³ãäœæããåã蟌ã¿ãæã€ããã€ãã®ãµã³ãã«ããã¥ã¡ã³ããã€ã³ããã¯ã¹ããk-nearest neighbor (k-NN) ã¯ãšãªãå®è¡ããAmazon CloudWatch ã§ã³ã¬ã¯ã·ã§ã³ããŒããŸã§ã¹ã±ãŒã«ããæ§åã芳å¯ããŸããå
šäœã§çŽ 10 åããããŸãã åææ¡ä»¶ Amazon OpenSearch Serverless ã³ã¬ã¯ã·ã§ã³ãäœæããæš©éãæã€ AWS ã¢ã«ãŠã³ãã é©åãªèªèšŒæ
å ±ã§æ§æããã AWS Command Line Interface (AWS CLI)ã curl 7.75 以é (çµã¿èŸŒã¿ã® --aws-sigv4 ãµããŒãçš)ã ã¹ããã 1: ã»ãã¥ãªãã£ããªã·ãŒãæ§æãã æå·åããããã¯ãŒã¯ãããŒã¿ã¢ã¯ã»ã¹ããªã·ãŒãäœæããŸããã³ã¬ã¯ã·ã§ã³ãäœæããåã«ããããååšããŠããå¿
èŠããããŸãã # Create an encryption policy aws opensearchserverless create-security-policy \ --name product-vectors-encryption \ --type encryption \ --policy '{"Rules":[{"ResourceType":"collection","Resource":["collection/product-vectors"]}],"AWSOwnedKey":true}' \ --endpoint-url "https://aoss.us-east-2.amazonaws.com" \ --region "us-east-2" # Create a network policy (public access for this tutorial) aws opensearchserverless create-security-policy \ --name product-vectors-network \ --type network \ --policy '[{"Rules":[{"ResourceType":"collection","Resource":["collection/product-vectors"]},{"ResourceType":"dashboard","Resource":["collection/product-vectors"]}],"AllowFromPublic":true}]' \ --endpoint-url "https://aoss.us-east-2.amazonaws.com" \ --region "us-east-2" # Get your principal ARN PRINCIPAL_ARN=$(aws sts get-caller-identity --query 'Arn' --output text) # Create a data access policy aws opensearchserverless create-access-policy \ --name product-vectors-data \ --type data \ --policy "[{\"Rules\":[{\"ResourceType\":\"index\",\"Resource\":[\"index/product-vectors/*\"],\"Permission\":[\"aoss:CreateIndex\",\"aoss:DescribeIndex\",\"aoss:UpdateIndex\",\"aoss:DeleteIndex\",\"aoss:ReadDocument\",\"aoss:WriteDocument\"]}],\"Principal\":[\"\${PRINCIPAL_ARN}\"]}]" \ --endpoint-url "https://aoss.us-east-2.amazonaws.com" \ --region "us-east-2" 泚: AWS ã³ã³ãœãŒã«ã® Express Create ã¯ãŒã¯ãããŒã䜿çšãããšããããã®ããªã·ãŒã¯èªåçã«äœæãããŸãã éèŠ: ããŒã¿ã¢ã¯ã»ã¹ããªã·ãŒãäœæããåŸãã³ã¬ã¯ã·ã§ã³ãžã® API åŒã³åºããè¡ãåã«ãããªã·ãŒãäŒæãããŸã§çŽ 30ã60 ç§åŸ
ã¡ãŸãã403 Forbidden ãšã©ãŒãçºçããå Žåã¯ãåŸ
ã£ãŠããå詊è¡ããŠãã ããã ã¹ããã 2: ã³ã¬ã¯ã·ã§ã³ã°ã«ãŒããšã³ã¬ã¯ã·ã§ã³ãäœæãã ãŒããŸã§ã®ã¹ã±ãŒã«å®¹éå¶éãæã€ã³ã¬ã¯ã·ã§ã³ã°ã«ãŒããäœæãããã®äžã«ãã¯ãã«æ€çŽ¢ã³ã¬ã¯ã·ã§ã³ãäœæããŸãã # Create a collection group with scale-to-zero enabled (min OCU = 0) aws opensearchserverless create-collection-group \ --name product-search-cg \ --generation NEXTGEN \ --standby-replicas ENABLED \ --capacity-limits "minIndexingCapacityInOCU=0,maxIndexingCapacityInOCU=4,minSearchCapacityInOCU=0,maxSearchCapacityInOCU=4" \ --endpoint-url "https://aoss.us-east-2.amazonaws.com" \ --region "us-east-2" # Create a vector search collection in the group aws opensearchserverless create-collection \ --name product-vectors \ --type VECTORSEARCH \ --collection-group-name product-search-cg \ --endpoint-url "https://aoss.us-east-2.amazonaws.com" \ --region "us-east-2" ã³ã¬ã¯ã·ã§ã³ã®ã¹ããŒã¿ã¹ã¯æ°ç§ã§ ACTIVE ã«é·ç§»ããŸãã ã¹ããã 3: ãã¯ãã«ã€ã³ããã¯ã¹ãäœæãã ã³ã¬ã¯ã·ã§ã³ãšã³ããã€ã³ããååŸãã3 次å
ãã¯ãã«ã䜿ã£ã k-NN ã€ã³ããã¯ã¹ãäœæããŸãã ENDPOINT=$(aws opensearchserverless batch-get-collection \ --names product-vectors \ --query 'collectionDetails[0].collectionEndpoint' \ --output text \ --endpoint-url "https://aoss.us-east-2.amazonaws.com" \ --region "us-east-2") awscurl --service aoss --region us-east-2 \ -XPUT "${ENDPOINT}/items" \ -H "Content-Type: application/json" \ -d '{ "settings": {"index.knn": true}, "mappings": { "properties": { "description": {"type": "text"}, "embedding": {"type": "knn_vector", "dimension": 3, "method": {"name": "hnsw", "space_type": "cosinesimil", "engine": "faiss"}} } } }' 泚: ã³ã¬ã¯ã·ã§ã³ããŒããŸã§ã¹ã±ãŒã«ããŠããå Žåã容éãã¹ã±ãŒã«ã¢ããããéãæåã®ãªã¯ãšã¹ãã«ã¯æ°ç§ãããå¯èœæ§ããããŸãããªã¯ãšã¹ããã¿ã€ã ã¢ãŠãããå Žåã¯ã10ã15 ç§åŸ
ã£ãŠããå詊è¡ããŠãã ããã ã¹ããã 4: åã蟌ã¿ãæã€ãµã³ãã«ããã¥ã¡ã³ããã€ã³ããã¯ã¹ãã awscurl --service aoss --region us-east-2 \ -XPOST "${ENDPOINT}/items/_bulk" \ -H "Content-Type: application/json" \ -d ' { "index": { "_id": "1" } } { "description": "Wireless noise-cancelling headphones", "embedding": [0.8, 0.2, 0.1] } { "index": { "_id": "2" } } { "description": "Portable Bluetooth speaker", "embedding": [0.7, 0.3, 0.2] } { "index": { "_id": "3" } } { "description": "Over-ear studio monitor headphones", "embedding": [0.9, 0.1, 0.05] } ' ã¹ããã 5: k-NN ã¯ãšãªãå®è¡ãã ã¯ãšãªãã¯ãã«ã«æãè¿ã 2 ã€ã®è¿åãæ€çŽ¢ããŸããã¯ãšãªãå®è¡ããåã«ããã¯ãã«ã€ã³ããã¯ã¹ã®ãã«ãã®ãããã€ã³ããã¯ã¹äœæåŸ 30 ç§åŸ
ã¡ãŸãã awscurl --service aoss --region us-east-2 \ -XGET "${ENDPOINT}/items/_search" \ -H "Content-Type: application/json" \ -d '{ "query": { "knn": { "embedding": { "vector": [0.85, 0.15, 0.08], "k": 2 } } } }' ã¬ã¹ãã³ã¹ã§ã¯ãæãé¡äŒŒãã 2 ã€ã®ã¢ã€ãã ãã€ãŸãã¯ãšãªãã¯ãã«ã«æãè¿ãåã蟌ã¿ãæã€ããããã©ã³ã®ããã¥ã¡ã³ããè¿ãããŸãã ãã®ã¯ãšãªã¯ OpenSearch UI ã§ãå®è¡ã§ããŸããAmazon OpenSearch Service ã³ã³ãœãŒã«ã§ã³ã¬ã¯ã·ã§ã³ã«ç§»åããOpenSearch UI Application URL ãéžæããŸããæ¬¡ã« ãã¡ãã®ããã° ã®æé ã«åŸã£ãŠã¯ãŒã¯ã¹ããŒã¹ãäœæããŸãããã®åŸãDev Tools ã«ç§»åããŠã次ã®ã¯ãšãªã貌ãä»ããŠå®è¡ããŸãã GET items/_search { "query": { "knn": { "embedding": { "vector": [0.85, 0.15, 0.08], "k": 2 } } } } ã¹ããã 6: ãŒããŸã§ã®ã¹ã±ãŒã«ã芳å¯ãã äžå®æé掻åããªã (ã€ã³ããã¯ã¹äœæãæ€çŽ¢ã®ãã©ãã£ãã¯ããªã) ãšãã³ã¬ã¯ã·ã§ã³ã°ã«ãŒã㯠0 OCU ãŸã§ã¹ã±ãŒã«ããŠã³ããŸããæ¬¡ã®ã³ãã³ãã§ç¢ºèªããŸãã aws opensearchserverless batch-get-collection-group \ --names product-search-cg \ --endpoint-url "https://aoss.us-east-2.amazonaws.com" \ --region "us-east-2" ã¬ã¹ãã³ã¹ã§ãã³ã¬ã¯ã·ã§ã³ãã¹ã±ãŒã«ããŠã³ããåŸã currentCapacity.search.capacityInOcu ãš currentCapacity.indexing.capacityInOcu ã 0 ãšè¡šç€ºãããŸãã Amazon OpenSearch Service ã³ã³ãœãŒã«ã® ã³ã¬ã¯ã·ã§ã³ã°ã«ãŒã ããŒãžã«ç§»åããããšãã§ããŸããã³ã¬ã¯ã·ã§ã³ã°ã«ãŒããéžæãã ã¢ãã¿ãªã³ã° ã»ã¯ã·ã§ã³ãŸã§ã¹ã¯ããŒã«ããŸãã ã€ã³ããã¯ã¹äœæå®¹é (OCU) ãš æ€çޢ容é (OCU) ãšãã 2 ã€ã®ãã£ãŒãã確èªã§ããŸãã10 åéã¢ã€ãã«ç¶æ
(ã€ã³ããã¯ã¹äœæãæ€çŽ¢ãªã¯ãšã¹ãããªãç¶æ
) ãç¶ããšãäž¡æ¹ã®ã¡ããªã¯ã¹ããŒããŸã§äžããããµãŒãã¹ãã³ã¬ã¯ã·ã§ã³ã®ã³ã³ãã¥ãŒãã£ã³ã°ãªãœãŒã¹ããã¹ãŠè§£æŸããããšã確èªã§ããŸãã ã¯ãªãŒã³ã¢ãã ç¶ç¶çãªèª²éãé¿ããããããã®ãŠã©ãŒã¯ã¹ã«ãŒã§äœæãããªãœãŒã¹ã¯çµãã£ããåé€ããŸããæåã«ã³ã¬ã¯ã·ã§ã³ãåé€ããŠã³ã¬ã¯ã·ã§ã³ã°ã«ãŒãã空ã«ããæ¬¡ã«ã°ã«ãŒããåé€ããæåŸã«ã»ãã¥ãªãã£ããªã·ãŒãšã¢ã¯ã»ã¹ããªã·ãŒãåé€ããŸãã # Look up the collection ID, then delete the collection COLLECTION_ID=$(aws opensearchserverless batch-get-collection \ --names product-vectors \ --query 'collectionDetails[0].id' \ --output text \ --endpoint-url "https://aoss.us-east-2.amazonaws.com" \ --region "us-east-2") aws opensearchserverless delete-collection \ --id "${COLLECTION_ID}" \ --endpoint-url "https://aoss.us-east-2.amazonaws.com" \ --region "us-east-2" # Look up the collection group ID, then delete the collection group GROUP_ID=$(aws opensearchserverless batch-get-collection-group \ --names product-search-cg \ --query 'collectionGroupDetails[0].id' \ --output text \ --endpoint-url "https://aoss.us-east-2.amazonaws.com" \ --region "us-east-2") aws opensearchserverless delete-collection-group \ --id "${GROUP_ID}" \ --endpoint-url "https://aoss.us-east-2.amazonaws.com" \ --region "us-east-2" # Delete the security and access policies aws opensearchserverless delete-security-policy \ --name product-vectors-encryption \ --type encryption \ --endpoint-url "https://aoss.us-east-2.amazonaws.com" \ --region "us-east-2" aws opensearchserverless delete-security-policy \ --name product-vectors-network \ --type network \ --endpoint-url "https://aoss.us-east-2.amazonaws.com" \ --region "us-east-2" aws opensearchserverless delete-access-policy \ --name product-vectors-data \ --type data \ --endpoint-url "https://aoss.us-east-2.amazonaws.com" \ --region "us-east-2" æ¢åã®ã³ã¬ã¯ã·ã§ã³ã®ã¢ããã°ã¬ãŒã æ°ããã¢ãŒããã¯ãã£ã«ç§»è¡ããã«ã¯ãæ°ããã³ã¬ã¯ã·ã§ã³ã°ã«ãŒããšã³ã¬ã¯ã·ã§ã³ãäœæããããŒã¿ãåã€ã³ããã¯ã¹ããŸããåã€ã³ããã¯ã¹ã®æé 㯠Amazon OpenSearch Ingestion ã䜿ã£ã Amazon OpenSearch Serverless ã§ã®åã€ã³ããã¯ã¹ã®å®è¡ ã«è©³ãã解説ããŠããŸããã¯ãšãªãšã€ã³ããã¯ã¹ãããã³ã°ã¯åããŸãŸã§ãå€ããã®ã¯ã³ã¬ã¯ã·ã§ã³ãšã³ããã€ã³ãã ãã§ããæ°ããéçãªãŒãžã§ãã«ãšã³ããã€ã³ããªãããã㯠1 åéãã®æŽæ°ã§æžã¿ãŸãã æ°ããã¢ãŒããã¯ãã£ã¯ SEARCH ãš VECTORSEARCH ã®ã³ã¬ã¯ã·ã§ã³ã¿ã€ãããµããŒãããŸããTIMESERIES ã¯ããŒã³ãæã«ã¯ãµããŒããããŸããã ãŸãšã æ°ãã Amazon OpenSearch Serverless ã¢ãŒããã¯ãã£ã¯æ¬æ¥ããå©çšå¯èœã§ããExpress Create ã䜿ãã°æåã® OpenSearch Serverless ã³ã¬ã¯ã·ã§ã³ãæ°ç§ã§äœæããæ¬çªãã©ãã£ãã¯ã«å¯Ÿå¿ããããã¹ã±ãŒã«ã§ããã¢ã€ãã«ç¶æ
ã«ãªãã° OpenSearch Serverless ã®ã³ã³ãã¥ãŒãã£ã³ã°ã³ã¹ãã¯ãŒããŸã§äžãããŸãã è©³çŽ°ã¯æ¬¡ãåç
§ããŠãã ããã Amazon OpenSearch Service ããã¥ã¡ã³ã ã Amazon OpenSearch Service ã³ã³ãœãŒã« ã Amazon OpenSearch Service æéããŒãž ã 質åããã£ãŒãããã¯ãããã°ããµããŒãã±ãŒã¹ãéãããAWS ã¢ã«ãŠã³ãããŒã ãéããŠé£çµ¡ããŠãã ãããçãããæ§ç¯ãããã®ã楜ãã¿ã«ããŠããŸãã èè
ã«ã€ã㊠Sohaib Katariwala Sohaib 㯠AWS ã® Senior Specialist Solutions Architect ã§ãã€ãªãã€å·ã·ã«ãŽãæ ç¹ã« Amazon OpenSearch Service ãæ
åœããŠããŸããããŒã¿ãšåæã«é¢ããããããäºæã«é¢å¿ããããŸããç¹ã«ãã客æ§ãããŒã¿æŠç¥ã®äžã§ AI ãæŽ»çšããçŸä»£çãªèª²é¡ã解決ã§ããããæ¯æŽããããšã楜ãã¿ã«ããŠããŸãã Raj Ramasubbu Raj 㯠AWS ã® Senior Analytics and AI Specialist Solutions Architect ã§ãããã°ããŒã¿ãåæãAI/ML ã«æ³šåããŠããŸããã客æ§ãšååããŠãé«ãã¹ã±ãŒã©ããªãã£ãããã©ãŒãã³ã¹ãã»ãã¥ãªãã£ãåããã¯ã©ãŠãããŒã¹ã®ãœãªã¥ãŒã·ã§ã³ãèšèšã»æ§ç¯ããŠããŸãã Arjun Nambiar Arjun 㯠Amazon OpenSearch Service ã® Product Manager ã§ããå€çš®å€æ§ãªãœãŒã¹ãã Amazon OpenSearch Service ãžå€§èŠæš¡ã«ããŒã¿ãåã蟌ããããã«ããåãèŸŒã¿æè¡ã«æ³šåããŠããŸããArjun ã¯å€§èŠæš¡åæ£ã·ã¹ãã ãã¯ã©ãŠãäžå¿ã®æè¡ã«é¢å¿ããããã¯ã·ã³ãã³å·ã·ã¢ãã«ãæ ç¹ãšããŠããŸãã ãã®èšäºã¯ Kiro ã翻蚳ãæ
åœããSolutions Architect ã® Takayuki Enomoto ãã¬ãã¥ãŒããŸããã

















