0
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 1 year has passed since last update.

AzureLogicAppsでCosmosDB内のドキュメントに一部変更を加える

Posted at

CosmosDB内の全ドキュメントに対して、タイムスケジュールトリガーで特定のプロパティの値を書き換えるという事をやる為にAzureLogicAppsを使う事にしました!😊

CosmosDBのコンテナ内に格納されているドキュメントの数が多く、AzureFunctionsだとタイムアウトになってしまう気がしたので、LogicAppsでやってみよーと思った感じです。この記事はその際の備忘録&小ネタです。

実現したい事

CosmosDBに例えば下記のようなデータが格納されていたとします。

before
{
    "id": "hogehoge123456789",
    "a": 1,
    "b": 2,
    "c": 3,
    "d": 4,
}

タイムスケジュールトリガーで決まった時刻に、"d"だけ値を0にしたい!
という事をやりたい訳です。

after
{
    "id": "hogehoge123456789",
    "a": 1,
    "b": 2,
    "c": 3,
    "d": 0,
}

という事で早速LogicAppsのリソースを作成します!
今回プランは従量課金を選択しました。
2023-07-21_22h02_33.png

ワークフローの作成

デザイナー画面からワークフローを作成していきます。

出オチ感満載ですが、最終的にどうなったかというと…
2023-07-21_22h06_42.png
こうなりました。結局途中でFunctionsを呼んでます。(おい!)

特定のプロパティ値を置き換えるというのがどうしても分からず、そこだけ頼ってます。

一応、以下解説です。
まず、スケジュールトリガーです。

次に、CosmosDBコネクタで全ドキュメントを取得します。

次にForeachの中でAzureFunctionsを追加します。
2023-07-21_22h27_35.png

以下のドキュメントの「ロジック アプリのワークフロー内から関数を作成する (従量課金ワークフローのみ)」のやり方を参考に行います。

関数定義エディターで追加したコードは以下の通りです。

javascript
module.exports = function (context, data) {
    const input = data.body
  // 'd'というプロパティがあるかチェック
  if (input.hasOwnProperty('d')) {
     //あれば0に置き換える
    input.d = 0;
  }

  context.res = {
    body: input
  };

  context.done();
};

最後にFunctionsから返ってきたデータをCosmosDBへ戻します。
2023-07-21_22h44_34.png
全て終わったタイミングでSlackに通知を残して完了です。

因みに、Slackのプライベートチャンネルへ通知させる場合は、チャンネル名にはチャンネルID(推奨)、そしてチャンネルのインテグレーションからアプリを追加しておく必要があるようです。
2023-07-21_22h48_04.png

さいごに

LogicAppsだけで完結させられるような気がしますが、ちょっとやり方が分かりませんでした…
とはいえ、一部コードに頼ってしまえばいい。というのは嬉しい発見でした。(いいのか?😅)

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