2017-05-14 5 views
1

packer를 사용하여 빌드 된 사용자 지정 이미지 (일명 ami)에서 두 개 이상의 azure vms를 배포하는 데 문제가 있습니다.기본 압축기 이미지에서 1 개 이상의 azure vm 배포

여기 기본 이미지 만들 내 포장 스크립트입니다 : 이제

{ 
    "builders": [ 
    { 
     "type": "azure-arm", 
     "client_id": "CHANGE_ME", 
     "client_secret": "CHANGE_ME", 
     "object_id": "CHANGE_ME", 
     "subscription_id": "CHANGE_ME", 
     "tenant_id": "CHANGE_ME", 
     "resource_group_name": "packerrgvm", 
     "storage_account": "packerrgvm", 
     "capture_container_name": "images", 
     "capture_name_prefix": "packer", 
     "os_type": "Linux", 
     "image_publisher": "Canonical", 
     "image_offer": "UbuntuServer", 
     "image_sku": "16.04.0-LTS", 
     "azure_tags": { 
     "dept": "engineering" 
     }, 
     "location": "westeurope", 
     "vm_size": "Standard_A2" 
    } 
    ], 
    "provisioners": [ 
    { 
     "type": "shell", 
     "inline": ["do sth interesting here"] 
    }, 
    { 
     "type": "shell", 
     "inline": [ 
     "sudo /usr/sbin/waagent -force -deprovision+user && export HISTSIZE=0 && sync" 
     ] 
    } 
    ] 
} 

을, 나는 ARM 템플릿을 사용하여 새 VM을 구축하기 위해 노력하고있어. 내 템플릿에는 성공적인 빌드 후에 packer에서 제공 한 imageName, imageUri 및 vhdUri이 포함되어 있습니다. vnets, 네트워크 인터페이스 등 ommited :

{ 
    "apiVersion": "2016-03-30", 
    "type": "Microsoft.Compute/virtualMachines", 
    "name": "[variables('workerVM').machine.name]", 
    "location": "[resourceGroup().location]", 
    "properties": { 
    "hardwareProfile": { 
     "vmSize": "[variables('workerVM').machine.size]" 
    }, 
    "storageProfile": { 
     "osDisk": { 
     "osType": "Linux", 
     "name": "[variables('workerVM').machine.imageName]", 
     "createOption": "FromImage", 
     "image": { 
      "uri": "[variables('workerVM').machine.imageUri]" 
     }, 
     "vhd": { 
      "uri": "[variables('workerVM').machine.vhdUri]" 
     }, 
     "caching": "ReadWrite" 
     } 
    }, 
    "osProfile": { 
     "computerName": "[variables('workerVM').machine.name]", 
     "adminUsername": "[variables('workerVM').machine.adminUsername]", 
     "adminPassword": "[variables('workerVM').machine.adminPassword]" 
    }, 
    "networkProfile": { 
     "networkInterfaces": [ 
     { 
      "id": "[resourceId('Microsoft.Network/networkInterfaces', variables('workerVM').network.nicName)]" 
     } 
     ] 
    }, 
    "diagnosticsProfile": { 
     "bootDiagnostics": { 
     "enabled": false 
     } 
    }, 
    "provisioningState": 0 
    } 
} 

처음 배포 할 때 작동합니다. Hovewer, 나는 완전히 내 자원 그룹을 제거하고 다시 한번, 나는 다음과 같은 오류 얻을 VM을 배포 할 경우에도 :

error: The resource operation completed with terminal provisioning state 'Failed'. 
error: Blob https://packerrgvm.blob.core.windows.net/vmcontainera1ba96d3-a593-44b9-8c71-1d345ef67a2d/osDisk.a1ba96d3-a593-44b9-8c71-1d345ef67a2d.vhd already exists. Please provide a different blob URI as target for disk 'packer-osDisk.49359f62-5c49-44c1-aed8-4ea1613ab2e9.vhd'. 

은 사용자 정의 AMI는 포장하여이 방법을 구축 사용할 수 있습니까?

+0

이 VM을 배포하기 전에 'osDisk.a1ba96d3-a593-44b9-8c71-1d345ef67a2d.vhd'리소스가 존재하는지 여부를 다시 확인하십시오. 이 리소스는 VM을 다시 배포하기 전에 성공적으로 삭제되지 않았을 수 있습니다. – Amor

+0

그래, 확실히 삭제되지 않았다. 내 질문에 더 가깝습니다. '어떻게 뒷주석으로 만들어진 단일 기본 이미지에서 1 개 이상의 VM을 만드나요?' – slnowak

답변

0

how do i create more than 1 vm from single base image built with backer

ARM 템플릿을 다시 배포하기 전에 값 vhdUri 변수를 변경할 수 있습니다.

"vhd": { 
    "uri": "[variables('workerVM').machine.vhdUri]" 
} 

당신의 ARM 템플릿의 vhdUri 변수는 다음과 같이 될 수

"variables": { 
    "workerVM": { 
    "machine": { 
     "vhdUri": "reset this uri" 
    } 
} 
+0

그래, 맞아.하지만 내가 뭘 넣어야 해? – slnowak

+0

vhdUri는 https : // [YourAccountName] .blob.core.windows.net/[YourContainerName]/[YourDiskName] .vhd와 같을 수 있습니다. 계정 이름이 구독에 있고 컨테이너 및 BLOB가이 저장 계정에 이미 생성되어 있는지도 확인하십시오. 그렇지 않은 경우 ARM 템플릿을 재배포하기 전에 생성하십시오. – Amor

0

ARM 템플릿에서 포장

{ 
    "type": "Microsoft.Compute/images", 
    "apiVersion": "2016-04-30-preview", 
    "name": "[variables('imageName')]", 
    "location": "[resourceGroup().location]", 
    "properties": { 
    "storageProfile": { 
     "osDisk": { 
     "osType": "Windows", 
     "osState": "Generalized", 
     "blobUri": "[parameters('your_image_uri_generated_by_packer')]", 
     "storageAccountType": "Standard_LRS" 
     } 
    } 
    } 
}, 

그리고 수정 저장에 의해 생성 된 이미지의 URI를 사용하여 스토리지 리소스 아래에 추가 이 리소스를 사용하기 위해 Microsoft.Compute/virtualMachines의 프로필 속성

"storageProfile": { 
    "imageReference": { 
     "id": "[resourceId('Microsoft.Compute/images', variables('imageName'))]" 
     } 
},