【Microsoft Azure】Azure Functions (Node.js)でCosmosDBのDocumentをDelete(削除)する方法

こんばんは。今日は、Azure FunctionsでCosmosDBのDocumentを削除する方法についてまとめておこうと思います。(ぶっちゃけ解決方法はAzure Functionsに限った話でもないですが)

いやーつまったつまった。

それでは参ります!

やりたいこと

Azure Functions (Node.js + TypeScript)で、CosmosDBの特定のドキュメントを削除するAPIを作りたかった。

実現方法

Create/Update/Selectと同じ要領で、Input/Output Bindingを使ってサクッとできるかと期待していたのですが、調べてもそんな方法は出てこず・・・

結局、Functionsの便利機能でショートカットはできず、CosmosDB SDKを使って、自前で実装する必要がありそうでした。(bindingでできるならどなたか教えてください・・・)

ここに一通りのコードサンプルがあります。

https://docs.microsoft.com/ja-jp/azure/cosmos-db/sql/sql-api-nodejs-get-started#DeleteItem

これを元に私が実装したコードはこんな感じ。

<index.tsx>

import { AzureFunction, Context, HttpRequest } from "@azure/functions"
import { CosmosClient, Database, Container } from "@azure/cosmos";

const httpTrigger: AzureFunction = async function (context: Context, req: HttpRequest): Promise<void> {
    context.log('HTTP trigger function processed a request.');

    try{
        const client = new CosmosClient(process.env.接続文字列情報を持つ環境変数名)
        const database: Database = client.database('データベース名');
        const container: Container = database.container('コンテナ名');

        const { resource: result } = await container.item(★id値★,★partitionKey値★).delete();

    }catch (error){
        context.log(error.message);

    }
};

export default httpTrigger;

ここでのポイントは以下です。

  • @azure/cosmossdkを自前で読み込んで、クライアント〜コンテナオブジェクト生成を行う
  • 削除するitem (Document)を指定する際には、idとpartitionKey情報を指定する必要がある

結局やってみれば、そんなに大変なコードではありませんでしたが、bindingにすっかり慣れてしまっていた私は自前でクライアント生成からやる方法に戸惑ってしまった、の巻でした。

ご参考になりましたら幸いです。

この記事がお役に立ちましたら、ぜひ下のいいねをポチっていただけますと励みになります!

おしまい

この記事を気に入っていただけたらシェアをお願いします!

ABOUT US

Yuu113
初めまして。Yuu113と申します。 兵庫県出身、東京でシステムエンジニアをしております。現在は主にデータ分析、機械学習を活用してビジネスモデリングに取り組んでいます。日々学んだことや経験したことを整理していきたいと思い、ブログを始めました。旅行、カメラ、IT技術、江戸文化が大好きですので、これらについても記事にしていきたいと思っています。