ほりひログ

所属組織の製品 (Azure とか) に関連する内容が多めだけど、個人の見解であって、所属組織を代表する公式情報ではないです。

Bicep メモ

f:id:horihiro:20220402143937p:plain

都度検索するのが大変なので、メモとして。

1. 子リソースの書き方

例えば Microsoft.Web/sites/sourcecontrols

1-1. 入れ子にする。

親リソースの中に resource で子リソースを宣言する。

resource appService 'Microsoft.Web/sites@2021-02-01' = {
  name: webSiteName
  location: location
  kind: 'app'
  properties: {
    :
  }
  resource web 'sourcecontrols@2021-02-01' = {  // ここから子リソース
    name: 'web'
    properties: {
      :
    }
  }
}

1-2. 子から親を参照する。

子リソースは親リソースと同じレベルで宣言する。
加えて parent で親リソースを参照する。

resource appService 'Microsoft.Web/sites@2021-02-01' = {
  name: webSiteName
  location: location
  kind: 'app'
  properties: {
    :
  }
}

resource web 'Microsoft.web/sites/sourcecontrols@2021-02-01' = {
  parent: appService // ここで親リソースを参照する
  name: 'web'
  properties: {
    :
  }
}

2. ロール割り当て

デプロイ時にマネージド ID を有効にして、同時にそれを他のリソースのロールをhttps://www.google.com/url?sa=i&url=https%3A%2F%2Fdevblogs.microsoft.com%2Fdevops%2Fazurefunbytes-intro-to-bicep%2F&psig=AOvVaw0zWLc6KaUdbfEbb_8IGnfO&ust=1648963806189000&source=images&cd=vfe&ved=0CAgQjRxqFwoTCLjLpcrU9PYCFQAAAAAdAAAAABAD割り当てる。

Web App とストレージ アカウントのデプロイタイミングで、Web App のマネージド ID に ストレージ アカウント共同作成者 を割り当てる例。

param roleNameGuid string = newGuid()

resource storageAccount 'Microsoft.Storage/storageAccounts@2021-02-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
}

resource appService 'Microsoft.Web/sites@2021-02-01' = {
  name: webSiteName
  location: location
  identity: {
    type: 'SystemAssigned'
  }
  kind: 'app'
  properties: {
    :
  }
}

// https://docs.microsoft.com/ja-jp/azure/azure-resource-manager/bicep/scenarios-rbac#role-assignments
resource assignRole 'Microsoft.Authorization/roleAssignments@2020-08-01-preview' = {
  name: roleNameGuid
  scope: storageAccount
  properties: {
    principalId: appService.identity.principalId
    roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '17d1049b-9a84-46fb-8f53-869881c3d3ab') // "ストレージ アカウント共同作成者" のロール定義 ID
    // https://docs.microsoft.com/ja-jp/azure/role-based-access-control/role-assignments-template#new-service-principal
    principalType: 'ServicePrincipal'
  }
}