2017-06-30 6 views
0

エラー処理を含むAzure関数(PowerShell)があります。エラーが発生した場合は、私はいくつかの簡単なアクションを実行し、次に実行を停止したいと思いますが、これは機能しません。 PowerShellはexit 1コマンドを無視しており、実行を継続しています。ローカルでテストするときexit 1作品は、それは私が、私はこの問題を参照してくださいAzureの機能として、それを実行したときのみだとAzure 'exit'コマンドを無視して関数を実行する

try{ 
    $metrics = Get-AzureMetrics -BearerToken $bearer_token -SubscriptionId $env:HC_SubscriptionId -ResourceGroup $env:HC_ResourceGroup -ResourceType $env:HC_ResourceType -ResourceName $env:HC_ResourceName 
} catch { 
    $failure = $_.Exception.Message 
    Write-Output "[ERROR] Failed to GET metrics from Azure Monitor. $failure" 
    Invoke-LogToSplunk -EventHost "bvt-processevnts" -Source $env:HealthCheckFunctionName -Message "Failed to GET metrics from Azure Monitor. $failure" -Severity "ERROR" -SplunkUri $env:SplunkUrl -AccessToken $env:SplunkToken | Out-Null 
    exit 1 
} 

注意。私もReturnBreakを試しましたが、それらのコマンドも無視されます。

私は$error_occurred = $trueexit 1を交換すると考えられ、その後、(下記参照)if文で進行コマンドを入れ子にしました。しかし、将来的にはAzure機能を表示/編集する必要があるかもしれないチーム内では、長期的に管理するのが難しく、チームの他の人にはあまり明確ではないので、可能ならばこれを避けたい。

if (! ($error_occurred)) { 
    # Other commands 
} 

私の質問は(うまくいけば)簡単です。 Azure関数に実行を停止させる方法を教えてください。

答えて

1

この解決策はあなたのニーズに合わないかもしれませんが、このようなことを試すことができますか?

Function Get-AzureMetricsOrFail ($bearer_token) { 
    try{ 
     $metrics = Get-AzureMetrics -BearerToken $bearer_token -SubscriptionId $env:HC_SubscriptionId -ResourceGroup $env:HC_ResourceGroup -ResourceType $env:HC_ResourceType -ResourceName $env:HC_ResourceName 
    } catch { 
     $failure = $_.Exception.Message 
     Write-Output "[ERROR] Failed to GET metrics from Azure Monitor. $failure" 
     Invoke-LogToSplunk -EventHost "bvt-processevnts" -Source $env:HealthCheckFunctionName -Message "Failed to GET metrics from Azure Monitor. $failure" -Severity "ERROR" -SplunkUri $env:SplunkUrl -AccessToken $env:SplunkToken | Out-Null 
    } 
    return $metrics 
} 

$metrics_result = Get-AzureMetricsOrFail -bearer_token 'some_token' 

if($metrics_result) { 
    'Successfully obtained Azure Metrics' 
    # Rest of code 
} else { 
    'Failed getting Azure Metrics.' 
} 

また、Exitステートメントを移動してみてください。

try{ 
    $metrics = Get-AzureMetrics -BearerToken $bearer_token -SubscriptionId $env:HC_SubscriptionId -ResourceGroup $env:HC_ResourceGroup -ResourceType $env:HC_ResourceType -ResourceName $env:HC_ResourceName 
} catch { 
    $failure = $_.Exception.Message 
    Write-Output "[ERROR] Failed to GET metrics from Azure Monitor. $failure" 
    Invoke-LogToSplunk -EventHost "bvt-processevnts" -Source $env:HealthCheckFunctionName -Message "Failed to GET metrics from Azure Monitor. $failure" -Severity "ERROR" -SplunkUri $env:SplunkUrl -AccessToken $env:SplunkToken | Out-Null 
} 
if(!($metrics)) { 
    exit 
} 
+0

ありがとうございました。私は何か類似していると考えていました。しかし、私はむしろ実行を止めることができます。だから、あそこにはAzure関数に準拠した方法があります。 –

+0

私は自分の答えを変更しました。 Exitステートメントがtry、catchの内部にあるために動作していないのだろうかと思います。おそらく、私の2番目のコードが役に立つでしょう。 –

+0

良い叫び声は、実際に実行を強制的に停止します。唯一の問題は今でも 'exit 1'でもあり、関数Appはまだ200を返し、成功を記録します。私はそこにあると思いますが、私は200を返さないように私のアプローチを変えなければなりません... –

関連する問題