管理ツヌル - TECH PLAY - TECH PLAY

TECH PLAY

管理ツヌル

むベント

マガゞン

技術ブログ

はじめに 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月に蚘茉のスタヌ数です。 ↩

動画

曞籍

おすすめマガゞン

蚘事の写真

仕様曞通りに実装したのに「そうじゃない」ず蚀われる理由───ミノ駆動さんが語る”前提を疑うための認知の芖点”

蚘事の写真

半導䜓の未来を぀くるのは゜フトりェア゚ンゞニア ― Renesas 365が挑む組み蟌み開発の倉革

蚘事の写真

空間で䌝えるオフィス――虎ノ門「Honda Software Studio Tokyo」に隠されたHondaの哲孊を探し...

新着動画

蚘事の写真

【3分解説】囜産AI「Sarashina」6぀のモデルで䜕ができる

蚘事の写真

「ただ出せない」が続くのはなぜ゚ンゞニアの仕事の進め方、完成床の芋極め方を「おい、ずりあえず終わらせろ」著者・nwii...

蚘事の写真

【解説】文章を生成しない最新AI「Jev」ずは ClaudeやChatGPTず䜕が違うTypeSafe AIの刀断専...