この記事は、Pulumi dotnet Advent Calendar 2019 の15日目です。
Pulumi の State から特定のリソースだけ管理対象外にしたい、そんなことはきっと起こります。 どのようにやればいいのか見てみましょう。
目次
TL;DR
pulumi state rm '<URN>'
で消せる- URN には、
$xxxx
が混じるので、シングルクォートで囲っておくと安全。リソース名に$
や%
のような特殊文字は使わないほうがよさそう - URN は
pulumi stack --show-urns
で表示できるので、pulumi stack --show-urns | grep xxxx
にすると楽
想定ケース
pulumi で、Route53 を ComponentResource を使わずに組んでいた。
private Zone CreateRoute53Resource(string name, string zoneName, Dictionary<string, object> tags) { var zone = new Zone($"{name}-zone-{zoneName}", new Pulumi.Aws.Route53.ZoneArgs { Name = zoneName, Tags = tags, }, new CustomResourceOptions { Parent = this }); return zone; }
これをグルーピングしたいので、ComponentResource で組むようにしたい。
早速書いてみて、CreateRoute53Resource
は不要なので削除して pulumi up
すると次のような実行プランになった。
Type Name Plan pulumi:pulumi:Stack pulumi-dev └─ pkg:EksClusterResource sandbox + ├─ pkg:Route53Resource sandbox-route53 create + │ └─ aws:route53:Zone sandbox-route53-zone-eks-sandbox-pulumi.my.exmple.com create - └─ aws:route53:Zone sandbox-route53-zone-eks-sandbox-pulumi.my.exmple.com delete
delete になっているのが、もともとあったリソース定義である CreateRoute53Resource
部分。
ここを消さないようにしたい。 (既存のリソースを取り込むのは Pulumi で既存のリソースを取り込む | kinoco Kibela 参照)
対応方法
pulumi の state は pulumi state
で操作できる。特定のリソースのstate を消すなら次のコマンドになる。
pulumi state rm <URN>
この時、pulumi のリソースごとに振られた一意のID、URN が必要になる。
URN は、pulumi stack --show-urns
で一覧表示できる。
$ pulumi stack --show-urns Current stack is dev: Owner: guitarrapc Last updated: 15 minutes ago (2019-11-19 11:21:31.7024525 +0900 JST) Pulumi version: v1.5.2 Current stack resources (51): TYPE NAME pulumi:pulumi:Stack └─ aws:route53/zone:Zone sandbox-route53-zone-eks-sandbox-pulumi.my.exmple.com URN: urn:pulumi:dev::pulumi::pkg:MyResource$aws:route53/zone:Zone::sandbox-route53-zone-eks-sandbox-pulumi.my.exmple.com
この例のように、リソース名とURN はセットになっているので、リソース名がわかるならそれで grep すれば結果は絞り込める。
$ pulumi stack --show-urns | grep eks-sandbox-pulumi.my.exmple.com
URN が特定できたら、pulumi state rm
で削除すればok。
注意点として、URN に $
が混じっているため、シェルによっては変数扱いされたりする。そういった場合に備えて シングルクォート'
で括るほうがいいだろう。
pulumi state delete 'urn:pulumi:dev::pulumi::pkg:MyResource$aws:route53/zone:Zone::sandbox-route53-zone-eks-sandbox-pulumi.my.exmple.com'
この状態で pulumi up
してみると、先ほどあった delete はなくなっている。
Type Name Plan pulumi:pulumi:Stack pulumi-dev └─ pkg:EksClusterResource sandbox + └─ pkg:Route53Resource sandbox-route53 create + └─ aws:route53:Zone sandbox-route53-zone-eks-sandbox-pulumi.my.exmple.com create