1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

CDKで"一部残して作り直し"したいんだけど(import)

Posted at

CDKで構成したスタックにトラブルがあり、一部を作り直したくなる事があります。
例えば、以下のような事をして、作り直しが発生しました。

かなしいできごと

ワイ「あー、VPCのcidr間違えた...cidr変更して作り直すか」
ワイ「んー、Elasticache(Redis)とRDSのサブネットグループが、違うcidrで違うVPCにあるとか言うてるな...」
The new Subnets are not in the same Vpc as the existing subnet group
ワイ「うーん、"UPDATE_ROLLBACK_FAILED"のステータスになったな...コンソールでロールバックしろと書いてあるから、管理画面からロールバックするか」
ワイ「ロールバックはできたぞ、もう一度同じことをやってもNGだと思うから、試しにSubnetgroupとRedis/RDSを手動で消してみるか」
DBInstance smxockdf7per4z was not found during DescribeDBInstances
ワイ「むむむ」
ワイ「また"UPDATE_ROLLBACK_FAILED"になったな...」

虚無

ワイ「ネットで色々調べたら、<ロールバックしてやり直すか消すかの二択や>って書いとるな」
ワイ「でも、このstackで作ったHostedZoneのNS、もう顧客に報告してるんやで
ワイ「このHostedZoneだけは死守せなあかんのや...」
ワイ「ぼすけてー」

最終的にうまく行った手順

Stackの削除

※ここの内容は状況によると思われます。今回守りたかったのはHostedZone

ワイ「まず、確実にHostedZoneが削除されない状態でスタックをdestroyするか...」
ワイ「removalPolicyとかautoDeleteObjectsを設定していなければセーフなはずやけど、HostedZoneの場合、レコードを作っておけば削除できないから、手動で適当なレコードを追加しておこう。」
cdk destroy NantokaStack
DELETE_FAILED
ワイ「よしよし、順調にDELTEにFAILしたな...」って、結局普通にFAILするんかい(あたりまえ)
ワイ「管理画面で削除するか、スタックの削除後に残すチェックボックスにチェックをいれて、ポチポチポチー」
ワイ「なんや、まだエラーになるんか」
ワイ「ふむふむ、さっき手動で削除したRDSが邪魔をしているということやな」
ワイ「こいつらはもう存在しないリソースやけど、敢えて削除後に残すことにするか...成仏してくれ...」
ワイ「(この理屈やとRedisも邪魔するはずやのに、なんでRedisは大丈夫なんや...?まあええか)」

よし、これでStackは消えたぞ。

Stackの再作成

ワイ「よーし、id類が変わらないように注意してStackを再作成するぞー」
ワイ「もちろん、HostedZoneを作るところだけはコメントアウトやな」
cdk deploy NantokaStack
(正常終了)
ワイ「よしよし、CDKは天才やな」

ワイ「このdeployでcdk.outフォルダにCloudFormantion用のテンプレートができとるんやな」
NantokaStack.template.json
ワイ「よしよし、これや。これをコピーするぞ。」
ワイ「コピーしたら、コメントアウトしたHostedZoneを元に戻してcdk diffしとくやで」
ワイ「cdk diffでもtemplate.jsonが作られるんやな」
ワイ「コピーしたやつに、cdk diffで追加されたHostedZoneの部分だけをコピーして魔改造したNantokaStack.template.jsonを作るやで」

NantokaStack.template.json
    "HostedZoneAAAABBBB": {
        "Type": "AWS::Route53::HostedZone",
        "Properties": {
          "Name": "example.com."
        },
        "Metadata": {
          "aws:cdk:path": "NantokaStack/HostedZone/Resource"
        },
        "UpdateReplacePolicy": "Delete",
        "DeletionPolicy": "Delete"
    },

※抜粋

ワイ「管理画面を開いて、Stackのリソースのインポートのところから、このNantokaStack.tempalte.jsonをアップロードするやで」
ワイ「idをきかれるから、Zone IDを入力...と」
ワイ「ひえっ!インポートが始まったやで!」

※成功手順はここでおしまいです。

成功するまでの失敗パターンのメモ

  • インポートするリソースが無いと管理画面で怒られる
    • CDKが吐き出したコピー時のテンプレートをそのままインポートした場合(あたりまえ)
  • CDKMetadataが編集されていると管理画面で怒られる
    • CDKが吐き出した新しい方のテンプレートをそのままインポートした場合
  • DeletionPolicyが無いと管理画面で怒られる
    • DeletionPolicyを追加する
  • Route53::RecordSetはインポートできないと怒られる
    • DNSレコードはインポートしてから再作成することにする(つまりインポート対象から除外する)

学んだこと

  • なんかイマイチな状態になっても、手動で削除すると一層イマイチになるので、手動で削除しない
  • 頑張ればインポートできる
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?