Skip to main content

Resource Group

Un grupo de recursos es un pool de recursos, pero es solo una denominación lógica. Si todos los recursos fueran independientes y necesitáramos dar permiso de acceso, necesitaríamos ir a todos ellos para crear el permiso. Con el grupo podemos hacer esto de forma simple: dar el permiso en el grupo para algún usuario. A la hora de eliminar podemos eliminar el grupo entero. Podemos calcular los costos para un grupo de recursos en lugar de tener que sumar recurso a recurso.

Cualquier nuevo recurso creado se crea automáticamente dentro de un grupo de recursos, siendo que puedes crear un nuevo grupo de recursos o elegir uno ya existente. Un recurso solo puede existir en un único grupo de recursos. Tampoco es posible agrupar grupos de recursos. Si necesitas que todos los recursos estén en el mismo grupo entonces muévelos al grupo que deseas.

La elección de cómo crear un grupo de recursos depende de cómo quieras gestionar las cosas. Lo que diré abajo es ejemplo y no regla.

  • Un grupo de recursos por región
  • Un grupo de recursos por app
  • Un grupo de recursos solo para recursos de red y cada aplicación en un grupo de recursos separado.
    • No es porque creé la red en un grupo de recursos que no pueda usarla en otro grupo.
  • Un grupo de recursos por ambiente

Un grupo de recursos no puede ser renombrado por causa de las dependencias. Es necesario excluir y recrear. Excluir el grupo de recursos involucra excluir todos los recursos en él presentes.

Otra ventaja del grupo de recursos es listar todo lo que en él está contenido. Mucho más fácil que AWS que necesitaríamos crear las mismas tags en todos los recursos.

Crear un grupo de recursos vía Portal es muy simple.

alt text

Podemos colocar tags para filtrado.

alt text

alt text

Presionando create se creará. Observe la flecha y vea que podemos hacer el download del template y de los parámetros vía json.

Template

{
"$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
"contentVersion": "1.0.0.1",
"parameters": {
"rgName": {
"type": "string"
},
"rgLocation": {
"type": "string"
},
"tags": {
"type": "object",
"defaultValue": {}
}
},
"variables": {},
"resources": [
{
"type": "Microsoft.Resources/resourceGroups",
"apiVersion": "2018-05-01",
"location": "[parameters('rgLocation')]",
"name": "[parameters('rgName')]",
"properties": {},
"tags": "[parameters('tags')]"
}
],
"outputs": {}
}

Parameters

{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"rgName": {
"value": "prod-rg"
},
"rgLocation": {
"value": "eastus"
},
"tags": {
"value": {
"env": "production",
"method": "portal",
"creator": "david"
}
}
}
}

Y solo por curiosidad si fuera vía Terraform...

resource "azurerm_resource_group" "prod" {
name = "prod-rg"
location = "East US"
tags = {
env = "production",
method = "terraform",
creator = "david"
}
}

alt text

az group list
[
{
"id": "/subscriptions/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/resourceGroups/prod-rg",
"location": "eastus",
"managedBy": null,
"name": "prod-rg",
"properties": {
"provisioningState": "Succeeded"
},
"tags": {
"creator": "david",
"env": "production",
"method": "portal"
},
"type": "Microsoft.Resources/resourceGroups"
}
]

az group list --output table
Name Location Status
------- ---------- ---------
prod-rg eastus Succeeded

az group create --name development --location brazilsouth

az group list --output table
Name Location Status
----------- ----------- ---------
development brazilsouth Succeeded
prod-rg eastus Succeeded

az group delete --resource-group development
Are you sure you want to perform this operation? (y/n): y