Azure リソースに対して大量に同じ事を繰り返す場合、シェルスクリプトなどで Azure CLI を実行するととても便利ですよね。例えば、特定条件の Azure リソースだけ実行の対象にしたくない時は、シェルスクリプトで if 文で条件分岐するなんて事も可能です。今回は、シェルスクリプトで条件分岐をせずに Azure CLI の JMESPath 関数を使って特定文字列が含むリソースだけ取得する方法を試してみました。
例えばリソースグループの一覧を取得
bash
# Azure CLI でリソースグループの一覧を取得
rgs=$(az group list --query "[].name" --output tsv)
# for ループでリソースグループ名を確認
for rg in ${rgs[@]}; do
echo $rg
done
# 以下の出力結果になる場合を例とします
mnroai-rg
mnrlabo-rg
NetworkWatcherRG
mnravd-rg2
mnrbot-rg
mnrpt-rg
if 文で特定文字列だけを対象にする例
bash
# Azure CLI でリソースグループの一覧を取得
rgs=$(az group list --query "[].name" --output tsv)
# mnr という文字列が含むリソースグループ名を確認
for rg in ${rgs[@]}; do
if [[ $rg == *mnr* ]];then
echo $rg
fi
done
# 以下の確認結果となる ( NetworkWatcherRG は対象外となる)
mnroai-rg
mnrlabo-rg
mnravd-rg2
mnrbot-rg
mnrpt-rg
JMESPath 関数を使う例
bash
# JMESPath 関数の contains を使用
rgs=$(az group list --query "[?contains(name,'mnr')].name" --output tsv)
# for ループはシンプルなままリソースグループ名を確認
for rg in ${rgs[@]}; do
echo $rg
done
# 以下の確認結果となる ( NetworkWatcherRG は対象外となる)
mnroai-rg
mnrlabo-rg
mnravd-rg2
mnrbot-rg
mnrpt-rg
参考