pulumi-debug-failed-operation について
失敗した Pulumi の更新やプレビューを診断し、修正するスキルです。Pulumi の利用者が対象操作を特定して記録済みの診断を調べ、原因をコード、状態、環境に分類して対処できます。
主な機能
- 01対象操作とスタックの確認
- 02更新またはプレビュー診断の取得
- 03エラーとリソース、原因の追跡
- 04コード・状態・環境に基づく修正分類
- 05根本原因への最小限の変更
活用シーン
- 01失敗した Pulumi 更新の調査
- 02エンジンイベントによる失敗プレビューの診断
- 03リソースコードの誤りと状態ドリフトの切り分け
- 04認証情報、権限、クォータの問題の特定
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ pulumi/ agent-skills --skill pulumi-debug-failed-operationインストール後、Claude Code で/pulumi-debug-failed-operationを入力して読み込まれたか確認します。
同梱ファイルagents/openai.yamluse_cases.yaml
詳細
失敗した Pulumi 操作をデバッグする
Pulumi 操作が失敗しました。原因を特定して修正してください。通常、ユーザーが対象を指定してくれるので、まずデバッグする操作を確認し、ほかのことをする前にユーザーに確認してください。Pulumi は操作の失敗時にエラーを記録しているため、対象の操作が分かったら、その記録からエラーを読み取ることができ、再度実行する必要はありません。
以下のコマンドは、シェルで実行する Pulumi CLI のサブコマンドである pulumi api を使用して Pulumi Cloud にアクセスします。各コマンドは、指定した {orgName}/{projectName}/{stackName} のパスでスタックを対象にするため、記録を読む際に、そのスタックをローカルで選択しておく必要はありません。修正を適用するときには、スタックの選択が必要になります。
ユーザーが指定した操作から始める
通常、ユーザーは組織、プロジェクト、スタック、更新バージョン(またはプレビュー ID)などのフィールドを操作の情報として提示します。多くの場合、「vvm-dev の update 161 をデバッグして」のように文章で指定されます。API にアクセスするには、{orgName}、{projectName}、{stackName}、およびバージョンまたはプレビュー ID が必要です。
不足しているフィールドは、状況から補います。組織、プロジェクト、スタックは、現在選択されているスタック(pulumi stack --show-name、pulumi stack ls)または Pulumi.yaml から取得します。バージョンが指定されていない場合は、そのスタックの最新の更新を対象にします。
先に進む前に、対象となった操作のバージョンまたはプレビュー ID とスタックを簡潔に確認してください。ユーザーはすでに情報を伝えているので、確認は簡単で構いません。
失敗した内容を読む
失敗した更新と失敗したプレビューのどちらもエンジンイベントを記録しており、エラーはそのイベント内の診断メッセージに含まれています。上で確定したフィールドを使ってイベントを取得し、メッセージを取り出します。
失敗した更新の場合は、バージョン番号を指定して update パスを使用します。
pulumi api /api/stacks/{orgName}/{projectName}/{stackName}/update/<version>/events \
| jq -r '.events[].diagnosticEvent | select(. != null) | "[\(.severity)] \(.message)"' \
| sed 's/<{%reset%}>//g'
失敗したプレビューの場合は、プレビュー ID を指定して preview パスを使用します。
pulumi api /api/stacks/{orgName}/{projectName}/{stackName}/preview/<preview-id>/events \
| jq -r '.events[].diagnosticEvent | select(. != null) | "[\(.severity)] \(.message)"' \
| sed 's/<{%reset%}>//g'
severity == "error" が付いたものだけでなく、すべてのメッセージを読んでください。プロバイダーエラーにはこの error タグが付いていますが、プレビュー失敗の一般的な原因であるプログラムエラーは、info#err が付いた stderr 診断として出力されます。末尾の sed は、Pulumi がテキストに埋め込むターミナルのカラーコードを取り除きます。取り除かない場合、カラーコードは <{%reset%}> のように表示されます。
原因と修正箇所を特定する
1 つの操作で複数のリソースからエラーが発生することがあるため、まずすべての診断情報を読み、その後、各エラーに順に対処してください。各エラーを、エラーを発生させたリソース(その URN と型)、プログラム内でそのリソースが宣言されている箇所、そしてそのリソースに渡される入力までたどります。
エラーテキストから問題の種類が分かり、修正箇所を特定できます。Pulumi での修正箇所は次の 3 つのいずれかです。正しい箇所を特定すれば、問題ではなかったコードを編集せずに済みます。
- プログラム。 コードに誤りがあります。参照先の誤り、型の誤り、プロバイダーに拒否された入力、または値が確定する前に使用されたケースなどです。通常、プレビューが失敗した場合はこれが報告されます。プランを構築できなかったためです。コードを編集して修正してください。
- 状態。 コードは正しいものの、保存された状態と実際のクラウドリソースに食い違いがあります。
pulumi refreshでドリフトを調整し、状態の管理対象外で既に存在するリソースは、再作成するのではなくpulumi importで管理対象にします。適用の途中で失敗した操作によって、一部のリソースが既に変更されている場合があるため、判断する前に現在の状態を確認してください。 - 環境。 問題は Pulumi の外部にあります。認証情報、権限、OIDC、またはクォータが原因です。リソースのコードではなく、ロール、ESC 環境、またはプロバイダーに拒否された容量を修正してください。
診断情報が空か、対処するには不十分な場合、実際のエラーは通常、その記録ではなく、リソースがシェルから呼び出したもののログにあります。そちらを確認してください。アクセスに必要なもの(トークン、実行、見つからないリソースなど)が手元にない場合は作業を止め、何が障害になっているかと、ユーザーから必要なものを 1 つ伝えてください。
原因を修正する
根本原因に対処する、最小限の変更を行ってください。修正の確認方法と、ローカルでの編集またはプルリクエストのどちらで変更を届けるかは、このスキルではなく、現在のモードのワークフローに従ってください。
ユーザーが操作を指定していない場合
ユーザーから手がかりがない場合は、スタックで最後に実行された操作をデバッグします。更新一覧には各更新を実行したユーザーが記録されていないため、API で確認してください。
pulumi whoamiを実行して、現在のユーザーのログイン名を取得します。- 次のコマンドで最新の更新とその実行を要求したユーザーを確認し、
requestedBy.githubLoginを手順 1 で取得したログイン名と比較します。
pulumi api /api/stacks/{orgName}/{projectName}/{stackName}/updates/latest - 一致した場合は、その更新をデバッグします。一致しない場合は、次のコマンドでバージョンを 1 つずつさかのぼり、
requestedBy.githubLoginがユーザーと一致するまで確認します。
pulumi api /api/stacks/{orgName}/{projectName}/{stackName}/updates/<n>
対象となった操作、そのバージョン、種類、結果をユーザーに伝え、先へ進む前にその操作で間違いないか確認してください。