Terraform Quick Start 리포지토리 빌드 1부 - Azure 원격 상태 부트스트래핑
보관 상태
인프라를 관리하고 변경 사항을 감지할 수 있으려면 Terraform이 현재 업무state를 저장할 장소가 필요합니다. 가장 쉬운 솔루션은 상태 파일locally을 저장하는 것이지만 이는 CI/CD 파이프라인에 대한 옵션이 아닙니다. 운 좋게도 선택할 수 있는 bunch of backends이 있습니다.
그러나 이것은 상태 파일을 보관할 수 있는 스토리지 백엔드에 액세스하지 않고는 Terraform을 사용하여 스토리지 백엔드를 배포할 수 없는 닭과 달걀 상황으로 이어집니다.
이두근
지금까지 우리는 주로 Azure를 다루었으므로 필요한 리소스를 생성하기 위해 빠른Bicep 스니펫을 준비하는 것이 합리적이었습니다. 명심해야 할 한 가지는 Bicep이 기본적으로 리소스를
resourceGroup
범위에 배포한다는 사실입니다. 이는 우리가 원하는 것과 정확히 일치하지 않는 리소스 그룹을 이미 생성했음을 의미합니다. 이를 전환하려면 subscription
수준(어쨌든 우리에게 일반적으로 제공되는 것임)에서 시작하고 리소스 그룹을 만들고 그 다음에 원하는 다른 것이 있어야 합니다. 권장되는 방법은 RG에 대한 기본 템플릿을 선언하고 다른 모든 좋은 항목으로 모듈을 참조하는 것입니다.targetScope = 'subscription' // switching scopes here
// declaring some parameters so we can easier manage the pipeline later
@maxLength(13)
@minLength(2)
param prefix string
param tfstate_rg_name string = '${prefix}-terraformstate-rg'
@allowed([
'australiaeast'
])
param location string
// creating resource group
resource rg 'Microsoft.Resources/resourceGroups@2021-01-01' = {
name: tfstate_rg_name
location: location
}
// Deploying storage account via module reference
module stg './tfstate-storage.bicep' = {
name: 'storageDeployment'
scope: resourceGroup(rg.name)
params: {
storageAccountName: '${prefix}statetf${take(uniqueString(prefix),4)}'
location: location
}
}
여기서 모듈 코드가 중요합니다.
param storageAccountName string
param location string
param containerName string = 'tfstate'
output storageAccountName string = storageAccountName
output containerName string = containerName
resource storageAccount_resource 'Microsoft.Storage/storageAccounts@2021-06-01' = {
name: storageAccountName
location: location
sku: {
name: 'Standard_LRS'
}
kind: 'StorageV2'
properties: {
allowBlobPublicAccess: true
networkAcls: {
bypass: 'AzureServices'
virtualNetworkRules: []
ipRules: []
defaultAction: 'Allow'
}
supportsHttpsTrafficOnly: true
encryption: {
services: {
blob: {
keyType: 'Account'
enabled: true
}
}
keySource: 'Microsoft.Storage'
}
accessTier: 'Hot'
}
}
resource blobService_resource 'Microsoft.Storage/storageAccounts/blobServices@2021-06-01' = {
parent: storageAccount_resource
name: 'default'
properties: {
cors: {
corsRules: []
}
deleteRetentionPolicy: {
enabled: false
}
}
}
resource storageContainer_resource 'Microsoft.Storage/storageAccounts/blobServices/containers@2021-06-01' = {
parent: blobService_resource
name: containerName
properties: {
immutableStorageWithVersioning: {
enabled: false
}
defaultEncryptionScope: '$account-encryption-key'
denyEncryptionScopeOverride: false
publicAccess: 'None'
}
}
모든 자산을 리포지토리에 집어넣고 거기에서 구동하기를 원한다고 가정하면 간단한 ADO 배포 파이프라인도 작성하는 것이 좋습니다. 이전에 we’d have to opt for
AzureCLI
작업을 수행하고 다음과 같이 합니다.- task: AzureCLI@2
inputs:
azureSubscription: $(azureServiceConnection)
scriptType: bash
scriptLocation: inlineScript
inlineScript: |
# steps to create RG
az deployment group create --resource-group $(resourceGroupName) --template-file bicep/main.bicep
운 좋게도 작업이 완료되었으며 agent version 3.199 ,
AzureResourceManagerTemplateDeployment
로 시작하여 기본적으로 Bicep 배포를 지원합니다! 불행하게도 ADO 호스트 에이전트를 테스트할 당시에는 여전히 버전 3.198이었기 때문에 수동으로 Bicep을 ARM으로 속이고 컴파일해야 했습니다. 그러나 최종 파이프라인은 다음과 같습니다.trigger: none # intended to run manually
name: Deploy TF state backend via Bicep
pool:
vmImage: 'ubuntu-latest'
variables:
- group: "bootstrap-state-variable-grp" # define variable groups to point to correct subscription
steps:
- task: AzureResourceManagerTemplateDeployment@3
inputs:
deploymentScope: 'Subscription'
azureResourceManagerConnection: $(azureServiceConnection)
subscriptionId: $(targetSubscriptionId)
location: $(location)
templateLocation: 'Linked Artifact'
csmFile: '$(System.DefaultWorkingDirectory)/bicep/main.bicep' # on dev machine, compile into ARM (az bicep build --file .\bicep\main.bicep) and use that instead until agent gets update to 3.199.x
deploymentMode: 'Incremental'
deploymentOutputs: 'storageAccountParameters'
overrideParameters: '-prefix $(prefix) -location $(location)'
ADO를 통해 실행하면 새로운 리소스 그룹 내에서 사용 가능한 저장소 계정이 생성됩니다.
여기에서 어디로
기반을 처리한 후에는 이 단계의 출력을 캡처하고(주로 저장소 계정 이름에 약간의 임의성이 있으므로 관심이 있음) Terraform 백엔드 공급자에게 제공할 수 있어야 합니다. 이 시리즈의 다음 부분에서 다룰 것입니다.
결론
이 공간의 기존 솔루션은 지금까지 작업을 수행하기 위해 PowerShell 또는
az cli
에 의존했습니다. 여전히 가능하지만 특히 출력을 쿼리하려는 경우 부피가 커질 수 있습니다. 이제 Bicep 지원이 AzureResourceManagerTemplateDeploymentV3
에 직접 도달하므로 이 as a recommended approach을 볼 수 있습니다.
Reference
이 문제에 관하여(Terraform Quick Start 리포지토리 빌드 1부 - Azure 원격 상태 부트스트래핑), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/timur_kh/building-terraform-quick-start-repo-part-1-bootstrapping-azure-remote-state-3lfe텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)