はじめに
本記事MSLearnでつまった点をまとめることを目的としています。
今回はこちらのMicrosoftLearnに従って勉強会を行いました。
今回はAzure Functionsを使用して、CosmosDBからデータの読み取りをAzureのポータル上で実施する方法を学びました。その演習中につまってしまう人がいたため、共有します。
演習でつまった点
MSLearnの演習の以下の手順でつまってしまいました。
試してみる
ここまでの段階で、以下が行われています。
- CosmosDBの作成とそのデータベースとコンテナの作成
- 読み取り検証用のサンプルデータをCosmosDBに追加
- HTTPトリガーの設定をしたAzure Functions(関数)の作成
- HTTPトリガーの入力バインディングの作成(CosmosDBをバインド)
- 関数の実装
- 関数の実装の更新
- 入力バインディングの変更(入力バインディングの定義が記載されているFunction.jsonを変更)
試してみるの章では、これまでで作成したAzure Functionsが正常に動くかの検証を行います。
手順の通り、検証したところ、エラーが出てしまいました。
※(脱線)Azure Functionsにおけるバインディング
Azure Functionにおけるバインディングとは、アプリが実行する関数に対する入力と出力をAzure上のサービスやサードパーティーのサービスと結び付けることです。関数は自身が引き受けられる正しい入力を受け取れば、それを何らかの形で加工/整形して、出力を行います。入力元や出力先がどんなサービスかは知らずに作ることができ、柔軟な処理を行えるようにしています。
原因
演習の手順に、入力バインディングを変更する手順がありました。ここでは、入力バインディングでid と partitionKeyの値を変更し、{id}パラメータを受け取れるよう、Function.jsonを書き換えるという作業を行います。
前提として、入力バインディングを作成した時点で、バインド先のCosmosDBの情報などバインドに必要な情報はFunction.jsonに記載されています。
そのため、Function.jsonの中のid と partitionKeyの値のみを変更すればよかったのですが、以下の、MSLeaenの手順にあったjsonでFunction.jsonをすべて上書きしたために、必要ないパラメータまで変更されてしまい、エラーが起きました。
{
"bindings": [
{
"authLevel": "function",
"type": "httpTrigger",
"direction": "in",
"name": "req",
"methods": [
"get",
"post"
]
},
{
"type": "http",
"direction": "out",
"name": "res"
},
{
"name": "bookmark",
"direction": "in",
"type": "cosmosDB",
"databaseName": "func-io-learn-db",
"collectionName": "Bookmarks",
"connectionStringSetting": "your-database_DOCUMENTDB",
"id": "{id}",
"partitionKey": "{id}"
}
]
}
上記、Function.jsonのconnectionStringSetting
にはバインド先のCosmosDBの名前がすでに記載されていたのに、それを、your-database_DOCUMENTDB
という間違った文字列で上書きしてしまったため、エラーが起きました。
さいごに
最後までお読みいただき、ありがとうございました。
今回はAzure Functionsの用語や扱いに慣れておらず、今設定した項目がどこに効いてるのかの関連を意識できていないことがつまってしまった原因の一つだと思いました。
1つ1つ着実に理解するよう頑張っていきます。