Рубрики
Uncategorized

Azure DEVOPS — безопасный сброс штата террафора

Если вы используете Terraporm для обеспечения инфраструктуры Azure, вы, скорее всего, используете Azure … Теги с лазурным, дежоптом, террафом.

Если вы используете Terraporm для обеспечения инзаструктуры Azure, вы, скорее всего, используете Azure Storage Backend Type Для вашего государственного файла.

При выполнении плана и применения, Terraform приобретает блокировку в состоянии состояния для управления параллелизмом (т. Е. Это, чтобы несколько развертываний не мешают друг другу), а иногда, если трубопровод резко завершится, вы оставляете резко, вы остались резко, вы оставляете резко, вы остались резко, вы оставляете резко, вы остались с блокировкой на Государственный файл.

В следующий раз, когда вы запустите трубопровод, вы получите что-то вроде

Error locking state: Error acquiring the state lock: 
state blob is already locked

Сетевая сеть ограничена наши учетные записи хранения и используются набор шкалы VM, связанный с подсетью для нашего Azure DevOps Builds. Подсеть разрешена перечислена на ограничения сети учетной записи хранилища, а контейнеры, удерживающие файл состояния, также являются RBAC ограничивается SPN, связанным с сервисным подключением DEVOPS. Это значит, Только наши трубопроводы DevOps могут взаимодействовать с нашим государством террафора И поэтому нам нужен лазурный трубопровод для выполнения разблокировки для нас — так что мы можем аутентифицироваться и выполнять в соответствии с правильным контекстом безопасности.

Это довольно просто, единственное требование здесь состоит в том, чтобы нарушить аренду на блоколе состояния файла, которое может быть достигнуто с помощью задачи AzureCli. Используя этот тип задач, аутентификация выполняется через указанное сервисное соединение, которое выполняет управление токеном и позволяет получить доступ к RBAC ограниченный контейнер Отказ

parameters:
- name : TerraformStateFile
  displayName: Terraform State File (e.g. whatever.statefile.tfstate)
  type: string

- name: ServiceConnectionName
  default: YourServiceConnectionDefault
  displayName: The name of the service connection that gives access to the storage account for the state file
  type: string

- name: StorageAccountName
  default: YourStorageDefault
  displayName: The name of the storage account that holds the Terraform state files
  type: string

trigger: none

steps:
  - task: AzureCLI@2
    displayName: "Break lease on terraform state"
    name: BreakLease
    inputs:
      azureSubscription: ${{ parameters.ServiceConnectionName }}
      scriptType: "pscore"
      scriptLocation: "inlineScript"
      inlineScript: "az storage blob lease break --container-name 'terraform' --blob-name '${{ parameters.TerraformStateFile }}' --account-name '${{ parameters.StorageAccountName }}'"

NB: Имя контейнера жесткодируется на «Терраформ» В этом примере вы можете параметризировать или установить для вас, по умолчанию?

Теперь любая члена команды могут запускать трубопровод для сброса состояния, не требуя никого прямого доступа к учетной записи хранилища.

Оригинал: «https://dev.to/dylanmorley/azure-devops-secure-reset-of-terraform-state-3p0f»