Publicación de código de Bicep desde una canalización de implementación

Completado

Cuando automatiza el proceso de publicación de una especificación de plantilla o un módulo de Bicep, debe asegurarse de que todo lo que haría normalmente por su cuenta se pueda automatizar y ejecutar dentro de la canalización. En esta unidad, aplicará los principios que aprendió anteriormente para publicar las especificaciones de plantilla y los módulos de Bicep desde una canalización de implementación.

Especificaciones de plantilla y módulos

Bicep le permite reutilizar fácilmente el código. Dos enfoques comunes para reutilizar el código de Bicep entre implementaciones son:

  • Especificaciones de plantilla, que están optimizadas para la implementación de soluciones completas. Por ejemplo, supongamos que ha definido un conjunto de recursos protegidos por seguridad para implementar una máquina virtual completa según las especificaciones de la empresa. Podría publicar este código como una especificación de plantilla. A continuación, los compañeros podrían usar la especificación de plantilla para implementar una máquina virtual completa, incluso desde Azure Portal.
  • Módulos, que están diseñados para ser componentes de otras implementaciones. Por ejemplo, supongamos que ha creado un archivo de Bicep que crea una cuenta de almacenamiento. Es probable que necesite cuentas de almacenamiento en muchas otras implementaciones, por lo que podría publicar el archivo de Bicep en un registro y usarlo como módulo en todas las implementaciones de la organización.

Al decidir entre el uso de las especificaciones de plantilla y los módulos de Bicep, una buena regla general es: si la plantilla se va a implementar tal y como está en toda la organización, es probable que las especificaciones de plantilla sean una buena opción. Pero si es probable que reutilice esta plantilla dentro de varias plantillas primarias, los módulos de Bicep pueden satisfacer mejor sus necesidades.

Validación del código reutilizable en una canalización

A diferencia de las implementaciones normales de Bicep, cuando crea una especificación de plantilla o un módulo no se implementan los recursos directamente en Azure. En su lugar, se publica la especificación de plantilla o el módulo. Después podrá usar la especificación de plantilla o el módulo en otra implementación. Después, esa implementación implementa los recursos que ha definido. Por lo tanto, las formas de validar y probar las especificaciones de plantilla y los módulos de Bicep pueden diferir del proceso que se usa para las implementaciones normales de Bicep.

Realizar un linting de código de Bicep es recomendable. El linter detecta problemas sintácticos y le advierte si no sigue los procedimientos recomendados.

Además de linting, es posible que quiera considerar la posibilidad de probar las especificaciones de plantilla y los módulos mediante la validación preparatoria. Incluso puede considerar la posibilidad de implementar las especificaciones de plantilla y los módulos en Azure y probar que los recursos que crean se comportan según lo previsto. Sin embargo, puede resultar difícil ejecutar estos tipos de pruebas desde una canalización de implementación por dos motivos:

  • La validación y las implementaciones preparatorias requieren un entorno de Azure en el que implementar los recursos. Es posible que tenga que mantener una suscripción de Azure dedicada o un grupo de recursos para implementar y probar los módulos.
  • Muchas especificaciones de plantilla y módulos requieren que especifique un conjunto de parámetros. Es posible que tenga que crear un conjunto de parámetros de prueba para las especificaciones de plantilla o los módulos que se van a usar cuando se implementan.

Debería elegir si desea incluir los pasos de canalización que implementan y prueban las especificaciones de plantilla y los módulos. En este módulo de Microsoft Learn se realiza un linting del código de Bicep, pero no se incluyen otras formas de pruebas. Si quiere probar los módulos y las especificaciones de plantilla, tenga en cuenta cómo los implementará en Azure. Tenga en cuenta también si va a usar suscripciones dedicadas o grupos de recursos para implementar los recursos.

Sugerencia

Se recomienda que revise Probar el código de Bicep mediante Azure Pipelines para obtener más información sobre cómo probar los archivos de Bicep en una canalización automatizada.

Autenticación y autorización

Cuando publica las especificaciones de plantilla en Azure usted mismo, el usuario de Microsoft Entra debe concederse acceso al grupo de recursos que contiene el recurso de especificación de plantilla. Del mismo modo, cuando publica un módulo de Bicep en un registro, el usuario de Microsoft Entra debe tener permiso para escribir en la instancia de Azure Container Registry que usa su organización para sus módulos de Bicep.

Cuando trabaja con una canalización de implementación automatizada, se aplican los mismos principios. Sin embargo, dado que no es la persona que ejecuta la implementación, debe asegurarse de que a la entidad de servicio de la canalización se le concede el acceso adecuado al grupo de recursos para publicar la especificación de plantilla o al registro de contenedor para publicar módulos.

Sugerencia

Cuando publica un módulo en un registro, la entidad de servicio que ejecuta la implementación probablemente no necesite muchos permisos. Cuando el registro usa la autorización de Microsoft Entra, la entidad de servicio solo necesita el permiso AcrPush en el registro.

Considere la posibilidad de usar el principio de privilegios mínimos de seguridad. Proporcione a la entidad de servicio de la canalización acceso solo al registro de contenedor y no a un grupo de recursos ni a una suscripción.

Publicación de especificaciones de plantilla y módulos desde una canalización

Cuando publique una especificación de plantilla desde su propio equipo mediante la CLI de Azure, use un comando como el siguiente:

az ts create \
  --name StorageWithoutSAS \
  --resource-group MyResourceGroup \
  --location westus3 \
  --display-name "Storage account with SAS disabled" \
  --description "This template spec creates a storage account, which is preconfigured to disable SAS authentication." \
  --version 1 \
  --template-file main.bicep

Puede convertir este comando de la CLI de Azure en un paso de canalización:

- task: AzureCLI@2
  name: Publish
  displayName: Publish template spec
  inputs:
    azureSubscription: $(ServiceConnectionName)
    scriptType: 'bash'
    scriptLocation: 'inlineScript'
    inlineScript: |
      az ts create \
        --name StorageWithoutSAS \
        --resource-group MyResourceGroup \
        --location westus3 \
        --display-name "Storage account with SAS disabled" \
        --description "This template spec creates a storage account, which is preconfigured to disable SAS authentication." \
        --version 1 \
        --template-file main.bicep

La canalización usa el mismo proceso para publicar la especificación de plantilla que usaría usted mismo.

De forma similar, cuando publique un módulo de Bicep desde su propio equipo mediante la CLI de Azure, use un comando como el siguiente:

az bicep publish \
   --file module.bicep \
   --target 'br:toycompany.azurecr.io/mymodules/myqueue:2'

También puede convertir este comando de la CLI de Azure en un paso de canalización:

- task: AzureCLI@2
  name: Publish
  displayName: Publish Bicep module
  inputs:
    azureSubscription: $(ServiceConnectionName)
    scriptType: 'bash'
    scriptLocation: 'inlineScript'
    inlineScript: |
      az bicep publish \
        --file module.bicep \
        --target 'br:toycompany.azurecr.io/mymodules/myqueue:2'

Sugerencia

En este ejemplo, el nombre de host del registro de Bicep (toycompany.azurecr.io) está insertado en la definición del paso de canalización. Este no es un procedimiento recomendado. Puede usar variables de entorno para establecer opciones de configuración como esta. Verá cómo funciona más adelante en este módulo de Microsoft Learn.

En esta unidad se describe cómo publicar una especificación de plantilla desde una canalización.

Uso de un módulo o una especificación de plantilla

En los módulos de formación anteriores de Microsoft Learn ha aprendido a implementar los recursos definidos en especificaciones de plantilla y a usar módulos de Bicep almacenados en registros. Tanto si publica las especificaciones de plantilla como los módulos manualmente o desde una canalización de implementación, los usará e implementará de la misma manera.

Por ejemplo, implementa una especificación de plantilla o un archivo de Bicep en un grupo de recursos mediante el comando az deployment group create de la CLI de Azure o el cmdlet New-AzResourceGroupDeployment con Azure PowerShell.