
- TOP
- ã¿ã°äžèЧ
- 管çããŒã«
管çããŒã«
ã€ãã³ã

ãã¬ãžã³
æè¡ããã°
ã¯ããã« Kubernetesäžã§LLMã®æšè«ãªã©GPUã䜿ãã¯ãŒã¯ããŒããåããã«ã¯ãGPUããŒãã«ãã©ã€ããå
¥ããPodããGPUãå©çšã§ããç¶æ
ã«ããŠããå¿
èŠããããŸããæ¬èšäºã§ã¯ãã€ã³ã¿ãŒãããã«æ¥ç¶ã§ããªãAirGapç°å¢ã®RKE2ã¯ã©ã¹ã¿ã«å¯ŸããŠãNVIDIA GPU DriverãšNVIDIA GPU Operatorãå°å
¥ããKubernetesäžã§GPUã䜿ããããã«ãããŸã§ã®æé ã玹ä»ããŸãã SUSE AIã®ãããªKubernetesäžã®AIåºç€ãæ§ç¯ããéã®åæäœæ¥ã«ããããŸãããæé èªäœã¯ç¹å®ã®AIåºç€ã«äŸåããªãæ±çšçãªå
容ã§ããRKE2以å€ã®Kubernetesãã£ã¹ããªãã¥ãŒã·ã§ã³ã§ããcontainerdã®ãœã±ãããèšå®ãã¡ã€ã«ã®ãã¹ãèªã¿æ¿ããã°å¿çšã§ããŸãã GPUèšå®ã«å¿
èŠãªããŒã« Kubernetesã§GPUã䜿ãã«ã¯ãããŒãã®OSåŽã§GPUãåãããNVIDIA GPU DriverããšãKubernetesåŽã§GPUããªãœãŒã¹ãšããŠæ±ãããã®ã³ã³ããŒãã³ã矀ããŸãšããŠç®¡çãããNVIDIA GPU Operatorãã®2ã€ãå¿
èŠã§ãã NVIDIA GPU Driver NVIDIA GPU Driverã¯ãOSãGPUãèªèã»å¶åŸ¡ããããã®ãœãããŠã§ã¢ã§ããã«ãŒãã«ã¢ãžã¥ãŒã«ïŒ nvidia ã nvidia_uvm ãªã©ïŒãšã libnvidia-ml.so ã libcuda.so ãšãã£ããŠãŒã¶ãŒç©ºéã©ã€ãã©ãªã nvidia-smi ãªã©ã®ç®¡çããŒã«ã§æ§æãããŸããã³ã³ããå
ã®CUDAã¢ããªã±ãŒã·ã§ã³ããæçµçã«ã¯ãã¹ãäžã®ãã®ãã©ã€ããçµç±ããŠGPUãå©çšããŸãã Kubernetesã§äœ¿ãå Žåããã©ã€ãã®å°å
¥æ¹æ³ã¯æ¬¡ã®2éãã§ãã ãã¹ãOSã«çŽæ¥ã€ã³ã¹ããŒã«ãã ïŒOSã®ããã±ãŒãžç®¡çã§ãã©ã€ããå
¥ããæ¹æ³ã§ãã GPU Operatorã®ãã©ã€ãã³ã³ããã§å
¥ãã ïŒGPU Operatorããã©ã€ãå
¥ãã®ã³ã³ãããåããŒãã§åãããã«ãŒãã«ã¢ãžã¥ãŒã«ãããŒãããæ¹æ³ã§ãã ãã¹ãOSã«çŽæ¥ã€ã³ã¹ããŒã«ããæ¹æ³ã¯ãã©ã€ããOSã®ããã±ãŒãžç®¡çã§æ±ãããããOSã®æŽæ°ãã€ã¡ãŒãžç®¡çãšããããŠãã©ã€ãã管çãããå Žåã«åããŠããŸãããŸããKubernetes以å€ã®ããã»ã¹ãããGPUã䜿ãããããªããŸãã GPU Operatorã®ãã©ã€ãã³ã³ããã§å
¥ããæ¹æ³ã¯ãOperatorããã¹ãŠã®GPUããŒãã«ãã©ã€ããèªåã§å°å
¥ããæŽæ°ã管çãããããGPUããŒããå€ãå Žåãé »ç¹ã«å¢æžããå Žåã«åããŠããŸãã æ¬èšäºã§ã¯åè
ã®ãã¹ãOSãžã®çŽæ¥ã€ã³ã¹ããŒã«ã®æé ã解説ããŸãã ãªãããã©ã€ãã®ããŒãžã§ã³ã¯GPU Operatorã®ãµããŒã察象ããéžã³ãŸãïŒ Release Notes ïŒã NVIDIA GPU Operator NVIDIA GPU Operatorã¯ãKubernetesã§GPUã䜿ãããã«å¿
èŠãªNVIDIAã®ãœãããŠã§ã¢äžåŒããOperatorãã¿ãŒã³ã§èªåçã«ãããã€ã»ç®¡çããä»çµã¿ã§ããæ¬æ¥ã¯ããŒãããšã«åå¥ã«èšå®ããå¿
èŠãããã³ã³ããã©ã³ã¿ã€ã ã®èšå®ãDevice Pluginãªã©ãã ClusterPolicy ãšããã«ã¹ã¿ã ãªãœãŒã¹ã§ãŸãšããŠå®£èšçã«ç®¡çã§ããŸãã åºå
žïŒ About the NVIDIA GPU Operator GPU Operatorã管çããäž»ãªã³ã³ããŒãã³ããšãæ¬èšäºã§ã®æ±ãã¯æ¬¡ã®ãšããã§ãã ã³ã³ããŒãã³ã åœ¹å² æ¬èšäºã§ã®æ±ã Node Feature DiscoveryïŒNFDïŒ ããŒãã®ããŒããŠã§ã¢æ
å ±ãæ€åºããNVIDIA GPUæèŒããŒãã«ã©ãã«ãä»äž æå¹ GPU Feature DiscoveryïŒGFDïŒ GPUã®åçªã»ã¡ã¢ãªéã»ãã©ã€ãããŒãžã§ã³ãªã©ã nvidia.com/* ã©ãã«ãšããŠä»äž æå¹ NVIDIA Container Toolkit ã³ã³ããã©ã³ã¿ã€ã ïŒcontainerdïŒãèšå®ããã³ã³ããããGPUã䜿ããããã«ãã æå¹ NVIDIA Device Plugin GPUãæ¡åŒµãªãœãŒã¹ nvidia.com/gpu ãšããŠkubeletã«ç»é²ããPodãžå²ãåœãŠã æå¹ïŒã¿ã€ã ã¹ã©ã€ã·ã³ã°èšå®ããïŒ DCGM Exporter GPUã®äœ¿çšçãæž©åºŠãªã©ã®ã¡ããªã¯ã¹ãPrometheus圢åŒã§å
¬é æå¹ Operator Validator ãã©ã€ãã»Toolkitã»Device Pluginãæ£ããåäœããŠãããæ€èšŒ æå¹ NVIDIA DriverïŒã³ã³ããïŒ ãã©ã€ããã³ã³ãããšããŠå°å
¥ ç¡å¹ïŒãã¹ãã«å°å
¥æžã¿ã®ããïŒ MIG Manager MIG察å¿GPUã®å岿§æã管ç ç¡å¹ïŒMIGé察å¿ã®GPUããŒãã䜿ãããïŒ èšå®æé èšå®æŠèŠ AirGapç°å¢ã§ã¯ãã€ã³ã¿ãŒãããã«æ¥ç¶ã§ããäœæ¥çšç«¯æ«ã§å¿
èŠãªè³æãéããéååŽã®ããŒããã¬ãžã¹ããªãžéã³èŸŒãã§ããèšå®ããŸããå
šäœã®æµãã¯æ¬¡ã®ãšããã§ãã äœæ¥çšç«¯æ«ã§NVIDIA GPU Driverã®ããã±ãŒãžïŒ.debïŒãããŠã³ããŒãããGPUããŒããžè»¢éãã GPUããŒãã«NVIDIA GPU Driverãã€ã³ã¹ããŒã«ããåäœã確èªãã å¿
èŠã«å¿ããŠGPUããŒãã«ã©ãã«ãšãã€ã³ããèšå®ãã äœæ¥çšç«¯æ«ã§GPU Operatorã®Helmãã£ãŒããšã³ã³ããã€ã¡ãŒãžãååŸããéåå
ã®Helmãªããžããªã»ã³ã³ããã¬ãžã¹ããªãžç»é²ãã RKE2ã®HelmChartãªãœãŒã¹ã§GPU OperatorãDownstream Clusterã«ã€ã³ã¹ããŒã«ããåäœã確èªãã ã€ã³ã¿ãŒãããã«æ¥ç¶ã§ããã®ã¯äœæ¥çšç«¯æ«ã ãã§ããDownstream Clusterã¯ãéåå
ã®Harborãããã£ãŒããšã€ã¡ãŒãžãååŸããŸãã åææ¡ä»¶ GPUããŒãã®OSããNVIDIA GPU DriverãšGPU Operatorã®ãµããŒã察象ã§ããããšïŒ Platform Support ïŒ SUSE Rancher Primeã®Rancher Management ServerïŒä»¥äžãRMSïŒãšãRMSãã管çãããRKE2ã®Downstream Clusterãæ§ç¯æžã¿ã§ããããš RMSãšDownstream Clusterã¯AirGapç°å¢ã«ãããã€ã³ã¿ãŒãããã«æ¥ç¶ã§ããªãããš Downstream Clusterã®RKE2ãcontainerd 2.xç³»ã忢±ããŠããããšïŒGPU Operator v25.10以éã®CDIã䜿ãåæïŒ ã€ã³ã¿ãŒãããã«æ¥ç¶ã§ããäœæ¥çšç«¯æ«ããããGPUããŒããšåãOSã»ããŒãžã§ã³ïŒæ¬èšäºã§ã¯Ubuntu 24.04ïŒã§ããããš äœæ¥çšç«¯æ«ã« helm ã skopeo ã kubectl ãDockerïŒãŸãã¯PodmanïŒãå°å
¥ãããŠããããš äœæ¥çšç«¯æ«ããGPUããŒããžSSHæ¥ç¶ã§ããããš äœæ¥çšç«¯æ«ããDownstream Clusterã kubectl ã§æäœã§ããããšïŒRMSããååŸããkubeconfigãå©çšïŒ äœæ¥çšç«¯æ«ãšDownstream Clusterã®äž¡æ¹ããæ¥ç¶ã§ãããOCI察å¿ã®ã³ã³ããã¬ãžã¹ããªã»HelmãªããžããªãããããšããŸããDownstream Clusterã®åããŒããããããã€ã¡ãŒãžãååŸã§ããããšïŒRKE2ã® registries.yaml èšå®ãªã©ïŒ æ§ç¯ç°å¢ æ¬èšäºã®æ€èšŒç°å¢ã¯æ¬¡ã®ãšããã§ããGPU Operatorã®åã³ã³ããŒãã³ãã¯ãv26.3.3ã®ããã©ã«ãããŒãžã§ã³ã䜿ã£ãŠããŸãã é
ç® ããŒãžã§ã³ã»èšå® OS Ubuntu 24.04 RKE2 v1.36.3+rke2r1 Rancher Prime v2.15.2 æèŒGPU NVIDIA Tesla T4ïŒAWS g4dn.2xlargeïŒ ã³ã³ããã¬ãžã¹ããªã»Helmãªããžã㪠Harbor NVIDIA GPU Driver 580.178.04ïŒnvidia-driver-580-serverïŒ NVIDIA GPU Operator v26.3.3 NVIDIA Container Toolkit v1.19.1 NVIDIA Device Plugin / GPU Feature Discovery v0.19.3 DCGM Exporter 4.5.3-4.8.2-distroless Node Feature Discovery v0.18.3 NVIDIA GPU Driver èšå®æé æåã«GPUããŒãã§ãæèŒãããŠããGPUã®çš®é¡ãšã«ãŒãã«ããŒãžã§ã³ã確èªããŸããã«ãŒãã«ããŒãžã§ã³ã¯ãåŸã§ã«ãŒãã«ããããããŠã³ããŒãããéã«äœ¿ããŸãã $ lspci | grep -i nvidia # åºåäŸ 00:1e.0 3D controller: NVIDIA Corporation TU104GL [Tesla T4] (rev a1) $ uname -r # åºåäŸ 7.0.0-1012-aws 次ã«ãäœæ¥çšç«¯æ«ã§ãã©ã€ãã®ããã±ãŒãžãããŠã³ããŒãããŸããapt-get install –download-onlyã¯ãå®è¡ããç°å¢ã«å°å
¥æžã¿ã®ããã±ãŒãžãããŠã³ããŒã察象ããå€ããŸããããã§ãGPUããŒããšåãUbuntu 24.04ã®ã¯ãªãŒã³ãªã³ã³ãããèµ·åãããã®äžã§ããŠã³ããŒãããŸãããããããšäœæ¥çšç«¯æ«ã®ç°å¢ã«å·Šå³ããããäŸåããã±ãŒãžãæŒããªãéããããŸãã $ mkdir -p ~/nvidia-driver-pkgs $ docker run --rm -it -v ~/nvidia-driver-pkgs:/pkgs ubuntu:24.04 bash ã³ã³ããå
ã§ãå©çšå¯èœãªãã©ã€ãã確èªããŸããããŒã¿ã»ã³ã¿ãŒåãGPUã§ã¯ãæ«å°Ÿã -server ã®ããã±ãŒãžãéžã³ãŸãã # apt-get update # apt-cache search nvidia-driver | grep server # åºåäŸ nvidia-driver-470-server - NVIDIA Server Driver metapackage ã» ã» ã» nvidia-driver-580-server - NVIDIA Server Driver metapackage 䜿çšãããã©ã€ããæ±ºããããã«ãŒãã«ããããšããããŠããŠã³ããŒãããŸãããã©ã€ãã®DKMSã¢ãžã¥ãŒã«ã¯GPUããŒãäžã§ãã«ãããããããGPUããŒãã®ã«ãŒãã«ã«å¯Ÿå¿ãã linux-headers ãå¿
èŠã§ããæå®ã§ããããŒãžã§ã³ã¯ Launchpad ã§ç¢ºèªã§ããŸãã 7.0.0-1012-aws ã®ã«ãŒãã«ããŒãžã§ã³ã§ nvidia-driver-580-server ãã€ã³ã¹ããŒã«ããå Žåã¯ãã³ã³ããå
ã§æ¬¡ã®ããã«å®è¡ããŸããããŠã³ããŒãããããã±ãŒãžã¯ãããŠã³ããã /pkgs çµç±ã§äœæ¥çšç«¯æ«ã® ~/nvidia-driver-pkgs ã«ä¿åãããŸãã # apt-get install --download-only -y \ nvidia-driver-580-server=580.178.04-0ubuntu0.24.04.1 \ linux-headers-<GPUããŒãã®ã«ãŒãã«ããŒãžã§ã³> # cp /var/cache/apt/archives/*.deb /pkgs/ # exit ã¯ãªãŒã³ãªã³ã³ããã§ããŠã³ããŒããããããGPUããŒãã«å°å
¥æžã¿ã®åºæ¬ããã±ãŒãžãå«ãŸããŸããGPUããŒãã®ããã±ãŒãžãå€ãå Žåãã€ã³ã¹ããŒã«æã«ããããæŽæ°ãããç¹ã«æ³šæããŠãã ããã ããŠã³ããŒãããããã±ãŒãžããäœæ¥çšç«¯æ«ããGPUããŒãã«è»¢éããŸãã $ scp -r -i <SSHéµ> ~/nvidia-driver-pkgs ubuntu@<GPUããŒãIP>:~/ GPUããŒãäžã§ããã±ãŒãžãã€ã³ã¹ããŒã«ããåèµ·åããŸãã $ cd ~/nvidia-driver-pkgs $ apt-get install -y --no-download ./*.deb $ sudo reboot åäœç¢ºèª åèµ·ååŸãã€ã³ã¹ããŒã«ãæ£åžžã«å®äºããããGPUããŒãäžã§ç¢ºèªããŸãããŸãã nvidia-smi ã§GPUã®æ
å ±ãšãã©ã€ãããŒãžã§ã³ã衚瀺ãããããšã確èªããŸãã $ nvidia-smi # åºåäŸ Fri Sep 25 06:34:12 2026 +-----------------------------------------------------------------------------------------+ | NVIDIA-SMI 580.178.04 Driver Version: 580.178.04 CUDA Version: 13.0 | +-----------------------------------------+------------------------+----------------------+ | GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |=========================================+========================+======================| | 0 Tesla T4 Off | 00000000:00:1E.0 Off | 0 | | N/A 32C P0 26W / 70W | 0MiB / 15360MiB | 0% Default | | | | N/A | +-----------------------------------------+------------------------+----------------------+ +-----------------------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=========================================================================================| | No running processes found | +-----------------------------------------------------------------------------------------+ 次ã«ãNVIDIAã®ã«ãŒãã«ã¢ãžã¥ãŒã«ãããŒããããŠããããšã確èªããŸãã $ lsmod | grep nvidia # åºåäŸ nvidia_uvm 2080768 0 nvidia_drm 139264 0 nvidia_modeset 1687552 1 nvidia_drm nvidia 105373696 3 nvidia_uvm,nvidia_drm,nvidia_modeset drm_ttm_helper 20480 1 nvidia_drm video 77824 1 nvidia_modeset æåŸã«ãGPU Operatorã®åã³ã³ããŒãã³ãããã©ã€ããšã®ããåãã«äœ¿ã libnvidia-ml.so ãååšããããšã確èªããŠãããŸãïŒ RKE2 GPU Operators ïŒã $ find /usr/ -iname libnvidia-ml.so* # åºåäŸ /usr/lib/x86_64-linux-gnu/libnvidia-ml.so.1 /usr/lib/x86_64-linux-gnu/libnvidia-ml.so.580.178.04 /usr/lib/x86_64-linux-gnu/libnvidia-ml.so ããŒãã©ããªã³ã°ã»ãã€ã³ãèšå® GPUã䜿ãã¢ããªã±ãŒã·ã§ã³ã ããGPUããŒãã«é
眮ãããå Žåã¯ãã©ãã«ãšãã€ã³ãã§ç®¡çããŸããããããã® kubectl ã¯ãDownstream Clusterã®kubeconfigãèšå®ããäœæ¥çšç«¯æ«ïŒãŸãã¯Rancher UIã®kubectlã·ã§ã«ïŒã§å®è¡ããŸãã ã©ãã«ã¯ãã¯ãŒã¯ããŒãã® nodeSelector ã nodeAffinity ã§GPUããŒããæå®ããããã«ä»äžããŸããGPU Operatorã®å°å
¥åŸã¯ nvidia.com/gpu.present=true ãªã©ã®ã©ãã«ãèªåã§ä»äžããããããç¬èªã©ãã«ã¯éçšäžã®å¿
èŠã«å¿ããŠä»ããŠãã ããã $ kubectl label node <GPUããŒãå> accelerator=nvidia-gpu ãã€ã³ãã¯ãGPUã䜿ããªãPodãGPUããŒãã«é
眮ãããã®ãé²ãããã«èšå®ããŸãã $ kubectl taint nodes <GPUããŒãå> nvidia.com/gpu=dedicated:NoSchedule GPU Operatorã®DaemonSetã¯ãããã©ã«ãã§ nvidia.com/gpu ããŒã® NoSchedule ãã€ã³ãã蚱容ããèšå®ã«ãªã£ãŠããããããã®ãã€ã³ããå
ã«èšå®ããŠãå°å
¥ã«åœ±é¿ã¯ãããŸãããäžæ¹ãGPUã䜿ãã¯ãŒã¯ããŒãåŽã«ã¯åãããŒã® tolerations ãèšå®ããå¿
èŠããããŸãã NVIDIA GPU Operator èšå®æé ãŸããéåå
ã®Harborã«æ¬¡ã®2ã€ã®ãããžã§ã¯ããäœæããŸãã nvidia-chart ïŒGPU Operatorã®Helmãã£ãŒãçš nvidia ïŒGPU Operatorã䜿ãã³ã³ããã€ã¡ãŒãžçš ãããžã§ã¯ããéå
¬éã«ããå Žåã¯ãDownstream ClusteråŽã«ãèªèšŒæ
å ±ã®èšå®ãå¿
èŠã§ãïŒã€ã¡ãŒãžã¯ registries.yaml ããã£ãŒãã¯HelmChartãªãœãŒã¹ã®èªèšŒçšãã£ãŒã«ãïŒã äœæ¥çšç«¯æ«ããNVIDIA GPU Operatorã®Helmãã£ãŒããããŠã³ããŒãããŸãã $ helm repo add nvidia https://helm.ngc.nvidia.com/nvidia $ helm repo update $ helm pull nvidia/gpu-operator --version v26.3.3 Helmãªããžããªã«ãã°ã€ã³ãããã£ãŒããOCI圢åŒã§ç»é²ããŸããæ¬èšäºã®Harborã¯èªå·±çœ²åèšŒææžã®ããTLSæ€èšŒãã¹ãããããŠããŸãã $ helm registry login <Helmãªããžããªã®ãã¡ã€ã³> \ --username <Helmãªããžããªã®ãŠãŒã¶å> \ --password <Helmãªããžããªã®ãã¹ã¯ãŒã> \ --insecure $ helm push gpu-operator-v26.3.3.tgz oci://<Helmãªããžããªã®ãã¡ã€ã³>/nvidia-chart --insecure-skip-tls-verify 次ã«ãGPU Operatorã䜿ãã³ã³ããã€ã¡ãŒãžã skopeo ã§ã³ã³ããã¬ãžã¹ããªãžã³ããŒããŸãã ã³ããŒå
ã€ã¡ãŒãž 䜿çšããã³ã³ããŒãã³ã nvcr.io/nvidia/gpu-operator:v26.3.3 GPU Operatoræ¬äœãOperator Validator nvcr.io/nvidia/k8s/container-toolkit:v1.19.1 NVIDIA Container Toolkit nvcr.io/nvidia/k8s-device-plugin:v0.19.3 NVIDIA Device PluginãGPU Feature Discovery nvcr.io/nvidia/k8s/dcgm-exporter:4.5.3-4.8.2-distroless DCGM Exporter registry.k8s.io/nfd/node-feature-discovery:v0.18.3 Node Feature Discovery ${src#*/} ã§å
é ã® nvcr.io/ ãåãé€ãã <ã³ã³ããã¬ãžã¹ããªã®ãã¡ã€ã³>/nvidia/... ãšããåãéå±€ã§ã³ããŒããŠããŸããNFDã®ã¿ååŸå
ãç°ãªããããåå¥ã«ã³ããŒããŸãã $ REGISTRY=<ã³ã³ããã¬ãžã¹ããªã®ãã¡ã€ã³> $ skopeo login --tls-verify=false ${REGISTRY} $ for src in \ nvcr.io/nvidia/gpu-operator:v26.3.3 \ nvcr.io/nvidia/k8s/container-toolkit:v1.19.1 \ nvcr.io/nvidia/k8s-device-plugin:v0.19.3 \ nvcr.io/nvidia/k8s/dcgm-exporter:4.5.3-4.8.2-distroless; do skopeo copy --dest-tls-verify=false docker://${src} docker://${REGISTRY}/${src#*/} done $ skopeo copy --dest-tls-verify=false \ docker://registry.k8s.io/nfd/node-feature-discovery:v0.18.3 \ docker://${REGISTRY}/nvidia/node-feature-discovery:v0.18.3 RKE2ã®HelmChartãªãœãŒã¹ãšããŠãGPU Operatorã®ã€ã³ã¹ããŒã«èšå®ãèšèŒãã gpu-operator-helm-chart.yaml ãäœæããŸãããã€ã³ãã¯æ¬¡ã®3ç¹ã§ãã ã€ã¡ãŒãžã®åç
§å
ïŒåã³ã³ããŒãã³ãã® repository ãéåå
ã®ã¬ãžã¹ããªã«åããŸãã ãã¹ãå°å
¥æžã¿ãã©ã€ãã®å©çš ïŒ driver.enabled: false ãšãã䜿ããªãã³ã³ããŒãã³ããç¡å¹ã«ããŠããã©ãŒãå¿
èŠãªã€ã¡ãŒãžãæžãããŠããŸããMIG察å¿GPUã䜿ãå Žå㯠migManager ãæå¹ã«ãã k8s-mig-manager ã€ã¡ãŒãžãã³ããŒããŠãã ããã RKE2åºæã®èšå® ïŒRKE2ã®containerdã¯ãœã±ããã®å Žæãæšæºãšç°ãªãããã toolkit.env ã§ CONTAINERD_SOCKET ãæå®ããŸãïŒ RKE2 GPU Operators ïŒã devicePlugin.config ã¯ã¿ã€ã ã¹ã©ã€ã·ã³ã°ã®èšå®ã§ãã replicas: 4 ã«ããã1æã®ç©çGPUã4ã€ã® nvidia.com/gpu ãšããŠå
¬éããè€æ°ã®Podã§æåå²å
±æã§ããŸãããã ããPodéã§GPUã¡ã¢ãªã¯åé¢ãããªããããäžèŠãªå Žå㯠config ãããã¯ããšåé€ããŠãã ããïŒ Time-Slicing GPUs ïŒã apiVersion: helm.cattle.io/v1 kind: HelmChart metadata: name: gpu-operator namespace: kube-system spec: chart: oci://<Helmãªããžããªã®ãã¡ã€ã³>/nvidia-chart/gpu-operator version: v26.3.3 targetNamespace: gpu-operator createNamespace: true insecureSkipTLSVerify: true valuesContent: |- validator: repository: <ã³ã³ããã¬ãžã¹ããªã®ãã¡ã€ã³>/nvidia image: gpu-operator version: v26.3.3 operator: repository: <ã³ã³ããã¬ãžã¹ããªã®ãã¡ã€ã³>/nvidia image: gpu-operator version: v26.3.3 devicePlugin: repository: <ã³ã³ããã¬ãžã¹ããªã®ãã¡ã€ã³>/nvidia image: k8s-device-plugin version: v0.19.3 # ã¿ã€ã ã¹ã©ã€ã·ã³ã°ã䜿ããªãå Žåã¯configãããã¯ãåé€ config: create: true name: "time-slicing-config" default: "t4-sharing" data: t4-sharing: |- version: v1 flags: migStrategy: none sharing: timeSlicing: resources: - name: nvidia.com/gpu replicas: 4 dcgmExporter: repository: <ã³ã³ããã¬ãžã¹ããªã®ãã¡ã€ã³>/nvidia/k8s image: dcgm-exporter version: 4.5.3-4.8.2-distroless gfd: repository: <ã³ã³ããã¬ãžã¹ããªã®ãã¡ã€ã³>/nvidia image: k8s-device-plugin version: v0.19.3 toolkit: repository: <ã³ã³ããã¬ãžã¹ããªã®ãã¡ã€ã³>/nvidia/k8s image: container-toolkit version: v1.19.1 env: - name: CONTAINERD_SOCKET value: /run/k3s/containerd/containerd.sock node-feature-discovery: image: repository: <ã³ã³ããã¬ãžã¹ããªã®ãã¡ã€ã³>/nvidia/node-feature-discovery tag: v0.18.3 # ãã¹ãã«ãã©ã€ããå°å
¥æžã¿ã®ããç¡å¹å driver: enabled: false # æ¬èšäºã§ã¯äœ¿ããªãã³ã³ããŒãã³ã migManager: enabled: false vgpuDeviceManager: enabled: false vfioManager: enabled: false sandboxDevicePlugin: enabled: false kataSandboxDevicePlugin: enabled: false ccManager: enabled: false äœæããHelmChartãªãœãŒã¹ãDownstream Clusterã«é©çšããŸããRKE2ã®Helm Controllerããã£ãŒããååŸããGPU Operatorãã€ã³ã¹ããŒã«ããŸãã $ kubectl apply -f gpu-operator-helm-chart.yaml Container Toolkitã¯èšå®ãåæ ããããã«containerdãžåèªã¿èŸŒã¿ãæç€ºãããã®åœ±é¿ã§GPUããŒãã®RKE2ãåèµ·åããŸãã皌åäžã®ã¯ãŒã¯ããŒããããå Žåã¯ãäœæ¥ã¿ã€ãã³ã°ã«æ³šæããŠãã ããã åäœç¢ºèª GPU Operatorã®Podããã¹ãŠ Running ãŸã㯠Completed ã«ãªã£ãŠããããšã確èªããŸããåºåäŸã¯GPUããŒã2å°ã®ç°å¢ã®ãã®ã§ãã $ kubectl get pod -n gpu-operator # åºåäŸ NAME READY STATUS RESTARTS AGE gpu-feature-discovery-8t85l 2/2 Running 0 5m gpu-feature-discovery-kkwbb 2/2 Running 0 5m gpu-operator-7974d8cf9-qq7bh 1/1 Running 0 5m gpu-operator-node-feature-discovery-gc-5c84b6f5c4-tmf9k 1/1 Running 0 5m gpu-operator-node-feature-discovery-master-6db6986c58-bjdsg 1/1 Running 0 5m gpu-operator-node-feature-discovery-worker-55v8j 1/1 Running 0 5m gpu-operator-node-feature-discovery-worker-b944b 1/1 Running 0 5m gpu-operator-node-feature-discovery-worker-cxrxs 1/1 Running 0 5m gpu-operator-node-feature-discovery-worker-kmmv2 1/1 Running 0 5m gpu-operator-node-feature-discovery-worker-qnz9w 1/1 Running 0 5m gpu-operator-node-feature-discovery-worker-wxln9 1/1 Running 0 5m nvidia-container-toolkit-daemonset-4kkbt 1/1 Running 0 5m nvidia-container-toolkit-daemonset-vbgnc 1/1 Running 0 5m nvidia-cuda-validator-b8grf 0/1 Completed 0 5m nvidia-cuda-validator-z7skc 0/1 Completed 0 5m nvidia-dcgm-exporter-6dhd5 1/1 Running 0 5m nvidia-dcgm-exporter-8mhhp 1/1 Running 0 5m nvidia-device-plugin-daemonset-6v4xz 2/2 Running 0 5m nvidia-device-plugin-daemonset-snx4x 2/2 Running 0 5m nvidia-operator-validator-4ldlj 1/1 Running 0 5m nvidia-operator-validator-kctw6 1/1 Running 0 5m GPU Operatorå
šäœã®ç¶æ
ã衚ãClusterPolicyã ready ã«ãªã£ãŠããããšã確èªããŸãã $ kubectl get clusterpolicy # åºåäŸ NAME STATUS AGE cluster-policy ready <äœææ¥æ> 以äžã®ã³ãã³ããå®è¡ããGPUããŒãã®ã©ãã«ã« nvidia.com/gpu.machine ãªã©ã®GPUé¢é£ã©ãã«ãä»äžãããŠããããšã確èªããŸãã $ kubectl get node <GPUããŒãå> -o jsonpath='{.metadata.labels}' | tr ',' '\n' | grep "nvidia.com" # åºåäŸ "nvidia.com/cuda.driver-version.full":"580.178.04" "nvidia.com/cuda.driver-version.major":"580" "nvidia.com/cuda.driver-version.minor":"178" "nvidia.com/cuda.driver-version.revision":"04" "nvidia.com/cuda.driver.major":"580" "nvidia.com/cuda.driver.minor":"178" "nvidia.com/cuda.driver.rev":"04" "nvidia.com/cuda.runtime-version.full":"13.0" "nvidia.com/cuda.runtime-version.major":"13" "nvidia.com/cuda.runtime-version.minor":"0" "nvidia.com/cuda.runtime.major":"13" "nvidia.com/cuda.runtime.minor":"0" "nvidia.com/gfd.timestamp":"1790646472" "nvidia.com/gpu.compute.major":"7" "nvidia.com/gpu.compute.minor":"5" "nvidia.com/gpu.count":"1" "nvidia.com/gpu.deploy.container-toolkit":"true" "nvidia.com/gpu.deploy.dcgm":"true" "nvidia.com/gpu.deploy.dcgm-exporter":"true" "nvidia.com/gpu.deploy.device-plugin":"true" "nvidia.com/gpu.deploy.driver":"true" "nvidia.com/gpu.deploy.gpu-feature-discovery":"true" "nvidia.com/gpu.deploy.node-status-exporter":"true" "nvidia.com/gpu.deploy.operator-validator":"true" "nvidia.com/gpu.family":"turing" "nvidia.com/gpu.machine":"g4dn.2xlarge" "nvidia.com/gpu.memory":"15360" "nvidia.com/gpu.mode":"compute" "nvidia.com/gpu.present":"true" "nvidia.com/gpu.product":"Tesla-T4-SHARED" "nvidia.com/gpu.replicas":"4" "nvidia.com/gpu.sharing-strategy":"time-slicing" "nvidia.com/mig.capable":"false" "nvidia.com/mig.strategy":"single" "nvidia.com/mps.capable":"false" "nvidia.com/vgpu.present":"false" ããŒãã®å²ãåœãŠå¯èœãªãœãŒã¹ã« nvidia.com/gpu ã远å ãããŠããããšã確èªããŸããå€ã¯ãç©çGPUã®ææ° Ã ã¿ã€ã ã¹ã©ã€ã·ã³ã°ã®replicasãã§ãæ¬èšäºã§ã¯1 à 4 = 4ã§ããã¿ã€ã ã¹ã©ã€ã·ã³ã°ã䜿ããªãå Žåã¯ç©çGPUã®ææ°ãšäžèŽããŸãã $ kubectl get node <GPUããŒãå> -o jsonpath='{.status.allocatable}' # åºåäŸ {"cpu":"8","ephemeral-storage":"196555267123","hugepages-1Gi":"0","hugepages-2Mi":"0","memory":"32479456Ki","nvidia.com/gpu":"4","pods":"110"} GPUããŒãäžã§ãNVIDIAã³ã³ããã©ã³ã¿ã€ã ã®ãã€ããªãé
眮ãããRKE2ã®containerdèšå®ã«NVIDIAã©ã³ã¿ã€ã ã远å ãããŠããããšã確èªããŸãã $ ls /usr/local/nvidia/toolkit/nvidia-container-runtime # åºåäŸ /usr/local/nvidia/toolkit/nvidia-container-runtime $ grep nvidia /var/lib/rancher/rke2/agent/etc/containerd/config.toml # åºåäŸ [plugins.'io.containerd.cri.v1.runtime'.containerd.runtimes.'nvidia'] [plugins.'io.containerd.cri.v1.runtime'.containerd.runtimes.'nvidia'.options] BinaryName = "/usr/local/nvidia/toolkit/nvidia-container-runtime" [plugins.'io.containerd.cri.v1.runtime'.containerd.runtimes.'nvidia-cdi'] [plugins.'io.containerd.cri.v1.runtime'.containerd.runtimes.'nvidia-cdi'.options] BinaryName = "/usr/local/nvidia/toolkit/nvidia-container-runtime.cdi" ãããã« æ¬èšäºã§ã¯ãAirGapç°å¢ã®RKE2ã¯ã©ã¹ã¿ã«å¯ŸããŠããã¹ããžã®NVIDIA GPU Driverã®å°å
¥ãšãHelmChartãªãœãŒã¹ã«ããNVIDIA GPU Operatorã®å°å
¥ãè¡ããŸãããAirGapç°å¢ã§ã¯ãäŸåããã±ãŒãžãæŒããªãéããããšãšãã€ã¡ãŒãžã®åç
§å
ããã¹ãŠéåå
ã®ã¬ãžã¹ããªã«åããããšãäž»ãªãã€ã³ãã§ãã ããã§ãGPUã䜿ãAIã¢ããªã±ãŒã·ã§ã³ãã¯ã©ã¹ã¿äžã§åããæºåãæŽããŸãããæ¬¡åã¯SUSE AI Factoryã®ã€ã³ã¹ããŒã«æ¹æ³ã«ã€ããŠè§£èª¬ããããšæããŸãã åè About the NVIDIA GPU Operator Installing the NVIDIA GPU Operator Install NVIDIA GPU Operator in Air-Gapped Environments NVIDIA GPU Operator Release Notes NVIDIA GPU Operator Platform Support Time-Slicing GPUs in Kubernetes RKE2 Documentation – GPU Operators nvidia-graphics-drivers-580-server package in UbuntuïŒLaunchpadïŒ ã芧ããã ãããããšãããããŸãïŒ ãã®æçš¿ã¯ã圹ã«ç«ã¡ãŸãããïŒ åœ¹ã«ç«ã£ã 圹ã«ç«ããªãã£ã 0人ããã®æçš¿ã¯åœ¹ã«ç«ã£ããšèšã£ãŠããŸãã The post SUSE Rancherã§ã®GPUããŒãèšå®æ¹æ³è§£èª¬ ãAirGapç°å¢ãžã®NVIDIA GPU Driverã»GPU Operatorå°å
¥ã first appeared on SIOS Tech Lab .
ãèªæ²»äœã®ããã®ã¯ã©ãŠãã³ã¹ãæé©åãã·ãªãŒãºã«ã€ããŠ èªæ²»äœãã¬ãã¡ã³ãã¯ã©ãŠãäžã§æ¥åã·ã¹ãã ãéçšããå Žåãã¯ã©ãŠãå©çšæã®ç®¡çã¯ãªã³ãã¬ãã¹ãšã¯æ§è³ªã®ç°ãªãå®åã«ãªããŸããåŸæ¥ã¯ãæ©åšã調éããæç¹ã§è²»çšãã»ãŒåºå®ããããã®åŸã®ç®¡çã¯ä¿å®å¥çŽã®ç¯å²ã§æžã¿ãŸãããã¯ã©ãŠãã¯äœ¿ã£ãåã ã課éããããããæ§æãå€ããã°è²»çšãå€ãããŸããç§»è¡ããã ãã§ã¯è²»çšã¯äžãããã皌ååŸã«æ§æãèŠçŽãç¶ããããšã§å¹æãåºãŸãã ãšããããã®èŠçŽãäœæ¥ã¯ãæè¡çãªå€æã䌎ãããæ¥ã
ã®éçšãæ
ãäºæ¥è
ã«å§ããããã¡ã§ããçµæãšããŠãèªæ²»äœåŽã«å€æã®ææãå±ããªããŸãŸè«æ±é¡ã ãã確å®ããŠããããšããããŸããã¯ã©ãŠãå©çšæã¯èªæ²»äœã®äºç®ããæ¯åºãããäœæ°ãè°äŒã«èª¬æããäž»äœã¯èªæ²»äœã§ããæ¬ã·ãªãŒãºã¯ã èªæ²»äœãèªãã¯ã©ãŠãè²»çšãææ¡ããäºæ¥è
ãšååããŠæé©åãç¶ããããç¶æ
ãç®æšã«ããŠããŸãã ãã ãã³ã¹ãæé©åã¯ãã³ã³ãœãŒã«ã§æ°å€ã確èªããæ¥ã
ã®éçšããã調é仿§æžãžã®åæ ãäºç®èŠæ±ã»æ±ºç®ã®æç¶ããã·ã¹ãã åºç€ãã®ãã®ã®èšèšãŸã§ãæ§è³ªã®ç°ãªãè€æ°ã®äœæ¥ã§æãç«ã£ãŠããŸãããããã¯æ
ãæãæ€èšã®ã¿ã€ãã³ã°ãç°ãªããããæ¬ã·ãªãŒãºã§ã¯é åããšã«èšäºãåããŠããŸãã # ã¿ã€ãã« æ±ãé å èªæ²»äœè·å¡ ãã³ã㌠æ
å ±æ¿ç æ
åœ è²¡æ¿æ
åœ éçšç®¡ç è£å©è
ASP â 宿ã¬ãã¥ãŒã§åãã³ã¹ãæé©åã®æé æ¥ã
ã®éçš â â â â â¡-1 éçšç®¡çè£å©è
ãšã®ååäœå¶ã調é仿§æžã«èœãšã蟌ã 調éã»å¥çŽ â â â â â¡-2 AI Agent ã§ã³ã¹ãåæãèªååããïŒå
¬éäºå®ïŒ éçšã®å¹çå â â â ⢠äºç®èŠæ±ã»å·è¡ã»æ±ºç®ã®å®åïŒæ¬èšäºïŒ äºç®ã»äŒèš â â ⣠20æ¥åã®æé©åèšèšãšå®è·µïŒå
¬éäºå®ïŒ åºç€ã®èšèš â â â è£è¶³ïŒ â¡-2ãâ£ã¯ä»åŸå
¬éäºå®ã§ããå
¬éæã«ã¯ãã®è¡šãããªã³ã¯ããŸãã â ã¯äž»ãªå¯Ÿè±¡ã â ã¯é¢é£ããç¯å²ã§åèã«ãªãèªè
ã§ãã æ
å ±æ¿çæ
åœ ïŒæ
å ±ã·ã¹ãã éšéã§ã¯ã©ãŠãç°å¢ã®éçšãæç®¡ããè·å¡ è²¡æ¿æ
åœ ïŒäºç®èŠæ±ã»å·è¡ã»æ±ºç®ã®æç¶ããæ
åœããè·å¡ éçšç®¡çè£å©è
ïŒã¬ãã¡ã³ãã¯ã©ãŠãã®éçšç®¡çãèªæ²»äœããåèšããäºæ¥è
ASP ïŒæ¥åã·ã¹ãã ïŒããã±ãŒãžïŒãæäŸãããã®åäœä¿èšŒãæ
ãäºæ¥è
ã©ãããèªãã ïŒæ
å ±æ¿çãæ
åœãããæ¹ã¯â ããã財æ¿ãæ
åœãããæ¹ã¯â¢ããå§ããŠãã ãããéçšç®¡çè£å©è
ã»ASP ã®æ¹ã¯â£ãäžå¿ã«ãªããŸãã æ¬èšäºã«ã€ã㊠ã·ãªãŒãºâ¡-1ã§ã¯ãGCASã¬ã€ããç¶ç¶çéçšçµè²»æé©å(FinOps)ã¬ã€ããã«ãããŠãã¯ã©ãŠããµãŒãã¹ã®å©çšå®çžŸã®å¯èŠåãåæžææ¡ãç¿äºæ¥å¹ŽåºŠã®æ¹åææ¡ã»ç®æšèšå®çã«åãçµãããšãšãããŠããããšã玹ä»ããŸãããããããå®çŸããããã«ã¯ãéçšç®¡çè£å©è
ã»ASPãæ¿çæ
åœå課ãæ
å ±ã·ã¹ãã éšéã財æ¿éšéãåã
ã®ç«å Žã§åœ¹å²ãæããããšãå¿
èŠã«ãªããŸãã ããã§ä»åã¯ãã¯ã©ãŠãã³ã¹ãã®äºç®ç®¡ççãããŒããšããç¹ã«ã財æ¿éšéã®çããŸãã¯ã©ãŠãçµè²»ã®äºç®æ»å®ã»å·è¡ç®¡çãè¡ãéã®å®åçãªèŠç¹ã§èšèŒããŠããŸãã ç®æ¬¡ 1. ã¯ããã« â åŸé課éçã®ã¯ã©ãŠããµãŒãã¹ã®ç¹åŸŽã«äŒŽãéçšã®éã 1.1 ã¯ã©ãŠããµãŒãã¹å©çšæã®ç¹åŸŽ 1.2 ã¯ã©ãŠãã®ç¹æ§ãèžãŸããæ°ããªäºç®ç®¡çã®èãæ¹ 1.3 ã³ã¹ãæé©åãžã®åçµ 2. 幎床äºç®èŠæ±æã®ã³ã¹ãèŠç©ãã 2.1 ç§»è¡å幎床ã®èŠç©ãã 2.2 2幎ç®ä»¥éã®èŠç©ãã 3. 幎床éäžã®ã³ã¹ãå€åãžã®å¯Ÿå¿ 3.1 AWS Budgets ã«ããäºç®èšå®ã»äºç®è¶
éã®é²æ¢ 3.2 å·è¡æ®çºçæã®æ±ã 4. ãŸãšã Appendix é·æå©çšå²åŒïŒãªã¶ãŒããã€ã³ã¹ã¿ã³ã¹ã»Savings PlansïŒã®äºç®äžã®æ±ã 1. ã¯ããã« â åŸé課éçã®ã¯ã©ãŠããµãŒãã¹ã®ç¹åŸŽã«äŒŽãéçšã®éã 1.1 ã¯ã©ãŠããµãŒãã¹å©çšæã®ç¹åŸŽ èªæ²»äœã®äºç®å¶åºŠã¯å幎床ãååã§ããåŸæ¥ã®ãªã³ãã¬ãã¹æ¹åŒïŒåºèå
åã¯ããŒã¿ã»ã³ã¿ãŒã«ãµãŒããŒãèšçœ®ããæ¹åŒïŒã§ã¯ã5幎ãªãŒã¹ã®å¥çŽæã«å¹Žéè²»çšã確å®ãããªãŒã¹æãé·æç¶ç¶å¥çŽãåµåè² æ
è¡çºã«ããè€æ°å¹Žã«ãããçµè²»ã®å¹³æºåãšäºç®ã®èŠéãã確ä¿ããŠããŸããã äžæ¹ãã¯ã©ãŠããµãŒãã¹ã¯åææè³äžèŠ/åŸé課éã§å©çšã§ããç¹æ§ãæãããããã·ã¹ãã å©çšç¶æ³ã«åãããŠç¡é§ãªãå©çšã§ããäžæ¹ãäºç®ã®ç·šæãå·è¡çã«ãããŠãåŸæ¥ã®ãªã³ãã¬ãã¹ãšã¯ç°ãªãéçšãå¿
èŠã«ãªããŸããäŸãã°ãAWSã®ã¯ã©ãŠããµãŒãã¹ã®å©çšæã«ã¯ã次ã®ãããªç¹åŸŽããããŸãã åŸé課é ïŒäœ¿ã£ãåã ãè«æ±ãããä»çµã¿ã§ãããæããšã«éé¡ãå€åããŸããç¹å¿æïŒç¢ºå®ç³åææçïŒã«ã¯ãªãœãŒã¹ãæ¡åŒµãã鿣æã«ã¯çž®å°ããããšã§ç¡é§ãæå¶ã§ããŸãã USDïŒç±³ãã«ïŒå»ºãŠ ïŒã¬ãã¡ã³ãã¯ã©ãŠãïŒAWSïŒã®å©çšæã¯ç±³ãã«ã§èšç®ããããããçºæ¿ã¬ãŒãã®å€åãåæç®åŸã®æ¯åºã«åœ±é¿ããŸãããªããçºæ¿ãåºå®ããå¥çŽæ¹åŒãéžæè¢ãšããŠååšããŸãã éçšäžã®ãªãœãŒã¹æé©åã»ã³ã¹ãæé©åãå¯èœ ïŒãªã³ãã¬ãã¹ã§ã¯å¥ç޿޿°æã«ããã³ã¹ãèŠçŽããã§ããŸããããã¯ã©ãŠãã§ã¯çšŒåäžã«éæãªãœãŒã¹ã®è¿œå ã»åæžãå¯èœã§ãã ã€ãŸããã¯ã©ãŠãã®äºç®ç®¡çã§ã¯ãäºç®èŠæ±æã®èŠç©ãã粟床ããšã幎床éäžã®äºå®ç®¡çãã®åæ¹ãéèŠã«ãªããŸãã 1.2 ã¯ã©ãŠãã®ç¹æ§ãèžãŸããæ°ããªäºç®ç®¡çã®èãæ¹ ãŸãããªã³ãã¬ãã¹ã®æ
å ±ã·ã¹ãã ã®æ§æããã®ãŸãŸã¯ã©ãŠãã«ç§»è¡ãããåçŽãªãããã§ã¯ãã¯ã©ãŠãã®ç¹æ§ã掻ããããããšãã§ããããµãŒããŒã®èŠæš¡ãé倧ãªãŸãŸçšŒåãããªã©ã«ãããå©çšæããªã³ãã¬ãã¹æä»£ãäžåããããããããŸããããžã¿ã«åºã«ããå
è¡ã»æ€èšŒäºæ¥çã«ãããŠããåçŽç§»è¡ã§ã¯ã³ã¹ãå¢ãšãªãäºäŸãå ±åãããŠããŸãã ãããããªãã財æ¿éšéãšããŠã¯ãäºç®æ»å®ã®éã«ãã³ã¹ãæé©åèšç»ãã®å®è¡ç¶æ³ã確èªããããšãæå¹ãšãªããŸããã¯ã©ãŠãã®è²»çšå¯Ÿå¹æãçºæ®ããã«ã¯ãç§»è¡åŸã«ã³ã¹ã驿£åïŒäžèŠãªãœãŒã¹ã®åæžããµãŒããŒèŠæš¡ã®èŠçŽãçïŒãç¶ç¶çã«å®æœããããšãéèŠã«ãªããŸããããžã¿ã«åºãæŽåãã¬ãã¡ã³ãã¯ã©ãŠãã«é¢ããæ
å ±ãæäŸããŠããGCASã¬ã€ãã«ãããŠããæ¬çªçšŒååŸã«ç¶ç¶çãªã³ã¹ãæé©åãžåãçµãããšã®éèŠæ§ã瀺ãããŠããŸãã 1.3 ã³ã¹ãæé©åãžã®åçµ ã¯ã©ãŠãã¯æ¬çªçšŒååŸãã³ã¹ãæé©åã®ã¹ã¿ãŒãå°ç¹ã§ãã財æ¿èª²ãšããŠã¯ãæé©åã®åçµãç¶ç¶çã«è¡ãããŠããããçµå¹Žã®äºç®æ»å®ãååæå ±åã®äžã§ç¢ºèªããããšãèããããŸããåŸæ¥ãéçšçµè²»ãšããŠãŸãšããããŠããçµè²»ã®è©³çްãªå
èš³ãè²»ç®ãåºåãå€ç¶ãšãããç®åºããããšãå°é£ãªç¶æ³ã«ãããŸãããããããã¯ã©ãŠããµãŒãã¹ã®ç¹åŸŽãšãAWS Cost ExplorerãAWS Budgets çã®ç®¡çããŒã«ã«ããããªã¢ã«ã¿ã€ã ã§ç¶æ³ãå¯èŠåã§ããŸããæ¯æã®åŸé課éã®è«æ±ãèžãŸããããšã§ãã©ã®ãµãŒãã¹ããã©ã®ããã«æŽ»çšããŠããã®ããé¢é£ããéçšã®äººä»¶è²»ãšã®åãç®ã¯ã©ããªã£ãŠããã®ããå·¥æ°ã»äººæã»å䟡ã¯é©åãã©ããã人件費ã®ã»ãã·ã¹ãã ããµãŒãã¹å©çšæä»¥å€ãé倧ã«ãªã£ãŠããªãããªã©ã粟æ»ã§ããããã«ãªããŸãã äŸãã°ãã¯ã©ãŠãå©çšæã ããèŠããšãæ°èŠã³ã¹ããçºçãããããã«èŠããå Žåã§ãã£ãŠãããªã³ãã¬ãã¹æä»£ã«ã¯ãèŠãã«ãã圢ãã§çºçããŠãããé ããã³ã¹ãããå«ããç·ä¿æã³ã¹ãïŒTCOïŒã§æ¯èŒãããšãã¯ã©ãŠãç§»è¡ã«ããã·ã¹ãã å
šäœã®ã³ã¹ããåæžãããŠããã±ãŒã¹ããããŸãã ïŒé ããã³ã¹ãã®äŸïŒ ããŒã¿ã»ã³ã¿ãŒã®é»æ°ä»£ã»ç©ºèª¿è²»ïŒæœèšç®¡çè²»ã®äžã«å«ãŸããŠãããã®ïŒ è·å¡ããµãŒããŒç®¡çã«è²»ãããŠããå·¥æ°ïŒäººä»¶è²»ã®äžã«å«ãŸããŠãããã®ïŒ 5幎ããšã®ããŒããŠã§ã¢æŽæ°è²»çšïŒæŽæ°å¹ŽåºŠã«äžæ¬èšäžãããŠãããã®ïŒ çœå®³å¯Ÿççšã®ããã¯ã¢ããèšåæè³ ãã®ããã«ãã³ã¹ãæé©åã®åçµã«ããã¯ã©ãŠããµãŒãã¹ã«é©ããéçšç®¡çã宿œããŠããããã«ã¯ãäºæ¥è
ïŒASP/éçšç®¡çè£å©è
ïŒãå«ããåéšéã飿ºããã¹ããŒã ã確ç«ããŠéçšããããšãéèŠã§ãããŸããåéšéã®åœ¹å²åæ
ãšå ±åã«ãŒãïŒæ
å ±ã·ã¹ãã éšéâå課â財æ¿èª²ïŒãäºãæç¢ºã«ããŠããããšã§ãPDCAãµã€ã¯ã«ã«åºã¥ãç¶ç¶çãªã³ã¹ã驿£åãå®çŸããŸãã ãŸããäŸãã°ãæ
å ±ã·ã¹ãã å°ä»»éšçœ²ãæããªãå°èŠæš¡å£äœã«ãããŠã¯ãASPäºæ¥è
ããã®ææ¬¡ã³ã¹ãã¬ããŒããåé ããããšãåºæ¬ãšããååæããšã«è²¡æ¿æ
åœã確èªãããšããç°¡æãªéçšããå§ããããšãæ¹æ³ã®ã²ãšã€ã§ãããã®å ŽåãASPå¥çŽä»æ§æžã«ãããŠãã³ã¹ãã¬ããŒãïŒå©çšéã»è²»çšæçްïŒã®ææ¬¡æåºçŸ©åãå«ããŠããããšãèããããŸãã ãªãããã®ã³ã¹ãæé©åã«ã¯ãäºç®ãçž®æžããããšã°ãããå«ãŸããã®ã§ã¯ãªããããé©åãªãµãŒãã¹ãå©çšããããããããã¯ãããé©ãã人æãã¢ãµã€ã³ããããã«äºç®ã®æ å
ã§å²ãåœãŠãååé
ããããå¿
èŠãªçµè²»çãå¢å ãããããšãå«ãŸããç¹ã«ãçæãã ããã ïŒåèïŒ å©çšæ¹åŒãç°å¢ã«ãã£ãŠã¯ãAWS ãããžã¡ã³ãã³ã³ãœãŒã«ïŒAWS Cost ExplorerãAWS Budgets çãå«ãïŒã®é²èŠ§æš©éãèªæ²»äœè·å¡ã«ä»äžãããå ŽåããããåŸæ¥ã¯ASPïŒäºæ¥è
ïŒçµç±ã§ãã確èªã§ããªãã£ãã³ã¹ãæ
å ±ããèªæ²»äœè·å¡ãèªã確èªã§ããäºäŸãåºãŠããŸããé²èŠ§æš©éã®ä»äžãéçšç®¡çè£å©è
ã«æ±ããéã®èª¿é仿§æžã®èšèŒäŸã¯ãã·ãªãŒãºâ¡-1 ã® 3.1 ã§ç޹ä»ããŠããŸãã 以éãèªæ²»äœã®äºç®ãµã€ã¯ã«ïŒäºç®èŠæ±âå·è¡â決ç®ïŒã«æ²¿ã£ãŠãã¯ã©ãŠãã³ã¹ãã®ç®¡çæ¹æ³ãå
·äœçã«è§£èª¬ããŸãã å³: ã¯ã©ãŠãã³ã¹ããšèªæ²»äœã®äºç®ãµã€ã¯ã«ïŒæ¬åŒ§å
ã¯æ¬èšäºã®å¯Ÿå¿ç« ïŒ 2. 幎床äºç®èŠæ±æã®ã³ã¹ãèŠç©ãã å課åã¯æ
å ±ã·ã¹ãã æ
åœããæåºãããã¯ã©ãŠãå©çšæã®äºç®èŠæ±æžãæ»å®ããéã«ã財æ¿èª²ã確èªãããšãããã€ã³ãã解説ããŸãããªããã¬ãã¡ã³ãã¯ã©ãŠãã®å©çšåœ¢æ
ã¯ãå
±åå©çšæ¹åŒããšãåç¬å©çšæ¹åŒãã«å€§å¥ãããããããèŠç©ãã粟æ»ã®ãã€ã³ããç°ãªããŸããæ¬èšäºã§ã¯äž»ã«å
±åå©çšæ¹åŒã念é ã«èšèŒããŸãããåç¬å©çšæ¹åŒã®å Žåã¯ãAWS ã¢ã«ãŠã³ãå
ã®ãªãœãŒã¹ããã¹ãŠèªå£äœã®è²»çšçãšãªãããæåãäžèŠãšãªããèŠç©ããã«ãããŠãå
±åå©çšæ¹åŒãšæ¯èŒããŠèæ
®äºé
çãå°ãªãç¹åŸŽããããŸãã 2.1 ç§»è¡å幎床ã®èŠç©ãã ã¬ãã¡ã³ãã¯ã©ãŠããžã®ç§»è¡å幎床ã¯ãéå»ã®å®çžŸããŒã¿ããªããããèŠç©ããã®é£åºŠãæãé«ã幎床ã§ããäž»ã«ã AWS Pricing Calculator ãçšããŠæŠç®ãè¡ããŸããçŸè¡ã·ã¹ãã ã®æ§æïŒãµãŒããŒå°æ°ãCPU/ã¡ã¢ãª/ãã£ã¹ã¯çïŒãæŽçãã察å¿ããAWSãµãŒãã¹ã«ãããã³ã°ããŠè©Šç®ããŸãããŸããããžã¿ã«åºãGCASäžã§æäŸããå©ç𿿝èŒã®ä»çµã¿ïŒæäŸç¶æ³ã»å©ç𿹿³ã¯ããžã¿ã«åºã®æ¡å
ãã確èªãã ããïŒã掻çšãã人å£èŠæš¡ãæ¥åå
容ãé¡äŒŒããä»å£äœã®å©çšå®çžŸãåèå€ïŒã¡ã«ã¯ããŒã«ïŒãšããããšã§ãèŠç©ããã®åŠ¥åœæ§ãæ€èšŒããããšãéèŠã§ãã財æ¿éšéãäºç®æ»å®ãè¡ãéã¯ããããã®æ¯èŒããŒã¿ã®æç€ºãæ±ããããšãæå¹ã§ãã ãŸããã¯ã©ãŠããžã®ç§»è¡å®äºãŸã§ã®æ¢åã·ã¹ãã éçšè²»ãèŠèœãšãããŠããŸããšãã·ã¹ãã 忢ãäœåãªããããŠããŸãå¯èœæ§ããããŸãããã®ãããªç§»è¡éæž¡æã«ä¿ãè²»çšã«ã€ããŠãé©åã«èšäžãããŠããããšã確èªããŠãã ããããªããã¯ã©ãŠãç§»è¡ã«åœãã£ãŠã¯ããã¹ãç°å¢ã®çšŒåãäžæçãªã¹ã±ãŒã«ã¢ãããæ³å®å€ã®ããŒã¿è»¢éçã®ã³ã¹ãã®èæ
®ãå¿
èŠã«ãªããŸããæäŸããè¡æ¿ãµãŒãã¹çã®åæ¢çãé²ãããã«ããåããŠã®ã·ã¹ãã ã®ç§»è¡ã¯æãæŒããªãæ
éã«ããã€åŸé課éãå å³ããŠãããã¡ãæã€ããšãèããããŸãããã®ãããé¡äŒŒããããããã¯å
è¡ããåèŠæš¡ã®äºäŸãåç
§ããäžã§ãå幎床ã¯ç¹ã«äœè£ãæã£ãäºç®ã確ä¿ããããšãæšå¥šããŸãã 確èªé
ç® äž»ãªãã§ãã¯ãã€ã³ã èŠç©ããæ ¹æ AWS Pricing Calculator çã®ããŒã«ã䜿ã£ã詊ç®çµæãæ·»ä»ãããŠããã ã¹ãã㯠ã€ã³ã¹ã¿ã³ã¹ãµã€ãºïŒãµãŒããŒèŠæš¡ïŒãçŸè¡ã·ã¹ãã ã®å®äœ¿çšéã«å¯Ÿã驿£ããé¡äŒŒèŠæš¡ã®ä»å£äœã«ãããå®çžŸå€ãšå€§ããä¹é¢ããŠããªãã ã¯ã©ãŠãå©çšæã»ç§»è¡ã¹ã±ãžã¥ãŒã« ã»äœæããã¯ã©ãŠãå©çšæãçºçãããïŒææ° Ã æé¡ã§ç©ç®ãããŠãããïŒ ã»ãã¹ãç°å¢çšŒåããç§»è¡å®äºåŸå¹ŽåºŠæ«ãŸã§ã®ææ°åãé©åã«èšäžãããŠããã ç§»è¡äœæ¥è²» ããŒã¿ç§»è¡ãç°å¢æ§ç¯ããã¹ãçã«èŠããäœæ¥è²»çšãé©åã«èšäžãããŠããã ç°å¢çšŒå ã»ãã¹ãç°å¢ã®çšŒåæéãéå®ãããŠãããïŒ24æé皌åã¯äžèŠïŒ ã»å
±åå©çšæ¹åŒã®å Žåãéçšç®¡çéšåïŒç£èŠã»ããã¯ã¢ããçïŒåã³ãããã¯ãŒã¯éšåã®è²»çšãé©åã«æåãããŠããã ã»éçºç°å¢ã»ãã¹ãç°å¢ãç§»è¡èšç»ã«æ²¿ã£ãã¿ã€ãã³ã°ã§çž®éã»çµäºãããèšç»ãšãªã£ãŠãããïŒçšŒååŸãæ®åããŠããªããïŒ äžŠè¡çšŒåè²» ç§»è¡å®äºãŸã§ã®æ¢åã·ã¹ãã éçšè²»ãé©åã«èšäžãããŠããã çºæ¿èæ
® çºæ¿å€åãšçºæ¿åºå®ã®åæ¹ã®å¥çŽæ¹åŒã«ãããè²»çšãå·®ç°ãæ¯èŒããŠããã æ»å®ã®ã³ã : å幎床ã¯ãäžç¢ºå®æ§ãé«ããããšãåæã«ãäºç®ãèªãã代ããã«ãååæããšã®å®çžŸå ±åããæ¡ä»¶ãšããŠä»ãããšã§ãå·è¡æ®µéã§ã®ç®¡çãæ
ä¿ã§ããŸãã 2.2 2幎ç®ä»¥éã®èŠç©ãã 2幎ç®ä»¥éã¯ãå幎床ã®å®çžŸããŒã¿ãæãä¿¡é Œã§ããèŠç©ããæ ¹æ ã«ãªããŸãã èŠç©ããæé ïŒ åå¹ŽåºŠã®æå¥å©çšå®çžŸïŒUSDïŒãAWSã®è«æ±ããŒã¿ããååŸããŸãã å£ç¯å€åïŒç¢ºå®ç³åææã®è² è·å¢ã幎床æ«åŠççïŒã«ãã墿žãèæ
®ããŸãã æ°èŠãµãŒãã¹ã®è¿œå ã»æ¢åãµãŒãã¹ã®å»æ¢ã®åœ±é¿ãå å³ããŸãã å幎床ã«å®æœããã³ã¹ãæé©åæœçã®éå¹Žå¹æïŒå¹ŽåºŠéäžã®å®æœåã12ãæã«æ¡åŒµïŒãåæ ããŸãã çºæ¿ã¬ãŒããèšå®ããŠJPYã«æç®ããŸãã äºèŠãé£ãç°å¢å€åãžã®å¯Ÿå¿ã«èŠããçµè²»ãšããŠäºåçãªçµè²»ãäžä¹ãããŸãããªããäºç®æ»å®ã«ãããŠã¯ãäºåçãªçµè²»åã®äºç®ã«ã€ããŠã¯å·è¡ä¿çåãšããéçšãèããããŸãããããã«ãããäºåçãªçµè²»ã®èšå®ã«ããã£ãŠã¯æ ¹æ ã®æç€ºãéèŠã§ãã ïŒåèïŒèšç®äŸïŒåå¹ŽåºŠã®æå¹³åå©çšé¡ã$4,200ã®å Žåãé幎æç®ã§$50,400ãå€åèŠå ïŒ+$5,100ïŒãšæé©å广ïŒâ²$4,800ïŒãå å³ãããš$50,700ãã¬ãŒã160å/USDã§æç®ãããšçŽ811äžåãäºåçãªçµè²»ãšããŠä»®ã«12%ïŒ97äžåïŒãå ãããšãäºç®èŠæ±é¡ã¯908äžåãšãªããŸãïŒ12%ã¯èšç®ã®ããã®ä»®ã®å€ã§ãïŒã é·æå©çšå²åŒïŒãªã¶ãŒããã€ã³ã¹ã¿ã³ã¹ã»Savings PlansïŒãé©çšããŠããå ŽåããŸãã¯é©çšãäºå®ããŠããå Žåã®äºç®äžã®æ±ãã¯ãAppendix ã§è£è¶³ããŠããŸãã 確èªé
ç® äž»ãªãã§ãã¯ãã€ã³ã å幎床å®çžŸ æå¥å®çžŸããŒã¿ïŒUSDïŒãæ·»ä»ãããŠããããæ ¹æ ã®ãªãå¢é¡èŠæ±ã«ãªã£ãŠããªãã å€åèŠå å¢é¡ã®å ŽåïŒå
·äœçãªçç±ïŒå©çšè
å¢ãæ°æ©èœè¿œå çïŒã瀺ãããŠããã æé©å广ã®åæ å幎床ã®åæžæœçã®å¹æã次幎床èŠç©ããã«åæ ãããŠãããïŒåæ ãããŠããªããã°éå€§ïŒ ãªã¹ã¯äºèŠã»äºåçãªçµè²» éå»1幎éã®å®éã®å€åå¹
ã«å¯ŸããŠäžä¹ãå¹
ãé倧ã§ãªããïŒ2幎ç®ä»¥éãå幎床ãšåãäžä¹ãå¹
ã®ãŸãŸã«ãªã£ãŠããªããïŒ 3. 幎床éäžã®ã³ã¹ãå€åãžã®å¯Ÿå¿ æ
å ±ã·ã¹ãã æ
åœãŸãã¯å課ããååæããšã«å ±åãåããéãæ¬¡ã®èгç¹ã§ç¢ºèªããŸãã 確èªé
ç® äž»ãªãã§ãã¯ãã€ã³ã äºç®æ¶åç çµéææ°ã«å¯Ÿãã蚱容ç¯å²ã§ãããã©ãã 幎床å
ã®äºç®æ¶å äºç®å
ã«åãŸãèŠéããã©ãã çºæ¿ã®åœ±é¿ å®çžŸãäºç®ã¬ãŒããäžåã£ãŠããå Žåãäºç®ã®æ å
ã«åãŸãèŠèŸŒã¿ãã©ãã æé©åã®åçµ æœçã宿œãããŠãããïŒãç¹ã«ãªããã¯èŠç¢ºèªïŒ 3.1 AWS Budgets ã«ããäºç®èšå®ã»äºç®è¶
éã®é²æ¢ GCASã¬ã€ãã®äºå®ç®¡çã§ã¯ãAWS Budgets ã«ææ¬¡äºç®ãèšå®ããããšãšãããŠããŸãã幎éäºç®é¡ïŒUSDïŒãå©çšææ°ã§é€ç®ããŠææ¬¡äºç®é¡ãç®åºãã€ã€ãå£ç¯å€åãèæ
®ããç¹å¿æïŒç¢ºå®ç³åææã®1ã3æçïŒã¯å€ãã«ã鿣æã¯å°ãªãã«é
åãããŠããããšã確èªããŠãã ããããããã®èšå®ãè¡ãããšã§ãäºç®è¶
éãèŠèŸŒãŸããå Žåã«äºåã¢ã©ãŒãã«ããæ©ææ€ç¥ãšå¯Ÿçãå¯èœã«ãªããŸããã¢ã©ãŒãã®äž»ãªèšå®æ¹æ³ãšããŠã¯ãâ AWS Budgetsã«ããéŸå€ãèšå®ããŠäºç®äžéè¶
éãç£èŠãããâ¡AWS Cost Anomaly Detectionã«ããã³ã¹ãæ¥éš°ãªã©ã®ç°åžžæ€ç¥ãè¡ããã®2ã€ãæããããŸãã ã¢ã©ãŒããçºå ±ãããå Žåã®å課ã®äž»ãªå¯Ÿå¿ã¯ã次ã®ãšããã§ãã èšå®ãã¹ãäžèŠãªãœãŒã¹ã®æŸçœ®ã§ããã°å³ææ¯æ£ ææ«ãŸã§ãšå¹ŽåºŠæ«ãŸã§ã®çޝèšèŠèŸŒã¿ãç®åºããæææ±ºå®æš©è
ã«å ±å äºç®è¶
éãèŠèŸŒãŸããå Žåã«äºåã¢ã©ãŒãã®éç¥å
ã«ã財æ¿èª²ãå«ããŠããããšã§ã財æ¿èª²åŽãã察å¿ãæç€ºããããšãå¯èœãšãªããæ©æã®å¯Ÿçã«ããäºç®è¶
éã®äºé²ã«ãç¹ãããŸãã å³: ïŒåèïŒAWS Budgets ãš AWS Cost Anomaly Detection ã«ããäºç®è¶
éã»ç°åžžã®æ€ç¥ 3.2 å·è¡æ®çºçæã®æ±ã åŸé課éã§ã¯ãå©çšãå°ãªãã£ãå Žåã«å·è¡æ®ãçºçããŸããçºçèŠå ã«ã¯ã次ã®ãããªã±ãŒã¹ããããŸãã ã³ã¹ãæé©åæœçã®ææïŒç©æ¥µçãªåçµã®çµæïŒ æ³å®ããå©çšéãå°ãªãã£ãïŒå©çšè
æ°ãèŠèŸŒã¿ãäžåã£ãçïŒ çºæ¿ã¬ãŒããæå©ã«æšç§»ããïŒå€éšèŠå ïŒ èŠç©ããæã®äºåçãªçµè²»ã®èšå®ãé倧ã ã£ã ãã®ãã¡ãæé©åã®ææã«ããå·è¡æ®ã¯ãã¯ã©ãŠããµãŒãã¹åã³FinOpsã®æŽ»åã®åªããææã«ãªããŸããäžæ¹ã§ãå·è¡æ®ãçºçããããšãçç±ã«ãç¿å¹ŽåºŠäºç®ãæ©æ¢°çã«åæžããããšã«ã¯ãªã¹ã¯ããããŸããæé©åã®åçµã®åçŸæ§ã®æ€èšŒãé¢é£ã·ã¹ãã ãå«ããå
šäœæé©ãšããŠã®éçšã®ç¢ºèªçãæ¬¡å¹ŽåºŠä»¥éã®å€åäºç±ã®èæ
®çãèžãŸããå¿
èŠããããŸããããã§ãæé©åã®å¹æãçããç¿å¹ŽåºŠïŒNïŒ1幎床ïŒã¯ã广ãç¶ç¶ããŠããããæ€èšŒããæéãšãã广ãå®çããããšã確èªã§ããæ®µéã§ãç¿ã
幎床ïŒNïŒ2幎床ïŒã®äºç®ã®èŠçŽãã«åæ ãããšãã£ã段éçãªæ±ããèããããŸããæ¿çç®çã«ç
§ãããé©åãªã·ã¹ãã éçšçãç®æãã€ã€ãåèª²ã®ææ¬²ãæå€§éçºæ®ããããšãå¯èœãªä»æãã§ãFinOpsãšå¹ææ€èšŒãçå®ã«é²ããããšãéèŠã§ãã ãŸããã¯ã©ãŠããµãŒãã¹ã®åŒ·ã¿ã¯ãæè»ãªæ©èœæ¡åŒµããã°åæåºç€ãã¹ããŒãã£ã«æ§ç¯ããææ°æè¡ã®çæéã®è©Šéšéçšçãå¯èœã§ããç¹ã§ãããããã¯ãäœæ°ãµãŒãã¹ã®åäžãDXã®å éåãã»ãã¥ãªãã£åŒ·åã«ãçŽçµãããã®ã§ããããããªãå©äŸ¿æ§ãšå®å¿ã®å¥œåŸªç°ãçã¿åºãããšãæåŸ
ãããŸãããŸããå¹³æã®éçšç®¡çãã·ã¹ãã /ãµãŒãã¹ã掻çšããå·åã®éè¡ã«ã€ããŠãæŽãªãæ¥åå¹çåã«åããææ°ã®ããžã¿ã«æè¡ãAIçã®æŽ»çšãå³ãããšã广çã§ãã ãã®ãããæé©åã®åçµçã«ããçºçããå·è¡æ®ã«ã€ããŠãäºç®æŽ»çšã®çæã»äžæã®éçšãµã€ã¯ã«ãšããŠãæ¬æ¥çãªæ¿çç®ççãå«ããåèª²ã»æ
å ±ã·ã¹ãã 課ã»è²¡æ¿èª²ãã®ä»ã®é¢ä¿æ©é¢ã§èªèåãããè¡ãããšãéèŠã§ãããã®éãäŸãã°ãäºç®å·è¡ã®ã«ãŒã«ã®ç¯å²å
ã«ãããŠãå·è¡æ®ãããŸã掻çšãã€ã€ãFinOpsã®çµæã®å®æ§åãææ°æè¡ã®è©Šçšãå®èšŒå®éšçãžã®æŽ»çšãéžæè¢ã®äžã€ãšããŠæ€èšããããšã§ãã³ã¹ãæé©åã®åçµãç¶ç¶ããåæ©ä»ãã«ããªãåŸããšèããããŸãã 4. ãŸãšã 以äžãã¯ã©ãŠãã³ã¹ãã®äºç®ç®¡çãããŒããšããã¯ã©ãŠãçµè²»ã®äºç®æ»å®ã»å·è¡ç®¡çãè¡ãéã®å®åçãªèŠç¹ã«ã€ããŠã玹ä»ããããŸããã ç¹°ãè¿ãã«ãªããŸãããã¯ã©ãŠãã¯æ¬çªçšŒååŸãã³ã¹ãæé©åã®ã¹ã¿ãŒãå°ç¹ã§ããã¯ã©ãŠããµãŒãã¹å©çšæã®é©æ£åã«ããã³ã¹ãåæžã«åªãã€ã€ãæè»ãªæ©èœæ¡åŒµããã°åæåºç€ãã¹ããŒãã£ã«æ§ç¯ããææ°æè¡ã®çæéã®è©ŠéšéçšçãéããŠãäœæ°ãµãŒãã¹ã®åäžãDXã®å éåãã»ãã¥ãªãã£åŒ·åã«åãçµãããšãæåŸ
ãããŸããã¯ã©ãŠããµãŒãã¹ã®å©çšå®çžŸã®å¯èŠåãåæžææ¡ãç¿äºæ¥å¹ŽåºŠã®æ¹åææ¡ã»ç®æšèšå®çã®ãµã€ã¯ã«ã广çã«å®æœããããšã§ãããžã¿ã«æè¡ã䜿ãããªããå¹ççãªè¡æ¿éå¶ãšè±ãã§äŸ¿å©ãªç€ŸäŒãå®çŸããŠããã ããã°ãšåããŸãã ãã詳ããç¥ãããæ¹ãž æ¬èšäºã§æ±ããªãã£ãæ¥ã
ã®ã³ã¹ã確èªã調é仿§æžãžã®åæ ãªã©ã¯ãã·ãªãŒãºã®ä»ã®èšäºã§è§£èª¬ããŠããŸãã ããããããš åç
§å
宿çãªã³ã¹ã確èªã®æé ã»ãã§ãã¯ãªã¹ããç¥ããã ã·ãªãŒãºâ 調é仿§æžãžã®FinOpsèŠä»¶ã®åæ æ¹æ³ãç¥ããã ã·ãªãŒãºâ¡-1 çæ AI ã䜿ã£ãã³ã¹ã確èªã®å¹çåãç¥ãããïŒå
¬éäºå®ïŒ ã·ãªãŒãºâ¡-2 éçšç®¡çè£å©è
ã»ASPãšããŠå
·äœçã«äœããã¹ããç¥ãããïŒå
¬éäºå®ïŒ ã·ãªãŒãºâ£ Appendix é·æå©çšå²åŒïŒãªã¶ãŒããã€ã³ã¹ã¿ã³ã¹ã»Savings PlansïŒã®äºç®äžã®æ±ã AWSã«ã¯ãäžå®æéïŒ1幎åã¯3幎ïŒã®å©çšãçŽæïŒã³ãããïŒããããšã§å²åŒãåããããä»çµã¿ããããŸããããã¯ãèªæ²»äœãè€åæ©ãã³ããŒçšçŽãã幎éå¥çŽãããããšã§å䟡ãäžããã®ãšåãèãæ¹ã§ãã éåžžå©çšïŒåŸé課éïŒ ïŒæ¯æã䜿ã£ãåã ãå®äŸ¡ã§è«æ±ãããŸãã é·æå©çšå²åŒé©çšåŸ ïŒSavings Plans ã¯ã1æéãããã®å©çšéé¡ïŒUSDïŒãããªã¶ãŒããã€ã³ã¹ã¿ã³ã¹ã¯ãã€ã³ã¹ã¿ã³ã¹ã®çš®é¡ãšå°æ°ããåäœãšããŠã³ãããããã³ãããåã«ã¯å²åŒå䟡ãé©çšãããŸããã³ããããè¶
ããå©çšåã¯éåžžã®åŸé課éå䟡ã§è«æ±ãããŸãã 賌å
¥ã»èšå®ã®æµã ã¬ãã¡ã³ãã¯ã©ãŠãã§ã¯ããªã¶ãŒããã€ã³ã¹ã¿ã³ã¹ã»Savings Plans ã®ãããããèªæ²»äœãšåæããå
容ã«åºã¥ããŠéçšç®¡çè£å©è
ã賌å
¥ã»èšå®ããŸãã財æ¿éšéãšããŠã¯ã賌å
¥ã®ææã»æéã»ã³ãããã®æ°Žæºãäºç®ãšæŽåããŠãããããæ
å ±ã·ã¹ãã æ
åœãšããããã確èªããŠããããšãèããããŸããã³ãããã¯æéäžã®å€æŽã»åæ¶ãååã§ããªãããã確å®ã«å©çšããæ°Žæºã§èšå®ããããšãéèŠã§ãã賌å
¥ææã®èãæ¹ã¯ãã·ãªãŒãºâ ã® 2.2 ã§ç޹ä»ããŠããŸãã èªæ²»äœãéå»ã®å©çšå®çžŸãåºã«ã確å®ã«å©çšããæäœæ°Žæºã®ã³ãããé¡ãç®åºããŸãã ããžã¿ã«åºã«å¯ŸããŠé·æå©çšå²åŒã®é©çšãç³è«ããŸãã ããžã¿ã«åºãç³è«ãåããŸãšããäžæ¬ã§å²åŒã賌å
¥ã»é©çšããŸãã å²åŒå¹æãèªæ²»äœã®ææ¬¡å©çšæã«åæ ãããŸãã â» ã³ãããã¯æéäžã®å€æŽã»åæ¶ãååã§ããªãããã確å®ã«å©çšããæäœæ°Žæºã§èšå®ããããšãéèŠã§ããç³è«æç¶ãã®è©³çŽ°ãææ°ã®éçšã¯ãããžã¿ã«åºã®æ¡å
ãã確èªãã ããã å
責äºé
: æ¬èšäºã®å
å®¹ã¯æ
å ±æäŸãç®çãšãããã®ã§ãããç¹å®ã®ç°å¢ãèŠä»¶ã«å¯Ÿããæšå¥šãä¿èšŒãããã®ã§ã¯ãããŸãããå®éã®å¹æã¯åå¥ã®ç°å¢ã»æ§æã«ããç°ãªããŸããAWS ãµãŒãã¹ã®æéã¯å€æŽãããå ŽåããããŸãã®ã§ãææ°ã®æéæ
å ±ã¯ AWS æéããŒãž ãã確èªãã ããã ã¬ãã¡ã³ãã¯ã©ãŠãã«é¢ãããçžè«: ã¬ãã¡ã³ãã¯ã©ãŠãã®å©æŽ»çšã«é¢ããã質åããçžè«ã¯ã AWS ã¬ãã¡ã³ãã¯ã©ãŠãçžè«çªå£ ãŸã§ãåãåãããã ããã çè
ã«ã€ã㊠Chisaki Noguchi éå£ æºçŽæš¹ïŒChisaki NoguchiïŒã¯ãèªæ²»äœåãã®æ°èŠäºæ¥éçºçæ
åœã§ããäžå€®çåºã§ã®å€åçµéšã掻ãããæ¿åºã®æ¹éçãèžãŸããäžé·æçãªèŠç¹ã§ãã¯ã©ãŠããAIãæŽ»çšããè¡æ¿èª²é¡ã»å°å課é¡ã®è§£æ±ºãæç¶å¯èœãªãµãŒãã¹ã®æ§ç¯çã«ããè±ãã§äŸ¿å©ãªç€ŸäŒã®å®çŸã«åãçµãã§ããŸãã Kazuki Fujimoto è€æ¬ äžæš¹ïŒKazuki FujimotoïŒã¯ããããªãã¯ã»ã¯ã¿ãŒã®èªæ²»äœæ
åœã®ãœãªã¥ãŒã·ã§ã³ã¢ãŒããã¯ãã§ããèªæ²»äœã®åºå¹¹ã·ã¹ãã ã®ã¯ã©ãŠãç§»è¡ãããã«äŒŽãã³ã¹ãæé©åãšã¢ããã€ãŒãŒã·ã§ã³ãçæ AI ã®æŽ»çšæ¯æŽãªã©ããããªã£ãŠããŸãã
ã¯ããã« ããã«ã¡ã¯ãZOZOMOéšFBZãããã¯ã®æç°ã§ããæ®æ®µã¯ Fulfillment by ZOZO ïŒä»¥äžãFBZïŒãæäŸããAPIã·ã¹ãã ãéçºã»éçšããŠããŸããæšå¹Žããã¯ã瀟å
ã«ãããéçºè
åãAIæ¯æŽããŒã«ã®æšé²ãæ
ãå°éããŒã ãå
ŒåããŠããŸãã FBZ APIã¯2017幎ã«Serverless Frameworkã§æ§ç¯ãéå§ããçŸåšã¯AWS LambdaïŒä»¥äžãLambdaïŒã®é¢æ°500æ¬è¶
ã40å以äžã®ã¹ã¿ãã¯ã§çšŒåããŠããŸãããµãŒããŒã¬ã¹èªäœã®éçšè² è·ã¯äœãäžæ¹ã9幎éã§ããŒã«ã®æååããã©ã°ã€ã³ã®ä¿å®åæ¢ãã©ã³ã¿ã€ã ã®EOLããªãœãŒã¹äžéãšãã£ããåšèŸºç°å¢ã®å€åããžã®è¿œåŸãè¿«ãããŠããŸãããæ¬èšäºã§ã¯ãããããå€åãžã®è¿œåŸã«ããã課é¡ãšããã®è§£æ±ºã«è³ãåãçµã¿ã玹ä»ããŸãã ç®æ¬¡ ã¯ããã« ç®æ¬¡ FBZ APIã®æ§æãšã·ã¹ãã èŠæš¡ 9幎éã§çŽé¢ãã3ã€ã®å€å 1. æ§æç®¡çïŒServerless Frameworkãšãã©ã°ã€ã³ã®é·æéçšã«äŒŽãèª²é¡ 2017幎ã®éžå®èæ¯ïŒãšã³ã·ã¹ãã ãšæ¡åŒµæ§ãéèŠ v1ã«ãšã©ãŸã£ã5幎éãšãã©ã°ã€ã³ã«ããæ¡åŒµã»è² åµå 2024å¹Žã®æåå察å¿ïŒç§»è¡ã³ã¹ã vs ã©ã€ã»ã³ã¹è²»çš ãã©ã°ã€ã³ã®æŽçãšãå€éšäŸåããæ±ã蟌ãå€æåºæº 2. ã©ã³ã¿ã€ã EOLïŒè¿«ãæéãšãæåæ€èšŒãã®éç 1åç®ïŒPython 3.6ãã3.9ãžïŒïŒæåæ€èšŒã«ãã3ãæã®èŠé 2åç®ïŒPython 3.9ãã3.13ãžïŒïŒE2Eãã¹ãã«ããæéççž®ãšäœæ¥è² è·ã®è»œæž 3. ã·ã¹ãã èŠæš¡ã®æ¡å€§ïŒã¢ããªã±ãŒã·ã§ã³ã®è¥å€§åãšãããã€æéã®é·æå CloudFormationã®ãªãœãŒã¹äžé 1æéãè¶
ããçŽåãããã€æé å€åã«è¿œåŸãç¶ããããã®ã3ã€ã®ä»çµã¿ã 1. å€æåºæºïŒãããã€åŸã®å¥å
šæ§ãæ
ä¿ããE2Eãã¹ã å€æåºæºãšããŠæ©èœããçç± Karateã§æžããE2Eãã¹ã ããããå€åãæ¯ããå®å
šç¶²ãšããŠã®å¹æ 2. å¯èŠ³æž¬æ§ãšæ€ç¥ïŒå€æŽåŸã®åœ±é¿ã»äºå
ãæããç£èŠ Datadogã«ãã忣ãã¬ãŒã·ã³ã°ãšã¡ããªã¯ã¹ç£èŠ AWS Health Eventã®Slack飿ºã«ããéèŠæ
å ±ã®æ©ææ€ç¥ 3. åºç€ã®æé©åïŒã¹ã¿ãã¯åå²ãšãããã€ã®äžŠåå ã¹ã¿ãã¯åå²ãšå
±æãªãœãŒã¹ã®éçŽ ãããã€äžŠååã«ãããªãŒãã¿ã€ã 70ïŒ
åæž ãŸãšã FBZ APIã®æ§æãšã·ã¹ãã èŠæš¡ FBZ APIã¯ã2017幎7æã«éçºãéå§ããçŸåšãŸã§çŽ9幎éã«ããã£ãŠãµãŒããŒã¬ã¹ã¢ãŒããã¯ãã£ãäžå¿ã«çšŒåãç¶ããŠããAPIã·ã¹ãã ã§ãã çŸåšã®æè¡ã¹ã¿ãã¯ãšèŠæš¡æã¯ä»¥äžã®ãšããã§ãã å®è£
èšèª ïŒPython 3.13 äž»èŠã³ã³ããŒãã³ã ïŒAWS LambdaãAmazon API Gateway èŠæš¡ ïŒLambda颿°500æ¬è¶
ãAWS CloudFormationïŒä»¥äžãCloudFormationïŒã¹ã¿ãã¯40åä»¥äž æ§æç®¡çããŒã« ïŒServerless Framework ãµãŒãã¹æ§æãã¢ãŒããã¯ãã£æŠç¥ã®å
šäœåã¯ã以äžã®èšäºã§ã詳ãã玹ä»ããŠããŸãã techblog.zozo.com æ§æç®¡çã«æ¡çšããŠããServerless Frameworkã¯ããµãŒããŒã¬ã¹ã¢ããªã±ãŒã·ã§ã³ã®ã³ãŒããšã€ã³ãã©ã宣èšçã«äžå
管çã§ãããã¬ãŒã ã¯ãŒã¯ã§ãã www.serverless.com ã·ã³ãã«ãªæäœã§ã³ãŒãã®ããã±ãŒãžã³ã°ãããªãœãŒã¹å®çŸ©ã®çæããããã€ãŸã§ãèªååã§ããŸããè€éãªã¯ã©ãŠãæ§æãæèããã«ã¹ã¿ãã¯åäœã§å®¹æã«ç®¡çã§ããç¹ããã³ãã¥ããã£è£œã®è±å¯ãªãã©ã°ã€ã³ã«ããæè»ã«æ©èœãæ¡åŒµã§ããç¹ã倧ããªç¹åŸŽã§ãã ãããã管çã®å®¹æããšé«ãæ¡åŒµæ§ã«æ¯ããããã€ã³ãã©ã®éçšä¿å®ã³ã¹ãã¯9幎ãçµéããçŸåšãäœãæããããŠããŸããããããäŸåããŠãããã©ã°ã€ã³ã®ä¿å®åæ¢ããã¬ãŒã ã¯ãŒã¯ã®ããŒãžã§ã³ã¢ãããªã©ããšã³ã·ã¹ãã ã®çºå±ã«äŒŽãå€åãžã®è¿œåŸãéçšã®çŸå Žã§å€§ããªèª²é¡ãšãªã£ãŠãããŸããã 9幎éã§çŽé¢ãã3ã€ã®å€å 9幎éã®éçšãç¶ããäžã§ã倧ããåããŠæ¬¡ã®3ã€ã®å€åã«çŽé¢ããŸããã æ§æç®¡çïŒServerless Frameworkãšãã©ã°ã€ã³ïŒ ïŒé·æå©çšã«äŒŽãäŸåãã©ã°ã€ã³ã®è² åµåãããã¬ãŒã ã¯ãŒã¯v4ã®æåå ã©ã³ã¿ã€ã ïŒLambdaã®Pythonã©ã³ã¿ã€ã ãµããŒãçµäºïŒ ïŒå®æçã«èšªãããµããŒãçµäºãžã®è¿œåŸãšãååç§»è¡ã«ãããæ€èšŒã®é·æåïŒçŽ3ãæïŒ ã·ã¹ãã èŠæš¡ïŒã¢ããªã±ãŒã·ã§ã³ã®è¥å€§åïŒ ïŒæ©èœè¿œå ã«äŒŽãCloudFormationã®ãªãœãŒã¹äžéãžã®å°éãããããã€æéã®é·æåïŒ1æéè¶
ïŒ 1ãš2ã¯ã©ã€ã»ã³ã¹äœç³»ãå€éšã³ãã¥ããã£ãAWSã®ãµããŒãæ¹éãšãã£ããå€éšç°å¢ã®å€åãã§ããã3ã¯ãããã¯ãã®æé·ã«äŒŽããå
éšèŠå ã®å€åãã§ããããããã®å€åã«ãããŠãã©ã®ãããªèª²é¡ãçããã®ããæ¯ãè¿ããŸãã 1. æ§æç®¡çïŒServerless Frameworkãšãã©ã°ã€ã³ã®é·æéçšã«äŒŽãèª²é¡ 2017幎ã®éžå®èæ¯ïŒãšã³ã·ã¹ãã ãšæ¡åŒµæ§ãéèŠ 2017幎ã®éçºåæããµãŒããŒã¬ã¹ã®æ§æç®¡çããŒã«ã®éžæè¢ã¯çŸåšãšã¯å€§ããç°ãªã£ãŠããŸãããçŸåšåºã䜿ãããŠããAWS CDKïŒ2019幎ã«äžè¬æäŸãéå§ïŒã¯ãŸã ç»å ŽããŠããŸãããããŒã ãæ€èšŒããã®ã¯ãServerless FrameworkãAWS Serverless Application ModelïŒä»¥äžãAWS SAMïŒãCloudFormationã®3ã€ã§ããã 3ããŒã«ãæ¯èŒæ€èšããçµæã¯ä»¥äžã®ãšããã§ãã èŠ³ç¹ CloudFormation AWS SAM Serverless Framework èšè¿°é ÃïŒé
ç·ããããã±ãŒãžã³ã°ãŸã§ãã¹ãŠèªåã§èšè¿°ãã颿°ãå¢ããã»ã©è¥å€§åãã âïŒCloudFormationã®æ¡åŒµã§ãµãŒããŒã¬ã¹ã®å®çŸ©ãç°¡æœ âïŒé¢æ°ãšã€ãã³ãããªãœãŒã¹ãçãYAMLã§å®çŸ©ã§ãã æç床 âïŒAWSçŽæ£ã§å®çžŸãåå ÃïŒç»å ŽçŽåŸã§æªæç âïŒåœæã®ããã¡ã¯ãã¹ã¿ã³ããŒãã§å©çšäºäŸãè±å¯ æ¡åŒµæ§ â³ïŒæ±çšããã«äžè¶³ã¯ãã¹ãŠæäœã ÃïŒãã©ã°ã€ã³ã®ãããªæ¡åŒµææ®µããªã âïŒãã©ã°ã€ã³ãã¯ãããšã³ã·ã¹ãã ãå
å® å¿
èŠãªæš©é âïŒCloudFormationã®æš©éã®ã¿ âïŒCloudFormationæºæ â³ïŒadminçžåœã®æš©éãå¿
èŠ çµè« èŠéã èŠéã æ¡çš åœæã®æç床ã®å·®ã¯ãåããŒã«ã®ãªãªãŒã¹ææãæ®åç¶æ³ãæ¯èŒãããšæç¢ºã§ãããAWS SAMã®æ¬äœãäžè¬æäŸãããã®ã¯2018幎4æã§ãCLIã®äžè¬æäŸã¯2020幎7æã§ããäžæ¹ã®Serverless Frameworkã¯ã2016幎10æã®v1.0ãªãªãŒã¹æç¹ã§GitHubã¹ã¿ãŒã11,000ãè¶
ãã2018幎ã«ã¯25,000ãè¶
ããŠããŸãã 1 ã äžæ¹ã§èª²é¡ãšãªã£ãã®ãå¿
èŠãªæš©éã§ããServerless Frameworkã¯adminçžåœã®æš©éãèŠæ±ãããããåœåã®éçºè
æš©éã®ãŸãŸã§ã¯ãªãœãŒã¹ãæ£åžžã«äœæã§ããŸããã§ããããã®ç¹ã¯ç€Ÿå
ã§èª¿æŽããå¿
èŠãªæš©éãä»äžããŠãããããšã§è§£æ±ºããŸããã æ¯èŒã®çµæãAWSçŽæ£ã®2ããŒã«ãããæçåºŠãæ©èœã®è±å¯ãã«ã¡ãªãããæããServerless Frameworkã®æ¡çšã«è³ããŸããã v1ã«ãšã©ãŸã£ã5幎éãšãã©ã°ã€ã³ã«ããæ¡åŒµã»è² åµå æ¡çšç¿å¹Žã®2018幎ã«v1.27ãžæŽæ°ããŠä»¥éã2023幎ãŸã§çŽ5幎éã«ãããv1ç³»ã®ãã€ããŒæŽæ°ã«ãšã©ãŸããŸããããã®éãéçºå
ããã¯v2.0ãv3.0ããªãªãŒã¹ãããŠããŸããã 以äžã®å³ã¯ãServerless Frameworkæ¬äœã®ã¡ãžã£ãŒãªãªãŒã¹ãšãFBZ APIã«ããã远åŸã®æ©ã¿ããŸãšãã幎衚ã§ãã å³ã瀺ãããã«ãäžã®äžã§v2ãv3ãç»å ŽããéãFBZ APIã§ã¯çŽ5幎év1ç³»ãç¶æãã2023幎ã«v2ãã¹ãããããŠv3ãžç§»è¡ãã圢ããšããŸããã é·æév1ç³»ã«ãšã©ãŸã£ãã®ã¯ãåœæã®æ©èœéçºã«å€§ããªæ¯éãçããŠãããããã¬ãŒã ã¯ãŒã¯èªäœã®æŽæ°åªå
床ãäžãã«ããã£ãããã§ãã äžæ¹ã§ãã·ã¹ãã ã®æé·ã«äŒŽããæšæºæ©èœã ãã§ã¯èŠä»¶ã®å®çŸãé£ããã£ãããäœèšãªå®è£
å·¥æ°ãããã£ããããå Žé¢ãå¢ããŠãããŸãããããã§æŽ»çšããã®ããServerless Frameworkã®åŒ·åãªãã©ã°ã€ã³ãšã³ã·ã¹ãã ã§ããå
¬éãã©ã°ã€ã³ã®å°å
¥ã«ãšã©ãŸãããèŠä»¶ã«å¿ãããã©ã°ã€ã³ã®èªäœããæ¢åãã©ã°ã€ã³ãžã®ãã«ãªã¯ãšã¹ãã«ããæ©èœè¿œå ã»ä¿®æ£ãéããŠèª²é¡ã解決ããŠãããŸããã Serverless Frameworkã§ã¯ã以äžã®ããã«èšå®ãã¡ã€ã«ã® plugins ã«äœ¿ããããã©ã°ã€ã³ãæå®ããã ãã§ãæ¬äœã«æãå ããããšãªããããã€ã®åå·¥çšãžç¬èªã®åŠçãå·®ã蟌ããŸãã service : fbz-api provider : name : aws runtime : python3.13 plugins : - serverless-plugin-split-stacks - serverless-plugin-datadog - my-original-plugin # èªäœãã©ã°ã€ã³ãæå®å¯èœ ãã«ããããã±ãŒãžã³ã°ããããã€ãšãã£ãäžé£ã®ã©ã€ããµã€ã¯ã«ã«å¯ŸããŠãã现ããããã¯ã§ããCloudFormationãã³ãã¬ãŒãã®çŽæ¥æäœãèšå®ã®èªå泚å
¥ãå¯èœã§ããã€ã³ãã©ããã¢ããªã±ãŒã·ã§ã³ã®æåãŸã§æè»ã«ä»å
¥ã§ãããéåžžã«é«ãæ¡åŒµæ§ãåããŠããŸãããã®æè»œããšåŒ·åããããPythonäŸåé¢ä¿ã®å梱ãã¹ã¿ãã¯èªååå²ãDatadog飿ºãšãã£ãèŠä»¶ããã©ã°ã€ã³ã§æ¬¡ã
ãšå®çŸãã环èšã§12çš®ãã®ãã©ã°ã€ã³ã掻çšããããã«ãªããŸããã æè»œã«æ¡åŒµã§ããåé¢ãæ¬äœã®ããŒãžã§ã³ã¢ãããæ¢ãããŸãŸãã©ã°ã€ã³ã«äŸåãç¶ããããšã§ãè² åµåããé²ã¿ãŸãããå°å
¥ãããã©ã°ã€ã³ã®éçºã忢ããããšã§ãããŒã å
ã§ãã©ãŒã¯ããŠä¿å®ããããåŸãªããã©ã°ã€ã³ãå¢å ããã®ã§ããäŸãã°AWS Batch飿ºãã©ã°ã€ã³ã¯ãã©ãŒã¯ããŠäžå
·åãä¿®æ£ããªããä¿å®ãããã®ä»ã®ãã©ã°ã€ã³ã§ãç¬èªä¿®æ£ãå ãããã©ãŒã¯çã䜿ãç¶ããŸããã ããã«2023幎ãå©çšããŠããäž»èŠãã©ã°ã€ã³ãv1ç³»ãéæšå¥šãšããããšã§ãæ¬äœãåãããªãäºæ
ã«çŽé¢ããŸãããããã奿©ã«ãv2ãã¹ãããããŠv3ãžã®ç§»è¡ã決æããŸããã 2024å¹Žã®æåå察å¿ïŒç§»è¡ã³ã¹ã vs ã©ã€ã»ã³ã¹è²»çš v3ãžã®ç§»è¡ããããã7ãæåŸã®2023幎10æãéçºå
ããäžå®èŠæš¡ãè¶
ããçµç¹ã§ã®v4åçšå©çšãæååããæ¹éã å
¬åŒããã° ã§çºè¡šãããŸãããv3ã®ã»ãã¥ãªãã£ä¿®æ£ãå«ãä¿å®æéã¯2024幎æ«ãŸã§ãšå®ãããã2024幎6æã«ã¯v4.0ããªãªãŒã¹ãããŸããã ç§ãã¡ã¯çŽ1幎匷ã®ç¶äºã®äžã§ãæ¬¡ã®æ¹é決å®ãè¿«ãããŸããã ä»ããŒã«ãžç§»è¡ ã©ã€ã»ã³ã¹å¥çŽããŠç¶ç¶ ããããš 40å以äžã®ã¹ã¿ãã¯ãšLambda500æ¬è¶
ã®ã€ã³ãã©å®çŸ©ãCDKãªã©ã§æžãçŽã ã³ãŒãè³ç£ã¯ãã®ãŸãŸæŽ»ãããããŒãžã§ã³ã¢ããã®ã¿ ã³ã¹ã æ°ãæã®ç§»è¡å·¥æ°ãšå
šAPIã®åæ€èšŒããã®éã®æ©èœéçºã¯åæ» å©çšç¶æ³ã«å¿ããäžå®ã®ã©ã€ã»ã³ã¹è²»çšãçºçãç§»è¡å·¥æ°ã¯ã»ãŒãŒã ãªã¹ã¯ 段éç§»è¡ã«äŒŽããªã°ã¬ãã·ã§ã³ã®æ€ç¥ãé£ãã ãã³ããŒã®äŸ¡æ Œããã©ã³ã®æ¹å®ã«åœ±é¿ããã 倿 èŠéã æ¡çš æ¯èŒæ€èšã®çµæãç§ãã¡ã¯ã©ã€ã»ã³ã¹å¥çŽãçµãã§Serverless Frameworkãç¶ç¶å©çšãã倿ãäžããŸãããããã¯ãServerless Frameworkããã©ã°ã€ã³ã®ãšã³ã·ã¹ãã ã«æ·±ãäŸåããŠããããšã«ããç§»è¡ã³ã¹ãã®èšå€§ããèžãŸãã倿ã§ãã ä»ããŒã«ãžæžãçŽãå Žåãåã«ã€ã³ãã©ãåå®çŸ©ããã ãã§ãªãããã©ã°ã€ã³ãæ
ã£ãŠããç¬èªã®ãããã€åŠçãã¹ã¿ãã¯åå²ãªã©ããŒãããåèšèšã»åå®è£
ããå¿
èŠããããŸããããã«ãç§»è¡äœæ¥ã«äŒŽãæ°ãæã®æ©èœéçºã®åæ»ããå
šAPIã®åæ€èšŒã«äŒŽããªã°ã¬ãã·ã§ã³ãªã¹ã¯ãç¡èŠã§ããŸããããããã®ç§»è¡ã«äŒŽãã³ã¹ãããªã¹ã¯ãèæ
®ãããšãäžå®ã®ã©ã€ã»ã³ã¹è²»çšãæããŠç¶ç¶ããã»ããåççã§ãããšå€æããŸããã ãªãããã®å€æã¯FBZã®æ¢åè³ç£ãšåœæã®æéäœç³»ãåæã«ãããã®ã§ããFBZãšã¯å¥ã®æ°èŠãããã¯ãã§ã¯ãŒãããŒã¹ã§æ§æç®¡çããŒã«ãéžå®ããªãããŸãããå®éã«ãéçºèšèªãšã®çµ±äžããã现ãããªIAMå¶åŸ¡ãå°æ¥æ§ãè©äŸ¡ããŠAWS CDKïŒGoïŒãæ¡çšããŠããŸããããŒã«éžå®ã¯éå»ã®å®çžŸã«ãšããããããããã¯ãã®ç¶æ³ã«åãããŠéœåºŠè¡ãã¹ãæææ±ºå®ã ãšèããŠããŸãã AWS CDKã䜿ã£ãæ°èŠãããã¯ãã®è©³çްã¯ä»¥äžã®èšäºãã芧ãã ããã techblog.zozo.com ãã©ã°ã€ã³ã®æŽçãšãå€éšäŸåããæ±ã蟌ãå€æåºæº v4ã®å©çšç¶ç¶ã決ããåŸãç§ãã¡ã¯é·å¹Žæ±ã蟌ãã§ãããã©ã°ã€ã³ã®æŽçã«çæããŸããã12çš®ã«ã®ãŒã£ãŠãããã©ã°ã€ã³ã¯ãçŸåš6çš®ãŸã§åæžã§ããŠããŸããé·å¹Žãã©ãŒã¯ããŠèªåä¿å®ãç¶ããŠãã2ã€ã®ãã©ã°ã€ã³ããæ¬äœæ©èœã®å
å®ãä»£æ¿ææ®µãžã®ç§»è¡ã«ãã£ãŠåœ¹ç®ãçµããŸããã ãã©ã°ã€ã³ãå°å
¥ããã°ãå¿
èŠãªæ©èœãè¿
éã«å®çŸã§ãã倧ããªã¡ãªããããããŸããäžæ¹ã§ãæ¬äœã®ããŒãžã§ã³ã¢ãããžã®è¿œåŸããã¡ã³ããã³ã¹åæ¢æã«ãã©ãŒã¯ããŠèªåã§ä¿å®ãç¶ç¶ãããšãã£ã責任ã䌎ããŸããå€éšã®ãã©ã°ã€ã³ãæ¡çšããéã¯ãæŽæ°ãæ¢ãŸã£ãå Žåã§ãèªããŒã ã§ä¿å®ãåŒãåããŠäœ¿ãç¶ããèŠæãããããããããããèŠæ®ããŠããéèŠæ§ã宿ããŸããããã®çµéšãçµãŠãæè»œãã ãã§å®æã«è¿œå ãããé·æçãªéçšè² è·ãèæ
®ããŠå³éžããå§¿å¢ãããŒã ã«å®çããŸããã 2. ã©ã³ã¿ã€ã EOLïŒè¿«ãæéãšãæåæ€èšŒãã®éç ãã¬ãŒã ã¯ãŒã¯ãšãã©ã°ã€ã³ã®å€åã¯æŸçœ®ããŠããã·ã¹ãã ã¯åœé¢åãç¶ããŸããå®éãFBZã¯v1ã®ãŸãŸ5幎éåããŠããŸãããããããLambdaã©ã³ã¿ã€ã ã®EOLïŒãµããŒãçµäºã»éæšå¥šåïŒã«ã¯ãã®ç¶äºããããŸãããLambdaã¯éæšå¥šæ¥ã«ã»ãã¥ãªãã£æŽæ°ãšæè¡ãµããŒããçµäºããŸãããã®åŸãååãšããŠ30æ¥åŸãã颿°ã®äœæããããã¯ããã60æ¥åŸããã¯é¢æ°ã®æŽæ°ããããã¯ãããŸãïŒæ®µéçãªå¶éã®è©³çŽ°ã¯ Lambdaã©ã³ã¿ã€ã ã®ããã¥ã¡ã³ã ãåç
§ããŠãã ããïŒã LambdaåŽã®ãµããŒãçµäºææãšãFBZãçµéšããã©ã³ã¿ã€ã ç§»è¡ã®ã¿ã€ã ã©ã€ã³ã¯æ¬¡ã®ãšããã§ãã 1åç®ïŒPython 3.6ãã3.9ãžïŒïŒæåæ€èšŒã«ãã3ãæã®èŠé 2022幎ã«Python 3.6ãã3.9ãžç§»è¡ããŸããã500æ¬ãè¶
ããLambda颿°ãæ±ããç°å¢ã§ã®åããŠã®ã©ã³ã¿ã€ã ç§»è¡ã§ããåœæã¯ãŠããããã¹ãããäžå®ã®ã«ãã¬ããžã確ä¿ããŠæŽåãããŠãããã®ã®ããããã€åŸã®APIã®æåãE2Eã§èªåãã¹ãããç°å¢ã¯ãããŸããã§ãããçµæãšããŠãå®ç°å¢ã§ã®åäœã®å¥å
šæ§ã確ãããææ®µã¯æåæ€èšŒã«é ŒããããåŸãŸããã§ããã ã¹ã¿ãã¯ããšã«äŸåã©ã€ãã©ãªã®äºææ§ç¢ºèªãšAPIã®æåæ€èšŒãéããæ
éã«æ¬çªåæ ãé²ããŸãããæçµçã«å
šã¹ã¿ãã¯ã®ç§»è¡ãå®äºããã®ã¯Lambdaã®éæšå¥šæ¥ã®çŽåã§ãçæããå®äºãŸã§çŽ3ãæãèŠããŸããã ã倿ŽåŸã«å£ããŠããªãããšãã©ã確ããããããšãã確èªã³ã¹ããæå€§ã®ããã«ããã¯ã§ãããèšå€§ãªæäœæ¥ã¯äœæ¥è
ã®å€§ããªè² è·ãšãªããäœæ¥éã®å€ããã人çºçãã¹ã®ãªã¹ã¯ãé«ãŸã£ãŠããŸããããã®ç§»è¡äœæ¥ãéããŠæåæ€èšŒã®éçãçæããããšããçŽåŸã®2022幎8æã«E2Eãã¹ãåºç€ãæŽåãã倧ããªå¥æ©ãšãªããŸããã 2åç®ïŒPython 3.9ãã3.13ãžïŒïŒE2Eãã¹ãã«ããæéççž®ãšäœæ¥è² è·ã®è»œæž 1åç®ã®åçããE2Eãã¹ããæŽåããããšã§ã2025幎ã«è¿ããPython 3.9ãã3.13ãžã®ç§»è¡ã¯å€§ããæ§çžãå€ãããŸãããå€æåºæºãèªåå®è¡ãããE2Eãã¹ãã«å§ããããšãã§ããããšã§ãéçºããŒã ã¯äºææ§ã®èª¿æ»ãã³ãŒãä¿®æ£ãã®ãã®ã«éäžãããã¹ãã®æåã確èªããªããæ©æ¢°çã«äœæ¥ãé²ããããããã«ãªã£ãã®ã§ãã é
ç® 1åç®ïŒ2022å¹ŽïŒ 2åç®ïŒ2025å¹ŽïŒ ç§»è¡å
容 Python 3.6ãã3.9 Python 3.9ãã3.13 ç¢ºèªææ®µ æåæ€èšŒ E2Eãã¹ãã®èªåå®è¡ æé çŽ3ãæïŒ4æçæã7æå®äºïŒ çŽ4é±éïŒ9æçæã10æã«äž»èŠã¹ã¿ãã¯å®äºïŒ äºææ§ã®æŽãåºããã³ãŒãã®ä¿®æ£ãšãã£ãäœæ¥èªäœã¯ã2åç®ã®ç§»è¡äœæ¥ã§ãåæ§ã«ãããŸãããããããä¿®æ£åŸã«æ¢åã®æ©èœãå£ããŠããªãããšã確ãããäœæ¥ããã¹ãã«ä»»ããããããšã§ãäž»èŠã¹ã¿ãã¯ã®ç§»è¡æéã¯çŽ3ãæããçŽ4é±éãžãšå€§å¹
ã«ççž®ãããŸãããæäœæ¥ã«ããé床ãªè² è·ã人çºçãã¹ã®ãªã¹ã¯ãæããå®å
šãã€è¿
éã«ç§»è¡ãå®éã§ããŸããã 3. ã·ã¹ãã èŠæš¡ã®æ¡å€§ïŒã¢ããªã±ãŒã·ã§ã³ã®è¥å€§åãšãããã€æéã®é·æå å€éšç°å¢ã®å€åã«èµ·å ããŠãããããŸã§ã®2ã€ãšã¯ç°ãªãã3ã€ç®ã®å€åã¯ç¶ç¶çãªæ©èœè¿œå ã«ãã£ãŠããããããå
éšèŠå ã«ãã課é¡ã§ãã CloudFormationã®ãªãœãŒã¹äžé æåã«çŽé¢ãã課é¡ã¯ãCloudFormationã§å®ããããŠããåäžã¹ã¿ãã¯ãããã®ãªãœãŒã¹äžéã§ãããServerless Frameworkã¯ãå®çŸ©ãããªãœãŒã¹äžåŒã1ã€ã®CloudFormationã¹ã¿ãã¯ãšããŠç®¡çããŸããLambda颿°ã1æ¬è¿œå ãããšã颿°æ¬äœã ãã§ãªãCloudWatch Logsã®ãã°ã°ã«ãŒããããŒãžã§ã³ãAPI Gatewayã®èšå®ãšãã£ãé¢é£ãªãœãŒã¹ãåæã«çæãããŸããæ¥ã
ã®æ©èœè¿œå ã«äŒŽã£ãŠãªãœãŒã¹ãæ¥å¢ããéçºéå§ãã8ãæç®ã®2018幎2æã«ã¯APIã¹ã¿ãã¯ãåœæã®äžéã§ãã£ã200ãªãœãŒã¹ïŒ çŸåšã®ã¯ã©ãŒã¿ ã¯500ïŒã«æ©ããå°éããŸããã 1æéãè¶
ããçŽåãããã€æé ã¹ã¿ãã¯ãçŽåã§ãããã€ããŠããé ã1åã®ãããã€ã¯1æé以äžããããŸãããæ¥åžžçãªåäœç¢ºèªã ãã§ãªããé害æã®åãæ»ãã«ãåçã®æéãèŠããŠããŸããããããã€æéã¯é害ããã®åŸ©æ§é床ã«ã倧ãã圱é¿ããŸããåãæ»ããé
ããã»ã©é害ã®åœ±é¿ãé·åŒããŠããŸããããå¯çšæ§ã®é¢ã§å€§ããªèª²é¡ãšãªã£ãŠããŸããã å€åã«è¿œåŸãç¶ããããã®ã3ã€ã®ä»çµã¿ã ãããã®å€åã«å
±éããŠç«ã¡ã¯ã ãã£ãã®ã¯ãã倿ŽåŸã«ã·ã¹ãã ãæ£åžžã«åäœããŠããããããã«å¹ççã»ç¢ºå®ã«æ
ä¿ãããïŒç¢ºèªã³ã¹ãïŒããšãè¥å€§åããã¢ããªã±ãŒã·ã§ã³å
šäœã®ãããã€é床ãã§ããã ããããè§£æ¶ããé·æã«ããã£ãŠå®å
šãã€è¿
éã«å€åãžè¿œåŸã§ããããã«æŽåããã®ãã以äžã®3ã€ã®ä»çµã¿ã§ãã 1. å€æåºæºïŒãããã€åŸã®å¥å
šæ§ãæ
ä¿ããE2Eãã¹ã åè¿°ãã1åç®ã®ã©ã³ã¿ã€ã ç§»è¡ã§çæããæåæ€èšŒã®éçãæç Žããããã2022幎8æã«å°å
¥ããã®ãE2Eãã¹ãã§ãããããã€åŸã®ç°å¢ã®APIãå€ããåŒã³åºãã倿ŽåŸãæ¢åã®æåãä¿ãããŠãããèªåã§ç¢ºãããååž°ãã¹ãã§ãã ããã«ããããããã€åŸã®å€æåºæºãæç¢ºã«ãªããŸããããããã€ãã€ãã©ã€ã³ã®æçµå·¥çšã«E2Eãã¹ããçµã¿èŸŒã¿ããã¹ããå
šä»¶æåããå Žåã¯ãã®ãŸãŸãªãªãŒã¹ãé²ããŸãã1ä»¶ã§ã倱æããå Žåã¯åå ã調æ»ãã远å ã®ä¿®æ£ãå¿
èŠã«å¿ããåãæ»ããè¡ããšããéçšã«ãŒã«ã§ãã å€æåºæºãšããŠæ©èœããçç± E2Eãã¹ãã远åŸã®å€æåºæºãšããŠæå¹ã«æ©èœããçç±ã¯ãäž»ã«æ¬¡ã®3ç¹ã«ãããŸãã å
éšå®è£
ã«äŸåããªãæ€èšŒ ïŒãããã€åŸã®ç°å¢ã«å¯ŸããŠå€éšããHTTPãªã¯ãšã¹ããéä¿¡ããã¬ã¹ãã³ã¹ã®æŽåæ§ã®ã¿ãæ€èšŒãããå
éšã®ã©ã³ã¿ã€ã ããã¬ãŒã ã¯ãŒã¯ãæŽæ°ããŠãããã¹ãã·ããªãªèªäœãæžãçŽãå¿
èŠããªãã å®ç°å¢ã§ã®å®è¡ ïŒããŒã«ã«ç°å¢ã®ãã¹ããééããŠãããã«ããããã±ãŒãžã³ã°ããã©ã°ã€ã³ã®æåãšãã£ãå·®åã¯ãããã€ããŠåããŠé¡åšåããããšãå€ããå®ç°å¢ã§ãã¹ããå®è¡ããããšã§ãã€ã³ãã©èšå®ãå«ããã·ã¹ãã å
šäœã®æ£åžžæ§ãå
æ¬çã«æ€èšŒã§ããã æ€èšŒæé ã®çµ±äž ïŒã倿Žãå ããŠãããã€ãããã¹ããå®è¡ããããšããäžé£ã®æé ã¯ãã©ã³ã¿ã€ã æŽæ°ããã¬ãŒã ã¯ãŒã¯ç§»è¡ããã©ã°ã€ã³å€æŽã®ãããã§ãã£ãŠãå
±éãå€åã®çš®é¡ããšã«ç¢ºèªæé ããŒãããæ€èšãçŽãå¿
èŠããªãã Karateã§æžããE2Eãã¹ã E2Eãã¹ãã«ã¯ãAPIãã¹ãèªååãã¬ãŒã ã¯ãŒã¯ã® Karate ãæ¡çšããŠããŸããKarateã¯Gherkinèšæ³ïŒGiven / When / ThenïŒãããŒã¹ã«ãããã¹ããã¬ãŒã ã¯ãŒã¯ã§ããããã°ã©ãã³ã°èšèªã«ããèšè¿°ãäžèŠã§ãèªç¶èšèªã«è¿ãã·ããªãªãã¡ã€ã«åäœã§ãªã¯ãšã¹ãéä¿¡ããJSONæ€èšŒãŸã§ãçŽæçã«èšè¿°ã§ããŸãã FBZ APIã§ã¯ãKarateã®ä»¥äžã®ç¹åŸŽã掻çšããŠE2Eãã¹ããéçšããŠããŸãã çŽæçãªJSONæ€èšŒ ïŒ match æ§æã«ãããã¬ã¹ãã³ã¹ã®å®å
šäžèŽãéšåäžèŽãç°¡æœã«æ€èšŒã§ããã #uuid ã #string ãšãã£ããããã£ãŒã«ãããå®è¡ããšã«å€ãå€ããé
ç®ãåããã¿ãŒã³ã§æè»ã«æ€èšŒã§ããã è€æ°APIãã€ãªãã·ããªãªãã¹ã ïŒçŽåã®APIã¬ã¹ãã³ã¹ããå€ïŒæ³šæIDãªã©ïŒãæœåºããåŸç¶ãªã¯ãšã¹ããžåŒãæž¡ãããšã§ãã«ãŒãäœæããæ³šæå®äºãŸã§ã®äžé£ã®æ¥åãããŒãã€ãªããŠæ€èšŒã§ããã èšå®åãæ¿ãã«ããåå©çšæ§ ïŒããŒã¹URLããã¹ãããŒã¿ãèšå®ãã¡ã€ã«ã§åãæ¿ããããšã§ããŸã£ããåãã·ããªãªãéçºç°å¢ãšæ€èšŒç°å¢ã®åæ¹ã§å®è¡ã§ããã 以äžã¯ã説æçšã«åçŽåããåšåº«ç¢ºä¿APIã®ã·ããªãªã§ãã Feature: åšåº«ç¢ºä¿ API Background: * url baseUrl Scenario: åšåº«ã確ä¿ã§ãã Given path '/v1/stocks/reserve' And request { itemCode: '#(itemCode)', quantity: 2 } When method post Then status 200 And match response == { reservationId: '#uuid', status: 'RESERVED', quantity: 2, expiresAt: '#string' } * def reservationId = response.reservationId reservationId ã¯å®è¡ã®ãã³ã«å€ãããããå€ã®ä»£ããã« #uuid ãšãããããã£ãŒã§æ€èšŒããŠããŸãããŸãã itemCode ã¯ç°å¢ããšã®å€æ°ãšããŠå®çŸ©ããåãã·ããªãªãéçºç°å¢ãšæ€èšŒç°å¢ã§å
±éããŠå©çšããŠããŸããå
éšã®å®è£
èšèªããã¬ãŒã ã¯ãŒã¯ãã©ã®ããã«å
¥ãæ¿ããŠãããã®ã·ããªãªãã¡ã€ã«ã¯1è¡ã倿Žããå¿
èŠããããŸããã ããããå€åãæ¯ããå®å
šç¶²ãšããŠã®å¹æ åè¿°ããPython 3.13ãžã®ç§»è¡ã ãã§ãªãã2024幎12æã«å®æœããServerless Framework v4ãžã®ç§»è¡ã§ãE2Eãã¹ãã¯åšåãçºæ®ããŸããããã¹ãã®å
šééã確èªããªããé²ããããšã§ãå
šã¹ã¿ãã¯ã®ç§»è¡ãããã1ãæã§å®äºãããŠããŸãããã©ã°ã€ã³ã®å»æ¢ãå
¥ãæ¿ãæã«ãããã®ãã¹ãåºç€ãå
±éã®å®å
šç¶²ãšããŠæ©èœããŠããŸãã ããã«ããã®å¹æã¯ãã¬ãŒã ã¯ãŒã¯ãã©ã³ã¿ã€ã ã®ç§»è¡ãšãã£ãå€§èŠæš¡ãªã€ãã³ãã«éããŸãããæ¥åžžã®æ©èœæ¹ä¿®ã仿§å€æŽã«ãããŠãããããã€åŸã«æ¢åAPIãžã®åœ±é¿ãèªåã§æ€èšŒã§ãããããæåã«ããååž°ãã¹ãã®è² æ
ã倧ãã軜æžã§ããŠããŸããå€åã®çš®é¡ãèŠæš¡ãåãããã·ã¹ãã å
šäœã®å¥å
šæ§ããã°ãã確ãããããå®å
šç¶²ãæŽã£ãããšã§ãããŒã å
šäœãå®å¿ããŠãªãªãŒã¹ãéããããããã«ãªããŸããã 2. å¯èŠ³æž¬æ§ãšæ€ç¥ïŒå€æŽåŸã®åœ±é¿ã»äºå
ãæããç£èŠ E2Eãã¹ããããããã€çŽåŸã®å€åŽããã®æ¯ãèãããä¿èšŒããã®ã«å¯Ÿããéçºç°å¢ã§ã®èª¿æ»ããæ¬çªç°å¢ã«ãããå¥å
šæ§ã®æ
ä¿ãŸã§ãæ
ã£ãŠããã®ãå¯èŠ³æž¬æ§ã®ä»çµã¿ã§ãã Datadogã«ãã忣ãã¬ãŒã·ã³ã°ãšã¡ããªã¯ã¹ç£èŠ FBZ APIã§ã¯ãçŸåœ¹ãã©ã°ã€ã³ã®1ã€ã§ãã serverless-plugin-datadog ãéããŠãå
šLambda颿°ã«Datadog Lambda Extensionãå°å
¥ããŠããŸããéçºç°å¢ãšæ¬çªç°å¢ã®åæ¹ã§å©çšããŠããã serverless.yml ã®èšå®ããããã«è¿œå ããã ãã§ã以äžã®å¯èŠ³æž¬æ§ã確ä¿ããŠããŸãã 忣ãã¬ãŒã·ã³ã°ïŒAPMïŒ ïŒAPI GatewayããåŸç¶ã®Lambdaãå€éšãµãŒãã¹åŒã³åºããŸã§ã®ãšã³ãããŒãšã³ãã®ãã¬ãŒã¹ãå¯èŠå ãªã¢ã«ã¿ã€ã ã¡ããªã¯ã¹ ïŒåŒã³åºãåæ°ããšã©ãŒã¬ãŒããå®è¡æéãã¡ã¢ãªäœ¿çšçãã³ãŒã«ãã¹ã¿ãŒãã®çºçé »åºŠãªã©ãåžžæç£èŠ ãã°ã®äžå
管ç ïŒCloudWatch Logsãçµç±ãããã°éçŽãšãã¬ãŒã¹IDãšã®èªåçŽä»ã ã©ã³ã¿ã€ã ããã¬ãŒã ã¯ãŒã¯ã®æŽæ°æãäºåã®ãã¹ãã ãã§ã¯èŠèœãšããã¡ãªã¬ã€ãã³ã·æªåãç¹å®æ¡ä»¶äžã®ãšã©ãŒãçºçããå¯èœæ§ã¯æ®ããŸããéçºç°å¢ã§ã®äºåæ€èšŒããæ¬çªãªãªãŒã¹åŸã®ãã©ãã£ãã¯ç£èŠãŸã§ãDatadogã®ããã·ã¥ããŒããã¢ãã¿ãŒã«ãã£ãŠå³åº§ã«ç°åžžãæ€ç¥ããè¿
éã«å¯ŸåŠã§ããã»ãŒããã£ããããšãªã£ãŠããŸãã DatadogãçšãããµãŒããŒã¬ã¹ç°å¢ã®ç£èŠèšèšãå°å
¥ã®è©³çްã¯ã以äžã®èšäºã§ã玹ä»ããŠããŸãã techblog.zozo.com AWS Health Eventã®Slack飿ºã«ããéèŠæ
å ±ã®æ©ææ€ç¥ ãŸããã©ã³ã¿ã€ã EOLãžã®è¿œåŸãå¿
èŠãªã®ã¯ãèªåãã¡ãæžããPythonã®é¢æ°ã ãã§ã¯ãããŸããããã©ã°ã€ã³ãçæããNode.jsãªã©ã®è£å©çãªLambda颿°ããåæ§ã«ãµããŒãçµäºãè¿ããŸãã ããããã©ã³ã¿ã€ã ã®EOLäºåã¯ãã¡ãããå©çšããŠããAWSãµãŒãã¹ã®èšç»ã¡ã³ããã³ã¹ãé害ãã»ãã¥ãªãã£æŽæ°ãšãã£ãéèŠéç¥ãèŠéããªãä»çµã¿ãæ¬ ãããŸãããããã§ç§ãã¡ã¯ãAWS Health EventãSlackãžé£æºããŠéç¥ãåãåããããã«ããŠããŸãã èœåçã«ç¢ºèªããªããã°èŠèœãšããããäºåéç¥ãSlackãžéçŽããããšã§ãEOLãåºç€ã®å€æŽäºåããã¡æ©ããã£ããã§ããŸããããã«ãããçªçºçãªå¯Ÿå¿ã«è¿œãããããšãªããèšç»çãªã¿ã¹ã¯åãšååãªæ€èšŒæéã®ç¢ºä¿ãå¯èœã«ãªã£ãŠããŸãã 3. åºç€ã®æé©åïŒã¹ã¿ãã¯åå²ãšãããã€ã®äžŠåå ã¢ããªã±ãŒã·ã§ã³ã®è¥å€§åãšãããã€é
å»¶ã«å¯ŸããŠã¯ãã¢ãŒããã¯ãã£ã®åå²ãšãããã€ãã€ãã©ã€ã³ã®é«éåã§å¯ŸåŠããŸããã ã¹ã¿ãã¯åå²ãšå
±æãªãœãŒã¹ã®éçŽ CloudFormationã®ãªãœãŒã¹äžéã«ã¯ã3ã€ã®ã¢ãããŒããçµã¿åãããŸããã ãã¡ã€ã³ãåŠç圢æ
ã«å¿ããåå² ïŒååãæ³šæãšãã£ãããžãã¹ãã¡ã€ã³ã«å ããAPIãããããšãã£ãåŠçã®çš®é¡ããšã«ã¹ã¿ãã¯ãåå² å
±æãªãœãŒã¹ã®éçŽ ïŒå
±éã®DynamoDBããŒãã«ãS3ãã±ãããå
±æLayerïŒäŸåã©ã€ãã©ãªïŒãªã©ãå°çšã¹ã¿ãã¯ãžéçŽããåæ©èœã¹ã¿ãã¯ããåç
§ããåœ¢ã«æŽç nested stackã®æŽ»çš ïŒåäžã¹ã¿ãã¯ã§äžéã«è¿ã¥ãå Žåã¯ããã©ã°ã€ã³ïŒ serverless-plugin-split-stacks ïŒãçšããŠåã¹ã¿ãã¯ãžèªååå² ãããã®çµæãçŸåšã¯40å以äžã®ã¹ã¿ãã¯ã«åå²ããŠå®å®éçšã§ããŠããŸãã ãããã€äžŠååã«ãããªãŒãã¿ã€ã 70ïŒ
åæž 1æé14åããã£ãŠããçŽåãããã€ã«ã¯ããã«ãã®äžŠååãšãããã€ãªãã·ã§ã³ã®èŠçŽãã§å¯ŸåŠããŸããã ãã«ãã®äžŠåå ïŒCodeBuildã®ããããã«ãïŒãã«ãã°ã©ãïŒã§ã¿ã¹ã¯ã®äŸåé¢ä¿ãå®çŸ©ããäŸåã®ãªãã¹ã¿ãã¯ã¯äžŠåã«æŽæ° 倿Žã»ããã®çç¥ ïŒdirect deploymentsã®æå¹åã§ãCloudFormationã®å€æŽã»ããäœæãçç¥ããŠçŽæ¥åæ ããã±ãŒãžåŠçã®åæž ïŒæéã®ããã£ãŠããdevDependenciesã®é€å€åŠçã®ã¹ãããã§ãããã±ãŒãžäœæã«ãããæéãççž® ãã®çµæã1æé14åããã£ãŠããçŽåãããã€ã24åã«ãªããçŽ70ïŒ
ã®æéãççž®ã§ããŸããã詳现ã¯ä»¥äžã®èšäºã«ãŸãšããŠããŸãã techblog.zozo.com ãŸãšã æ¬èšäºã§ã¯ãéçºãã9幎ãçµéããFBZ APIãäŸã«ããµãŒããŒã¬ã¹åºç€ã®åšèŸºã§èµ·ããå€åãžã®è¿œåŸã玹ä»ããŸããã å€åãéããŠåŸãæèšã¯å€§ãã3ã€ãããŸãã 1ã€ç®ã¯ã æ§æç®¡çããŒã«ããã©ã°ã€ã³ã®éžå®ã§ã¯ãèªåä¿å®ãç§»è¡ã®ãããããèŠæ¥µããããš ã§ããã©ã€ã»ã³ã¹å€æŽãã¡ã³ããã³ã¹åæ¢ã¯ãã€ã§ãèµ·ããåŸãŸããã䟿å©ã ããããšå®æã«å°å
¥ãããèªåã§ã®ä¿å®æ§ãç§»è¡ã®ãããããèŠæ¥µããããã§æ¡çšã倿ããããšã倧åã ãšå®æããŸããã 2ã€ç®ã¯ã ãããŒãžããµãŒãã¹ã§ãã£ãŠãã©ã³ã¿ã€ã ã®EOLã«åããååž°ãã¹ããèªååããŠããããš ã§ãããããŒãžããµãŒãã¹ã§ãã£ãŠãEOLã¯é¿ãããããæå確èªã«ããæ¶èã¯å€§ããªè² æ
ã§ããååž°ãã¹ããèªååãããã€ã§ãå®å
šãã€è¿
éã«æ€èšŒã§ããä»çµã¿ãæŽããŠããããšãæ¬ ãããŸããã 3ã€ç®ã¯ã ã·ã¹ãã èŠæš¡ã®æ¡å€§ãèŠè¶ããŠãã¹ã¿ãã¯åå²ããã«ã䞊ååã«ãããããã€ã®ä¿ææ§ãç¶æããããš ã§ããæ©èœè¿œå ã«äŒŽã£ãŠãããã€ãéããªããšãæ¥ã
ã®éçºã ãã§ãªãé害ããã®åŸ©æ§é床ãäœäžããŸããã¹ã¿ãã¯åå²ããã«ã䞊ååã§å
æãæã¡ããããã€ã®ä¿ææ§ãç¶æããŠããããšãéèŠã§ãã å人çã«ã¯ããããŸã§ã®éçºãéçšã®äžã§ç¹ã«èŠåŽããããšã®1ã€ããããããåšèŸºç°å¢ã®å€åãžã®è¿œåŸã§ããããããããµãŒããŒã¬ã¹æ¬æ¥ã®ã€ã³ãã©ç®¡çã®å°ãªããæŽ»ãããE2Eãã¹ããå¯èŠ³æž¬æ§ãšãã£ãã远åŸã®ããã®ä»çµã¿ããžãªãœãŒã¹ãæè³ã§ããããšããé·æéçšãæ¯ãã倧ããªåã«ãªããŸãããæè¡ãã¬ã³ããããŒã«ã®æäŸæ¡ä»¶ã¯åžžã«å€ããç¶ããŸãããããŸã§ã®æ§æãåæãšãããããç¶æ³ã«åãããŠæè»ã«æ§æãä»çµã¿ãèŠçŽãç¶ããããšã倧åã ãšæããŠããŸãã ZOZOã§ã¯ãäžç·ã«ãµãŒãã¹ãäœãäžããŠãããæ¹ãåéäžã§ãããèå³ã®ããæ¹ã¯ã以äžã®ãªã³ã¯ãããã²ãå¿åãã ããã corp.zozo.com Serverlesså
¬åŒããã°ã®ã Releasing Serverless Framework V.1 & Fundraising ãïŒ2016幎10æïŒãšã The Serverless Framework wins Best Microservices API at the API Awards! ãïŒ2018幎9æïŒã«èšèŒã®ã¹ã¿ãŒæ°ã§ãã ↩


















