Skip to main content

Command Palette

Search for a command to run...

Débloquer un fichier d'état Terraform utilisant un backend Azure

Il peut arriver que le fichier d'état soit verrouillé voici comment se débloquer

Updated
4 min readView as Markdown
Débloquer un fichier d'état Terraform utilisant un backend Azure
A

Ayant eu de multiples expériences dans le monde du conseil, j'ai pu acquérir une expertise dans la conception et la construction de services de collaboration d'entreprise. Je suis passionné par les technologies Microsoft et surtout Azure. Aujourd'hui je possède une solide expérience en méthodologie de développement et j'ai mené des équipes de développement technique au succès. Je possède également une solide connaissance de l'infrastructure qui fait de moi une ressource efficace pour mettre en œuvre la transformation numérique vers le cloud Microsoft. Je suis un professionnel efficace et honnête qui aime relever les challenges. Aimant partager mes connaissances; je suis à l'aise en tant que Technical Leader et en tant que membre d'une équipe. Mes compétences techniques sont les suivantes: Azure, DevOps, Architecture Applicative, Développement de solution Cloud Native, écosystème Microsoft... et bien d'autres. Pour voir mes certifications Microsoft : https://www.youracclaim.com/users/antoine-loizeau

Introduction

Lorsque vous travaillez avec Terraform, l'un des éléments clés est le fichier d'état. Ce fichier joue un rôle crucial dans le suivi de l'état actuel de votre infrastructure et dans la détermination des modifications à apporter pour atteindre l'état désiré.

Cependant, lors de l'exécution de Terraform en parallèle ou dans des environnements d'équipe, il peut arriver que le fichier d'état soit verrouillé, empêchant ainsi d'autres opérations de Terraform de s'exécuter simultanément.

Dans cet article, nous allons explorer comment utiliser Azure CLI pour libérer un fichier d'état de Terraform verrouillé dans un compte de stockage Azure. Cette technique est particulièrement utile dans les situations où un processus Terraform est interrompu ou échoue, laissant le fichier d'état dans un état verrouillé.

Azure CLI script

Ce script Azure CLI est utilisé pour libérer un lease sur un blob dans un compte de stockage Azure.

# Définissez vos variables
ACCOUNT_NAME="<your_account_name>"
RESOURCE_GROUP="<your_resource_group>"
SUBSCRIPTION_ID="<your_subscription_id>"
BLOB_NAME="<state_filename>"
STORAGE_ACCOUNT_NAME="<your_storage_account_name>"
CONTAINER_NAME="<blob_container_name>"

# Obtenez la clé de stockage Azure
AZURE_STORAGE_KEY=$(az storage account keys list \
    --account-name "${ACCOUNT_NAME}" \
    --resource-group "${RESOURCE_GROUP}" \
    --subscription "${SUBSCRIPTION_ID}" \
    --query "[0].value" \
    --output tsv
)

# Casser le lease sur le blob
az storage blob lease break \
    --blob-name "${BLOB_NAME}" \
    --account-name "${STORAGE_ACCOUNT_NAME}" \
    --account-key "${AZURE_STORAGE_KEY}" \
    --container-name "${CONTAINER_NAME}" \
    --subscription "${SUBSCRIPTION_ID}" || true
  1. La première partie, permet de définir un ensemble de variables lié à votre contexte d'exécution.

  2. Ensuite, il récupère la clé de stockage Azure pour le compte spécifié en utilisant la commande az storage account keys list.

  3. Enfin, il utilise la commande az storage blob lease break pour libérer le lease sur le blob spécifié.

💡
Si la commande échoue pour une raison quelconque, le script continue à s'exécuter grâce à l'opérateur || true.

Azure PowerShell

Si des fois, vous préférez le PowerShell voici une alternative au script précédent:

# Définissez vos variables
$ACCOUNT_NAME="<your_account_name>"
$RESOURCE_GROUP="<your_resource_group>"
$SUBSCRIPTION_ID="<your_subscription_id>"
$BLOB_NAME="<state_filename>"
$STORAGE_ACCOUNT_NAME="<your_storage_account_name>"
$CONTAINER_NAME="<blob_container_name>"

# Sélectionnez le bon abonnement
Select-AzSubscription -SubscriptionId $SUBSCRIPTION_ID

# Obtenez la clé de stockage Azure
$AZURE_STORAGE_KEY = (Get-AzStorageAccountKey -ResourceGroupName $RESOURCE_GROUP -AccountName $ACCOUNT_NAME).Value[0]

# Casser le lease sur le blob
$context = New-AzStorageContext -StorageAccountName $STORAGE_ACCOUNT_NAME -StorageAccountKey $AZURE_STORAGE_KEY
$blob = Get-AzStorageBlob -Container $CONTAINER_NAME -Blob $BLOB_NAME -Context $context
$leaseStatus = $blob.ICloudBlob.Properties.LeaseStatus

if ($leaseStatus -eq 'Locked') {
    $blob.ICloudBlob.BreakLease()
}

Pipeline YAML Azure DevOps

Azure DevOps offre une puissante fonctionnalité appelée "Pipelines" qui permet aux développeurs de définir et de gérer leurs processus de CI/CD (Intégration Continue / Déploiement Continu) directement dans leur code source. L'un des formats pris en charge pour définir ces pipelines est le YAML (Yet Another Markup Language).
Ce chapitre va vous aider à intégrer le code précédent dans une tâche Azure DevOps.

  1. Tâche Azure CLI
steps:
- task: AzureCLI@2
  inputs:
    azureSubscription: '<AzureServiceConnection>'
    scriptType: 'bash'
    scriptLocation: 'inlineScript'
    inlineScript: |
      # Write your commands here
  displayName: 'Run Azure CLI commands'
  condition: succeededOrFailed()
  1. Tâche Azure PowerShell
steps:
- task: AzurePowerShell@5
  inputs:
    azureSubscription: '<AzureServiceConnection>'
    azurePowerShellVersion: LatestVersion
    ScriptType: 'InlineScript'
    Inline: |
      # Write your commands here
  displayName: 'Run Azure PowerShell commands'
  condition: succeededOrFailed()
💡
condition: succeededOrFailed() la condition précédente vous permet d'exécuter cette tâche quel que soit le résultat des tâches précédentes.

Conclusion

Dans cet article, nous avons exploré comment utiliser Azure CLI ou PowerShell pour briser un lease sur un blob dans un compte de stockage Azure, ce qui permet de libérer le fichier d'état de Terraform et de reprendre les opérations normales.

Il est important de noter que bien que cette technique soit utile dans certaines situations, elle doit être utilisée avec prudence. La rupture d'un lease sur un blob peut avoir des conséquences inattendues si le blob est actuellement utilisé par un autre processus. Par conséquent, il est recommandé de mettre en place des mécanismes de surveillance et d'alerte pour détecter et résoudre rapidement les problèmes liés aux fichiers d'état de Terraform.

En fin de compte, la gestion efficace des fichiers d'état de Terraform est une compétence essentielle pour tout développeur ou administrateur système travaillant avec Terraform et Azure.

En maîtrisant les techniques présentées dans cet article, vous serez mieux équipé pour gérer les défis qui peuvent survenir lors de l'utilisation de Terraform à grande échelle.


Liens utiles:

Terraform

Part 2 of 13

Dans cette série, je vais partager avec vous différents outils ou tips que j'utilise pour développer et gérer mes solutions utilisant l'IaC Terraform d'HashiCorp.

Up next

Ajouter un switch pour simplifier le debug Terraform

Comment utiliser les possibilités d'Azure DevOps pour vous faciliter l'analyse d'Infrastructure as Code Terraform