Azure Cloud ShellでFunctionsのアプリケーション設定を取得する

スポンサーリンク

AzureのWebApps系のサービスではよくアプリケーション設定を利用すると思います。アプリケーション設定は環境変数として扱えるので重宝しますが複数のWebAppsやFunctionsを立てているとポータルからポチポチして参照するのはめんどくさくなることもしばしばだと思います。

そこで今回はAzure Cloud Shellを利用して、特定サブスクリプション配下にあるFunctionsのアプリケーション設定をリスト形式で表示するBashを書いてみましたので備忘も含めて記載していきます。

※本記事は2018年9月23日時点の情報になります。
※Bashでの操作を前提とします。

Azure Cloud Shellの起動

とりあえずAzurePortalを開きましょう。

右上にあるAzure Cloud Shellのアイコンを選択します。

選択するとCloud Shellの画面がブラウザ下部に表示されます。初めて利用する場合はStorageの作成を求められるので素直に作成しましょう。このままの画面で作業をしてもいいのですがコンソールが弄りずらいので別セッションで起動するアイコンを押下します。

別タブでCloud Shellを開いたらエディタをアイコンを押下しましょう。

エディタを開くとファイルエクスプローラーとエディタが開きます。便利な機能なので開いておきましょう。

これでAzure Cloud Shellを操作するための準備は完了です。

Azure Cloud Shellの実行

Cloud Shellを利用する準備ができたらShellScriptを記述して実行してみましょう。

ここではvimを使って最初のファイルを作成します。

下記のコマンドを入力してエディターを起動しましょう。「GetAppSettingsInfo」の部分は任意で構いません。

vim GetAppSettingsInfo

vimのエディタが開いたら下記のスクリプトをコピぺしてください。先頭の文字列がきちんとペーストされない現象がよく起きるのでコピペ時はきちんとペーストできているかを確認してください。

#! /bin/sh
rm -f datas
rm -f result
az functionapp list --query "[].{resource:resourceGroup, name:name}" -o tsv > datas
echo "" > result
cat datas | while read LINE
do
arr=( `echo $LINE | tr -s '       ' ' '`)
echo "ResourceGroup:["${arr[0]}:embed:cite]" >> result
echo "FunctionName:["${arr[1]}:embed:cite]" >> result
az functionapp config appsettings list  -g ${arr[0]} -n ${arr[1]} -o table >> result
echo "" >> result
done
cat result

コピペしたら「:w」で保存して「:q」でエディタを閉じます。

因みにですがスクリプトの「functionapp」の部分を「webapp」に変更すればWebAppのアプリケーション設定を取得できます。

ファイル編集を行うとエディタのファイルエクスプローラにファイルが追加されているはずなのでエクスプローラの更新ボタンを押下してみましょう。GetAppSettingsInfoというファイルが作成されているはずですので、そのスクリプトを下記のコマンドで実行してみましょう。

bash GetAppSettingsInfo

問題なく実行されれば上記の図のように現在のサブスクリプションに存在するすべてのFunctionsのアプリケーション設定がテーブル状に表示されると思います。

ファイルエクスプローラを見てみるとresultというファイルができているので選択して中を見てみましょう。resultというファイルに最終的に出力しているのでこちらのファイルを見ればコマンドを打たなくても実行結果を確認することができます。これで乱立したWebAppやFunctionsのアプリケーション設定をポータル操作で確認する労力を減らすことができると思います。

※もしエラーが発生して正常に実行できない場合はコピペミスがないか再度確認してください。また、改行文字列が\nでない場合、改行文字でエラーになりますので注意してください。

おまけ

このスクリプトを作成するきっかけとなった事がありまして、「Functions V1のアプリケーション設定で明示的にバージョンを指定してないと自動的にV2に更新しちゃうよ」っていう通知があったためです。

github.com

仕事で結構なFunctionsを構築してたのでVersionの確認をポータルからポチポチ確認するのがめんどくさかったので作りました。

実際に作ったスクリプトはconfig appsettingsの中身をjmespathのquery式で「FUNCTIONS_EXTENSION_VERSION」のみを抜き出すように作りました。Version部分が~1以外であれば、Functionsのアプリケーション設定からバージョンを変更して対応する想定でしたが、ここ1年くらいに作ったFunctionsなので結局のところ調査の結果、特に作業は不要でした。スクリプトは参考に貼っておきます。

#! /bin/sh
rm -f datas
rm -f result
az functionapp list --query "[].{resource:resourceGroup, name:name}" -o tsv > datas
echo "" > result
cat datas | while read LINE
do
arr=( `echo $LINE | tr -s '       ' ' '`)
echo "ResourceGroup:["${arr[0]}:embed:cite]" >> result
echo "FunctionName:["${arr[1]}:embed:cite]" >> result
az functionapp config appsettings list --query "[?contains(name,\`FUNCTIONS_EXTENSION_VERSION\`)]" -g ${arr[0]} -n ${arr[1]} -o tsv >> result
echo "" >> result
done
cat result

とりあえず久しぶりにBash書いてて楽しかったです。

コメント