こんばんは。今日は、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にすっかり慣れてしまっていた私は自前でクライアント生成からやる方法に戸惑ってしまった、の巻でした。
ご参考になりましたら幸いです。
この記事がお役に立ちましたら、ぜひ下のいいねをポチっていただけますと励みになります!
おしまい