MoreBeerMorePower

Power Platform中心だけど、ノーコード/ローコード系を書いてます。

【備忘録】Power Automate/Logic AppsでCosmos DBに保存したアイテムを一括削除

前回はCosmos DBのリソース作成と複合インデックスの登録までやりました。

さて、これから作っていこうとしているLogic AppsのフローではCosmos DBにいったんRead APIで写真を読み取った結果を格納するわけですが、そのままにしておくのもよくないので一連の処理として削除を入れておきたいわけです。

Logic Apps、Power AutomateいずれのCosmos DB関連アクションにも、Delete a document というアクションがあります。

f:id:mofumofu_dance:20220208000923p:plain

通常であれば、これを使って、ループ処理して作成したアイテムを消すわけですが、問題はこのアクションの "Document Id"に何を指定すればいいかわからないところです。

前段にいれたQuery documents アクションで取得できるいかなるプロパティを入れても、エラーが返ってきてしまいます。(Status 400)

困った。このままではスキャンするたびにCosmos DBの容量を食い続けてしまいます。

ということで今回はPower Automate/Logic AppsでCosmos DBに保存したアイテムを一括削除する方法を記録しておきます。

Stored Proceduresの登録

Cosmos DBでもほかのDB同様に、ストアドプロシージャ (DBへの操作の塊みたいなもの) を登録することができます。

作成したコンテナーをデータエクスプローラーで表示した状態で、画面右上の「New Stored Procedure」をクリックします。

f:id:mofumofu_dance:20220208001616p:plain

Idを設定する入力欄があるので、ここに適当な名前を入れます (この画像では"BulkDelete")。 さらに、サンプルが入っていますので、これを全消しします。

f:id:mofumofu_dance:20220208001831p:plain

ありがたいことに、Azure のGithubリポジトリに、Cosmos DBで一括削除するようなストアドプロシージャのサンプルがおかれていますので、下記URLからコードをそのままコピペして保存をします。

github.com

これで準備は完了です。

Power Automate/Logic Appsからの実行

コピペで保存したストアドプロシージャをPower Automate/Logic Appsから実行してみます。

Cosmos DBのアクションの中からExecute stored procedure を選びます。

データベースIDやコレクションID (コンテナーID) と一緒にパーティションキーを指定します。また、コピペしたサンプルでは、パラメータとして何らかのクエリを指定しないと処理されないのでここでは適当に["select * from c"]という配列を指定します。

f:id:mofumofu_dance:20220208002839p:plain

これで実行してみると、対象としたコンテナーから指定したパーティションキーに一致するレコードが全削除されているのがわかると思います。

f:id:mofumofu_dance:20220208003252p:plain

アクションの実行結果には削除したレコード数が表示されます。

これでRead APIで読み取った結果をCosmos DBに登録し、ソートして取得したあとに結果を消すというところまで準備ができました。

次回は実際のフロー全体を紹介する予定です。