lifecycle-crud について
テンプレート、ネットワークボリューム、認証情報、シークレット、SSH 公開鍵、マルチノードクラスターなど、Runpod の再利用可能なリソースを管理するスキルです。変更前に既存リソースを読み、作成や更新後に再確認し、依頼に応じたクリーンアップと費用説明を行います。
主な機能
- 01再利用可能な各種リソースの管理
- 02変更前の既存リソース確認
- 03作成・更新後の再読み取り確認
- 04依頼された削除と結果確認
- 05課金対象の作成前に費用を説明
活用シーン
- 01ネットワークボリュームの作成と確認
- 02テンプレートとアカウントシークレットの管理
- 03SSH 公開鍵の登録
- 04マルチノードクラスターの設定や整理
MCP 対応
Runpod MCP ツールでリソースを読み取り、作成、更新、削除し、書き込み後に再読み取りで確認します。操作はユーザーの許可範囲に限られます。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ runpod/ runpod-plugins-official --skill lifecycle-crudインストール後、Claude Code で/lifecycle-crudを入力して読み込まれたか確認します。
詳細
ライフサイクル CRUD
テンプレート、ネットワークボリューム、コンテナレジストリの認証情報、アカウントシークレット、登録済みの SSH 公開鍵、マルチノードクラスターなど、Runpod の再利用可能なリソースのライフサイクルを管理します。目標は、ユーザーが安心して利用できるよう、適切にプロビジョニングされたリソースを提供することです。問題なくプロビジョニングし、リソースを読み取って状態を確認したうえで、そのまま維持します。ユーザーが作成後に削除するデモを求めた場合、または明示的にクリーンアップを求めた場合にのみ削除します。既存のリソースを先に読み取り、ユーザーがすでに持っているものと衝突したり、上書きしたりしないようにします。
必要な機能
機能名を記載しています。このサーバーで各機能を提供するツールは、以下のツールバインディングに記載されています。
- テンプレートの一覧表示/確認/作成/更新/削除。
- ネットワークボリュームの一覧表示/確認/作成/更新/削除。
- コンテナレジストリの認証情報の一覧表示/確認/作成/削除。
- アカウントシークレットの一覧表示/確認/作成/更新/削除。
- アカウントに登録されている SSH 公開鍵の読み取りと置き換え。
- マルチノードクラスターの一覧表示/確認/作成/名前変更/削除、およびクラスターのメンバーポッドの一覧表示。
- データセンターと、GPU が同じ場所にある DC にボリュームを配置するための、GPU ごとの利用可能状況の読み取り。
共通のルール(すべてのリソース)
- まず読み取ります。 作成前に既存のリソースを一覧表示し、使用する名前がすでに使われていないことを確認します。
- この会話で作成したリソース、またはユーザーが指定したリソース以外には手を加えません。 この会話で作成していないリソースは、ユーザーが ID または曖昧さのない名前で指定し、まさにその変更を求めた場合を除き、削除も更新もしません。ユーザーが指定したリソースを削除するのは、ユーザーがその削除を求めた場合に限ります。使い捨てに見える名前や、一覧表示で見つけたリソースは、対象を特定したことにはなりません(ルーターの mutations-bind ルール)。
- 読み取り直して確認します。 作成または更新後、リソースを確認し、設定したフィールドが指定どおりに反映されていることを確かめます。書き込み呼び出しの応答そのものは読み取りではないため、新たに読み取って確認します(更新は PATCH です。送信したフィールドのみが変更され、省略したフィールドはそのまま残るため、ユーザーが許可したフィールドだけを送信します)。
- ユーザーがクリーンアップを求めた場合、または作成後に削除する往復の操作として依頼した場合は、依存関係の順に、操作で作成したリソースを削除します(ポッドが使用中のレジストリ認証情報は削除できませんが、それを参照するテンプレートはチェックされず、認証情報が黙って失われます)。各削除の後に読み取り直し、リソースが存在しないことを確認します。それ以外の場合はリソースを維持し、何が存在し、何に料金がかかるかを伝えます。
- 課金対象のリソースを作成する前に、費用を伝えます。 ネットワークボリュームは、存在する間は GB 月あたりのストレージ料金が発生します。サイズと、削除するまで料金が発生することを作成前に伝えます。クラスターは GPU コンピューティングリソースです。作成時から
podCount×gpuCountPerPod台の GPU を使用するため、作成前に合計時間単価(カタログの読み取りで得た GPU 1 台あたりの価格 × GPU 台数)を伝えます。
操作例
- 再利用可能なテンプレートの CRUD。 テンプレートを一覧表示し、ユーザーが指定した名前、イメージ/ディスク/ポート/環境変数でテンプレートを作成して、読み戻して確認します。作成後にクリーンアップする一連の操作を求められた場合は、削除して削除済みであることを確認します。Pod から参照されているテンプレート、またはエンドポイントに紐付けられているテンプレートは削除を拒否します。そのことを伝え、無理に削除しないでください。
- ネットワークボリュームのライフサイクル。 ボリュームを一覧表示し、ユーザー(またはワークロード)が必要とするデータセンターのうち、ネットワークストレージを提供するデータセンター(データセンターの読み取り結果で
networkVolumeTypesが空でない)に、指定されたサイズ(10〜4096 GB)のボリュームを作成します。ストレージ費用を伝えます。読み戻して確認し、本来の用途に使える状態にしておきます。削除されるまで課金されるため、そのことを伝えます。明示的にクリーンアップを求められた場合にのみ削除して確認します。ボリュームのサイズは増やすことしかできず、縮小は拒否されます。 - ボリュームを利用したモデルファイル。 大きなモデルファイルは、それを使用する GPU と同じ場所にあるネットワークボリュームに保存します。GPU ごとの在庫状況を含めてデータセンターを読み取り(
include:["GPU_AVAILABILITY"])、そこで実行する製品で対象の GPU の在庫があるデータセンターを選んで、そこにボリュームを作成します。接続方法を説明します。Pod/ワーカーにマウントパスを指定し、重みを一度だけダウンロードして再利用します。また、コールドスタートの影響(最初のジョブではダウンロードが発生し、以降のジョブではキャッシュ済みの重みをマウントする)も説明します。推測せず、適切な場所に配置します。ボリュームはコンピュートと同じデータセンターに置く必要があります。そうしないとマウントできず、ネットワークボリュームを接続できるのは Secure Cloud のコンピュートのみです。Pod ではmountsに設定したパスがマウントパスで(デフォルトはありません)、Serverless ワーカーでは常に/runpod-volumeにボリュームが見えます。そのため、Pod で配置した重みは、Pod のパスではなく/runpod-volumeからエンドポイントハンドラーが読み取ります。 - クリーンアップの依頼。 この会話で何も作成していない(または作成したリソースがすでに存在しない)状態でリソースのクリーンアップを求められた場合は、読み取りのみを行ったことを正直に伝えます。アカウントを一覧表示し、この会話で作成したリソースは残っていないと伝え、未使用と思われるリソース(ID、名前、読み取り結果から分かる根拠)を一覧表示して、ユーザーが判断できるようにします。名前から推測して削除してはいけません。その報告だけで回答は完結です。
- プライベートレジストリの認証情報とプル失敗の診断。 プライベートイメージ用のレジストリ認証情報を作成します。認証情報は書き込み専用です。読み戻してもユーザー名/パスワードは返されません。また、送信した値を会話の記録やログに決して出してはいけません。イメージのプルに失敗した場合は、異なる2つの原因を診断します。認証失敗(認証情報が誤っている/期限切れ、または認証情報が紐付けられていない。対処方法は有効なレジストリ認証情報を使うこと)と、Docker Hub の匿名アクセスのレート制限(公開イメージを未認証でプルしたため、プル回数の上限に達している。公開イメージをプルする場合でも認証することが対処方法)です。エラー文からどちらかを特定し、混同しないでください。
- 認証情報が不足している場合。 レジストリ認証情報を使うにはユーザー本人の値が必要です。値が提供されていない場合は、ユーザー本人だけがその情報を提供できるため、尋ねてください。使用する認証情報の値を捏造してはいけません。また、値が提供された後も決して復唱しないでください。
- アカウントシークレットの CRUD。 まずシークレットを一覧表示します。
nameはアカウント内で一意かつ変更不可なので、名前が重複する作成は409で拒否されます。ユーザー本人の値(ユーザー本人だけが提供できます。決して捏造しないでください)で作成し、読み戻してメタデータを確認します。さらに、どのように使用するかを伝えます。テンプレート、Pod、またはエンドポイントに環境変数として{{ RUNPOD_SECRET_<name> }}を設定すると、Pod またはワーカーの起動時に Runpod が保存済みの値に置き換えます。値自体は書き込み専用で、読み取りで返されることはなく、会話の記録にも決して出してはいけません。ユーザーがまだ値を提供していない場合は、まず計画全体(使用するシークレット名、エンドポイントまたはテンプレートで{{ RUNPOD_SECRET_<name> }}として読み取ること、値はユーザーに表示されないこと)を説明してから、値を尋ねます。ローテーションにはupdate-secretを使います。新しい値が Pod とワーカーに反映されるのは次回の起動時なので、実行中のインスタンスは起動時に読み込んだ値を保持することを伝えます。使用中でもシークレットの削除はブロックされません。参照先ではシークレットを解決できなくなり、次に起動した Pod またはワーカーでシークレットが必要な場合は起動に失敗するため、削除前に参照先を確認するようユーザーに伝えます。 - アカウントの SSH キー。
update-ssh-keysは追加ではなく、全置換を行う PUT です。まず現在のキーを読み取り、新しいキーとともにすべて送信し、読み取りで確認します。新しいキーだけを送信すると、アカウント上の他のキーがすべて通知なしに削除され、[]を送るとすべてのキーが削除されます。キーが適用されるのはstartSshを指定して後から作成した Pod です。実行中の Pod には反映されません。 - マルチノードクラスターのライフサイクル。 クラスターは単なる接続機構ではなく、課金対象のコンピュートです。存在する間は、GPU ごとにカタログ価格で、クラスター内のすべての GPU に課金されます。まず、アカウントのクラスター、GPU の在庫(クラスターの在庫は Pod の在庫と異なるため、
product:["CLUSTER"]を指定してinclude:["AVAILABILITY"]を使います)、価格を読み取ります。その後、正確な構成(ノード数、ノードあたりの GPU 数、データセンター)と合計時間単価(選択した種類の GPU 数をpodCount×gpuCountPerPodで算出し、カタログ価格に基づいて計算)をユーザーに提示し、実行の許可を求めます。この会話で明示的に許可された場合にのみcreate-clusterを実行できます。クラスターの作成またはプロビジョニングを求めることは、その計画を提示する依頼であり、実行の許可ではありません。読み取り結果でその GPU の在庫がない場合は、その旨を伝え、読み取り結果で在庫がある最も近い構成を提案します。クラスターの種類、GPU の種類、Pod あたりの GPU 数は作成時に固定され、update-clusterで変更できるのは名前だけです。Pod の追加や削除はこれらのツールではなく、コンソール(Scale cluster)から行います。そのため、最初に構成を正しく決め、サイズ変更はコンソールで行うよう案内します。クラスターの Pod は GPU Pod の価格より高い料金になることがあるため、作成後にlist-cluster-billingで実際の料金を確認します。templateIdを指定すると、すべてのメンバー Pod が Pod テンプレートからプロビジョニングされます。これはプライベートイメージを使う唯一の方法です(createのボディでregistryのみを指定すると拒否されます)。get-clusterでクラスターを読み戻して Pod 全体の概要を確認し、list-cluster-podsで各メンバー Pod を確認します。支出の確認にはlist-cluster-billingを使います。
厳守事項
- この一連の操作で作成したもの以外のリソースには触れないでください。ただし、ユーザーが依頼した変更の対象として指定したリソースは除きます。
- レジストリの認証情報(ユーザー名/パスワード/トークン)やシークレットの値を、チャット、ログ、コミットするファイルに出力しないでください。これらは設計上、書き込み専用です。その状態を維持してください。
- SSH キーを置き換える前に、登録済みの SSH キーを読み取ってください。
update-ssh-keysはキーセット全体を上書きします。既存のキーを含めずに送信すると、そのキーは削除されます。 - すべての作成/更新はリソースを読み戻して確認し、すべての削除は読み戻してリソースが存在しないことを確認してください。
- ネットワークボリュームを作成する前にストレージ料金を、クラスターを作成する前に合計の時間単価を伝えてください。クラスターの場合は、ユーザーからの明示的な許可も待ってください。
- リソースが使用中のため削除が拒否された場合、それは正しい API 応答です。その旨を伝えて停止してください。強制的にデタッチしたり、ユーザーが指定していない依存リソースを削除したりしないでください。
エラー処理
- 削除の応答が本文なしの
204の場合、成功です。後続の読み取りで確認してください。 - ボリュームまたはレジストリ認証情報の削除が使用中エラーで拒否された場合、Pod がまだ使用中です。ブロックしている対象の名前を伝え、連鎖削除はしないでください。テンプレートの参照は認証情報の削除を妨げません。テンプレート側がクリアされるため、使用中の認証情報を削除する前にテンプレートを確認してください。
- レジストリの読み取り結果に
username/passwordが含まれないのは想定どおりです(書き込み専用)。不具合ではありません。 - シークレットの読み取り結果に値が含まれないのは想定どおりです(書き込み専用)。不具合ではありません。作成が
409で拒否された場合、その名前はすでに使われています。名前は変更できないため、別の名前を選ぶか、update-secretで既存のシークレットをローテーションしてください。 - 値と説明の両方を指定した
update-secretはアトミックではありません。値のローテーション後に説明の書き込みが失敗すると、新しい値がすでに有効な状態でエラー応答が返ります。このような部分的な結果が問題になる場合は、2 つに分けて呼び出してください。 - クラスターの更新でコンピュート、タイプ、コンテナー設定を変更しようとすると拒否されます。このエンドポイントで変更できるのは名前だけです。その旨を伝え、Pod 数の変更にはコンソールの Scale cluster を案内し、それ以外は価格を再度伝えたうえで削除して再作成する方法を提示してください。
ツールの対応関係
| 機能 | ツール |
|---|---|
| テンプレート(一覧/取得/作成/更新/削除) | list-templates、get-template、create-template、update-template、delete-template |
| ネットワークボリューム(一覧/取得/作成/更新/削除) | list-network-volumes、get-network-volume、create-network-volume、update-network-volume、delete-network-volume |
| レジストリ認証情報(一覧/取得/作成/削除) | list-registries、get-registry、create-registry、delete-registry |
| データセンターごとの GPU 利用状況(配置用) | list-data-centers / get-data-center(include:["GPU_AVAILABILITY"]);list-gpu-types(product と include:["AVAILABILITY"]) |
| GPU タイプごとの、容量情報を含む CUDA バージョン | GPU の読み取り結果の cudaVersions;マトリクス表示には get-capacity |
| アカウントのシークレット(一覧/取得/作成/更新/削除) | list-secrets、get-secret、create-secret、update-secret、delete-secret |
| 登録済み SSH 公開キー(読み取り/置き換え) | get-ssh-keys、update-ssh-keys |
| クラスター(一覧/取得/作成/名前変更/削除、メンバー Pod、請求情報) | list-clusters、get-cluster、create-cluster、update-cluster、delete-cluster、list-cluster-pods、list-cluster-billing |
ここに記載されたツールがセッションのツール一覧にない場合は、その旨を伝え、結果を捏造せず、代わりに最も近い読み取りツールを使用してください。
報告テンプレート — リソース一覧
アカウントに何があるか(インベントリ、監査、「稼働中のもの」)を尋ねられた場合は、Pod、エンドポイント、テンプレート、ネットワークボリュームを一覧表示してください。空でない種類ごとに表を作成し(読み取り結果に含まれる場合は、名前、ID、状態、GPU/サイズ、時間単価)、空の種類は「templates: none」のように1行で示すとよいでしょう。最後に、種類ごとの件数と、稼働中の Pod の時間単価の合計を記載してください。ユーザーが懸念(コスト、停止したリソースなど)を示している場合は、最後に一文で判断を示してください。
契約
複数のジャーニーに共通する回答契約(読み取り結果に基づく確定した事実、曖昧な表現を避けてコミットすること、変更はこの会話で作成したものに限定すること、最終メッセージは単独で提示すること、失敗を正直に伝えること、許可されたツールのみを使うこと)は、runpod-mcp スキルで定義されており、このジャーニーからのすべての返信に適用されます。この会話でrunpod-mcpスキルをまだ読み込んでいない場合は、次のツール呼び出しの前に読み込んでください。変更してよいリソース、依頼を実行に移すタイミング、ユーザーの指示を待って停止するタイミングに関するルールは、ここでは繰り返しません。