背景
Cosmos DB のデータプレーンの Role を生成する際に、作成済みかどうかを確認したかった為の調査記録
結論
- 定義してある JSON から読み込み
- Azure で Role 名で検索
- あとは、見つかったかどうかで条件分岐
# Role 定義ファイルから読み込み
$roleDefinition = Get-Content -Path $roleDefinitionJsonPath -Raw | ConvertFrom-Json
# 定義 Role 名取得
$cosmosRoleName = $roleDefinition.RoleName
# Role に一致するものを、Cosmos DB から取得
$roleInfos = az cosmosdb sql role definition list --account-name {Cosmos Account} --resource-group {Resource Group} --query "[?roleName=='$cosmosRoleName'].{id: id, roleName: roleName}" --output json | ConvertFrom-Json
# 一致する Role の数で確認。null でもいい
if ($roleInfos.Count -eq 0) {
# Role does not exist
} else {
# Role exists
}
role の例
{
"RoleName": "MyReadWriteRole",
"Type": "CustomRole",
"AssignableScopes": ["/"],
"Permissions": [{
"DataActions": [
"Microsoft.DocumentDB/databaseAccounts/readMetadata",
"Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/*",
"Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/*"
]
}]
}
あとがき
以前やったときは、query に RoleName を書く事に気付かず探せなかったが、今回はすぐだった・・
脳みそさんが backend で動いていてくれたんですかね