2016-12-05 16 views
3

私はAzureストレージキューからデータを読み込んでAzureストレージテーブルに書き込む関数を開発しようとしています。私は関連する何かを見つけることができないようです。azure関数powershellストレージキューからの読み取りとストレージテーブルへの書き込み

$in = Get-Content $triggerInput 
Write-Output "PowerShell script processed queue message '$in'" 

しかし、テーブルに書き込む例はありません。どのようにすればいいのか分かりません。

答えて

5

最近、私は同じ機能を実行しました。例はhereです。機能QueueTrigger-PowerShellが必要です。 hth

$json = Get-Content $triggerInput | ConvertFrom-Json 
Write-Output "PowerShell script processed queue message '$json'" 

$title = "PowerShell Table Entity for message {0}" -f $json.id 
$entity = [PSObject]@{ 
    Status = 0 
    Title = $title 
} 

$entity | ConvertTo-Json | Out-File -Encoding UTF8 $outputTable 

データを書き込むテーブルを制御するには、function.jsonを使用します。私は行とパーティション・キーが存在し、指定された場合:

{ 
    "type": "table", 
    "name": "outputTable", 
    "tableName": "pancakeTable", 
    "connection": "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING", 
    "direction": "out", 
    "partitionKey": "some value", 
    "rowKey": "I don't remember what was here but it was some form of variable (guid) generated from the request by Azure" 
} 

これが私のfunction.jsonですが、本来はそれにハードパーティションと行のキー値を持っていました。今私は(このスレッドでは別の答えからコピー&ペースト)それらを生成するために、PowerShellを使用しています:

PowerShell storage documentationに詳述されているように
PartitionKey = $requestBody.room 
RowKey = get-date -Format "yyyy-MM-dd H:m:s.ms" 
+0

ありがとう、それは私が必要としていたものです。なぜ私がそれを見つけることができなかったのか分かりません。ブリリアント! – ilivetoserve

+0

私たちがサポートしているさまざまなバインディングのすべての言語のドキュメントを改善するために、repo [here](https://github.com/Azure/azure-webjobs-sdk-templates/issues/375)に問題を記録しました。言語/結合コンボの行列は大きいですが、より良いガイダンスを提供する必要があります。私たちがこれをどのように改善できるかについてのご意見をお寄せください。ありがとう。 – mathewc

+0

上記のPartitionKeyとRowKeyの値が不足していると思いますか?私はこれらの2つの値を指定しなければ、私はそれを働かせることができません。私はユニークである必要があると理解しています。[ここの注記](https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/understanding-the-table-service-data-model#partitionkey-property)を参照してください。 – AndyHerb

2

、テーブル記憶にエンティティを書くためにあなたが独特のPartitionKeyを提供する必要がありますRowKey値です。このため、あなたの関数を呼び出しているところでRowKeysを外部で管理していない限り、私は有用な日時スタンプを発見しました。これを念頭において、このような入ってくるJSON本体:

{ 
    "room": "Boardroom", 
    "temp": "21.24" 
} 

があなたのPowerShell関数にフィード(ウェブフックとキューの両方のトリガー例が提供さ):

# WebHook example 
$requestBody = Get-Content $req -Raw | ConvertFrom-Json 

# Queue example 
$requestBody = Get-Content $triggerInput | ConvertFrom-Json 

Write-Output "PowerShell message body '$requestBody'" 
$entity = [PSObject]@{ 
    PartitionKey = $requestBody.room 
    RowKey = get-date -Format "yyyy-MM-dd H:m:s.ms" 
    Temp = $requestBody.temp 
} 

$entity | ConvertTo-Json | Out-File -Encoding UTF8 $outputTable 

これは1つの新しいエンティティになり(することができデータベース用語では行と考える)。 FunctionにAzure Table Storage出力オブジェクトを設定し、それをoutputTableと呼んでいると仮定します。

+0

私は自分の答えを更新したので、パワーシェルコードなしでこれを行う方法を理解することができます – likmoon

関連する問題