AWS Toolkit for Visual Studio で Blazor WebAssembly をデプロイした CloudFront ディストリビューションを削除する方法

2023.01.21

いわさです。

AWS Toolkit for Visual Studio を使うと以下の記事のように Blazor WebAssembly を CloudFront + S3 へ簡単にデプロイすることが出来ます。

しかし、今回デプロイしたリソースを削除するために CloudFront ディストリビューションを削除したかったのですが Visual Studio から削除出来ないことに気がつきました。
いくつか気づいたことがあったのでシェアしたいと思います。

本記事で使用している AWS Toolkit for Visual Studio 2022 のバージョンは 1.38.0.0 です。

まずはデプロイ、超簡単

まずは Blazor WebAssembly を CloudFront + S3 にデプロイします。
冒頭の記事でも紹介されていますが、AWS Toolkit for Visual Studio の Publish to AWS を使うと 1 分くらいで終わります。

Visual Studio 2022 でプロジェクトの新規作成で、テンプレートから Blazor WebAssembly App を選択します。

AWS Toolkit for Visual Studio や AWS CLI プロファイルなどは導入済みとしています。
プロジェクトが新規作成されたらプロジェクトを右クリックし、Publish to AWS メニューを選択します。

Publish Target の CloudFront + S3 を選択しで Publish します。

少しするとデプロイが完了しアクセス出来ると思います。
こんな簡単にデプロイ出来るのすごいなと改めて思いました。
Blazor も AWS も知らなくても、ほぼこの手順だけで終わりです。すごい。

Error saving distribution: WebACLId is missing for the resource が発生

そして、検証が終わって不要になったのでディストリビューションをとりあえず削除することに。

AWS Toolkit for Visual Studio をインストールすると、Visual Studio で AWS Explorer を使うことが出来るようになります。
AWS Explorer を通してマネジメントコンソールへアクセスせずに Visual Studio から AWS リソースの操作が出来ます。

ここで CloudFront ディストリビューションを削除してみましょう。

削除前にまずディストリビューションを無効化しろとのエラーメッセージが表示されました。
マネジメントコンソールから操作する場合でもまず無効化が必要なので、この挙動は正常です。

AWS Explorer でディストリビューションの編集画面を開き、Enabled のチェックを外して上部の Apply Changes で変更を確定させましょう。

WebACLId に関するエラーメッセージが表示されました。

Error saving distribution: WebACLId is missing for the resource

CloudFront のディストリビューションの構成値にAWS WAF WebACL を示す WebACLId プロパティがあります。
このあたりがおかしい設定になっていそうですね。

WebACL 関係なさそう・・・

マネジメントコンソールを見てみました。
しかし、対象リソースにはそもそも AWS WAF の関連付けがされていませんでした。

また、いくつか他のディストリビューションで試してみたのですが全てで同じエラーメッセージが発生しました。
おそらく AWS Toolkit for Visual Studio の AWS Explorer で、CloudFront の Apply Changes を実行する際のバリデーションにバグがありそうです。

マネジメントコンソールから無効化することで AWS Explorer からも削除可能

なお、AWS マネジメントコンソールからディストリビューションの無効化は問題なく実施出来ました。

マネジメントコンソールでの無効化ステータスが、Visual Studio の AWS Explorer 上でも確認ができ、ここからディストリビューションの削除も実施することが出来ました。

また、AWS マネジメントコンソール上から作成しただけのディストリビューションでも、Visual Studio の AWS Explorer 上では Apply Changes で同じエラーメッセージが発生しました。

このことから、AWS Toolkit for Visual Studio によって作成されるディストリビューションに問題はなく、あくまでも AWS Explorer の CloudFormation Apply Changes にだけ問題があると考えて良さそうです。
バグ修正を待つとしてワークアラウンドとしてはマネジメントコンソールや API 経由でのディストリビューション更新を行う形になるでしょう。

Publish to AWS リソースの掃除に関しては CloudFormation で削除したほうが良い

ただし、ディストリビューションの削除だけでなく Publish to AWS で作成された AWS リソース全般を掃除する必要がある場合は上記方法でディストリビィーションを削除してしまうと、ベースの CDK リソース(CloudFormation スタック)を削除する際にカスタムリソースでエラーが発生してスタック削除に失敗します。

よって、Publish to AWS で作成されたリソースを削除したいという目的であれば最初からディストリビューション単体の削除は行わずに CloudFormation スタックを削除したほうが良いでしょう。

AWS Explorer から CloudFormaiton スタックの操作も可能です。

さいごに

本日は AWS Toolkit for Visual Studio で Blazor WebAssembly をデプロイした CloudFront ディストリビューションを削除する方法を調べてみました。

削除というか、ディストリビューションの変更全般は AWS Toolkit for Visual Studio に依存した問題で失敗するため、マネジメントコンソールなどから操作が必要です。

さらに Publish to AWS リソースの場合だと、ディストリビューション単体で削除してしまうと CloudFormation スタック削除時にエラーが発生するという点も覚えておきましょう。