LoginSignup
8
0
お題は不問!Qiita Engineer Festa 2023で記事投稿!

Step FuntionsでCloudFront を削除する

Last updated at Posted at 2023-06-28

稼働中のCloudFrontを削除する場合、まずCloudFrontの閉鎖が必要である。
これをlamdbaとかで行う場合は、この閉鎖のための待機が必要なため、代わりにStep Functionsを使い閉鎖を待ってから削除するような方法で実装した。

Step Functionsの中身

step_funtion

以下各ステップの説明である。

CloudfrontDeleteGetConfig

閉鎖するにはIF-MatchようにETagが必要なためGetConfigを行う。
arn:aws:states:::aws-sdk:cloudfront:getDistributionConfig
を実行すればlambdaもいらずStep Functionsから直接取得できる。

CloudfrontDeleteModifyConfig

閉鎖のためにはDistributionConfigEnabledをfalseにしないといけない。
そのためには前のstepで取得したDistributionConfigの値とEnabledをfalseにしたものをマージすることが必要である。
ここでStep Fucntionには組み込み関数というものがあり、パラメータの操作ができる。
ここでStates.JsonMergeという関数があるのでこれを使う…ことができない!

awsのリファレンスにある通り、現在このJsonMergedeep mergeに対応していないのである!
(「3 番目の引数はのブール値です。falseこのブーリアン値は、ディープマージモードが有効かどうかを決定します。」とあるのでいつかは対応しそうだが…。)
もちろんすべてのDistributionConfigの値を羅列してもいいのだが保守性が最悪なのでここだけはlambdaにした。このlambdaの中身はDistributionConfigのjsonを受け取ってEnabledをfalseにするだけである。

CloudfrontDeleteStop

先ほど変更したDistributionConfigの値を用いてarn:aws:states:::aws-sdk:cloudfront:updateDistributionを実行する。
ここでしばらく時間がかかることになる…。

CloudfrontDeleteWaiter

待つ。とりあえず5分=300秒待機した。

CloudfrontDeleteDelete

実際に削除する部分。Stopで取得したEtagとかを使い、arn:aws:states:::aws-sdk:cloudfront:deleteDistributionで削除する。
ただ閉鎖が完了してないときのために、最大10回分の再挑戦を仕込んである。
この再挑戦は"ErrorEquals":["CloudFront.DistributionNotDisabledException"],で判定する。
Backoffrateとか利用して時間がかかってもしっかり削除されるようにしている。

感想

lambdaを使わずともStep Functionsでawsのリソースを直接触れるのは良かったが、
パラメータの取り回しの不自由さが気になった。
JsonMergeはさっさとdeep copy対応してほしい…。
lambdaを使っているならGetConfigUpdateConfigもlambdaに混ぜてしまってもよかったかも…。

8
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
8
0