【Pulumi】【トラブル】Pulumi に関するトラブル2

■ はじめに

https://dk521123.hatenablog.com/entry/2022/09/27/165923

と同じようなエラーが発生したのだが、若干対応方法が変わったのと
その後に別エラーメッセージが発生して、対応がかなり大変だったので
記事としてまとめておく。

# これで、多少はPulumiに関するトラブルシュートに強くなったかなっと思う

目次

【1】pulumi stack selectをした際にエラー「snapshot integrity failure」が発生
 1)エラー内容
 2)原因
 3)解決案
【2】pulumi upした際にエラー「IdempotentParameterMismatchException」が発生
 1)エラー内容
 2)原因
 3)解決案

【1】pulumi stack selectをした際にエラー「snapshot integrity failure」が発生

以下「コマンド例」のように
Pulumi loginした後に、pulumi stack selectをした際に
後述「1)エラー内容」の「[1] pulumi stack select時のエラー」
が発生した。

https://dk521123.hatenablog.com/entry/2022/09/27/165923

と似てるエラー(微妙に違うが)だから、pulumi state deleteしたら、
別エラー「[2] pulumi state delete時のエラー」が発生した。

コマンド例

# Pulumi loginする(ここまでOK)
pulumi login s3://your-s3-bucket/pulumi/state/your-project

# pulumi stack select時でエラー「snapshot integrity failure」が発生
pulumi stack select your-stack

1)エラー内容

[1] pulumi stack select時のエラー

error: .pulumi/stacks/your-stack.json snapshot integrity failure;
refusing to use it: resource urn:pulumi:xxxxxxxxx
dependency urn:pulumi:yyyyyyy/zzzz.whl refers to missing resource

[2] pulumi state delete時のエラー

$ pulumi state delete 'urn:pulumi:xxxxxxxxx' --disable-integrity-checking

Please choose a stack, or create a new one: your-stack (対象Stackを選択)
warning: This command will edit your stack‘s state directly. y (「y」を入力)
<ここからが実際のエラー内容>
error: This resource can't be safely deleted
 because the following resources depend on it: 
 * "resource-name1": (urn:pulumi:zzzzzzzzzzzzzzzz1) << URNも表示
 * "resource-name2": (urn:pulumi:zzzzzzzzzzzzzzzz2)
 * "resource-name3": (urn:pulumi:zzzzzzzzzzzzzzzz3)

Delete those resources first before deleting this one.

2)原因

[2] pulumi state delete時のエラー

pulumi state deleteで削除しようとしている対象リソースの
子リソースがある(今回の場合、"resource-name1~3"の3つ)ため
エラーになっている

3)解決案

[1] 地道にエラーの出ている子リソースから消していく
 => pulumi state delete 'urn:pulumi:zzzzzzzzzzzzzzzz1' --disable-integrity-checking
 => 子リソースに孫リソースがいたら、ひたすら消しまくる
 => かなり大変だった、、、
[2] 再度、pulumi stack select を実行(エラーがでたら[1]を繰り返す)
[3] pulumi refresh で、ステートと実リソースの差分を同期する

コマンド例

# [1] 地道にエラーの出ている子リソースから消していく
$ pulumi state delete 'urn:pulumi:zzzzzzzzzzzzzzzz1' --disable-integrity-checking
warning: This command will edit your stack‘s state directly. y (「y」を入力)
Resource deleted (<=削除成功)
# 孫リソースがいたら、同じエラーメッセージが表示されるので確認し、消しまくる

# 他の子リソースも消す
$ pulumi state delete 'urn:pulumi:zzzzzzzzzzzzzzzz2' --disable-integrity-checking
$ pulumi state delete 'urn:pulumi:zzzzzzzzzzzzzzzz3' --disable-integrity-checking

# 再度に親リソースを消す
$ pulumi state delete 'urn:pulumi:xxxxxxxxx' --disable-integrity-checking

# [2] 再度、pulumi stack select を実行
$ pulumi stack select your-stack
# エラーがでたら[1]を繰り返す
# ちなみに今回の場合、別リソースが紐づいていてエラーが発生した

# [3] リフレッシュ(ステートと実リソースの差分を同期する)
#  => これをやらないとpulumi up時にエラーになる可能性がある
$ pulumi refresh

【2】pulumi upした際にエラー「IdempotentParameterMismatchException」が発生

「【1】pulumi stack selectをした際にエラー「snapshot integrity failure」が発生」
の対応後に、pulumi up したら、別エラー(「1)エラー内容」を参照)が発生した

1)エラー内容

error creating Glue Trigger (test-trigger):  IdempotentParameterMismatchException:
Trigger with name 'test-trigger' already submitted with different configuration

* Idempotent(アイデムポテント) : 冪等性(べきとうせい)

2)原因

* 実環境に対象リソース(今回の場合「test-trigger」)が
 既に出来上がっているため

3)解決案

* 手動で対象リソースを削除し、
 (今回の場合、GlueページからGUI操作で「test-trigger」を削除した)
 再度、pulumi upを実行

関連記事

Pulumi ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2021/10/23/025230
Pulumi ~ 基本編 / CLI
https://dk521123.hatenablog.com/entry/2021/10/25/215508
pulumiで対象リソースのみデプロイ / 削除(--target)
https://dk521123.hatenablog.com/entry/2022/06/28/000000
pulumiで 新規作成リソースのみデプロイ
https://dk521123.hatenablog.com/entry/2022/08/04/124321
Pulumi に関するトラブル
https://dk521123.hatenablog.com/entry/2022/01/11/105319
pulumi up 時のトラブル
https://dk521123.hatenablog.com/entry/2022/04/05/150240
pulumi up --target をした際にエラー「snapshot integrity failure」が発生
https://dk521123.hatenablog.com/entry/2022/09/27/165923