Azure에서 VM 이미지를 관리하고 강화하는 6가지 간단한 방법
VM 이미지를 관리하는 것은 악몽일 수 있습니다.다음은 Azure에서 틈새 없이 이미지를 구축, 공유, 테스트, 복제하는 6가지 간단한 방법입니다.보상으로 이벤트 구동 구조를 바탕으로 이미지 알림을 구축하는 방법도 알 수 있습니다.
문제
100개 이상의 VM을 관리하든 1000개 이상의 구축 및 강화된 VM을 관리하든 이미지를 수동으로 관리하시겠습니까?만약 네가 이렇게 한다면, 이것은 상당히 비싸고, 검출하기 어려운 오류와 잠재적인 안전 결함을 초래한다는 것을 알게 될 것이다.
다음은 내가 어떻게 나의 고객을 위해 이 문제를 해결할 것인가이다.Azure를 위한 이미지 관리 프로세스를 만듭니다.
1. Azure image Builder를 사용하여 이미지 만들기
Azure Image Builder는 Azure CLI를 사용하여 사용자 정의 이미지를 만들 수 있는 서비스입니다.JSON 템플릿 기반 이미지 생성의 예는 다음과 같습니다.
{
"type": "Microsoft.VirtualMachineImages/imageTemplates",
"apiVersion": "2019-05-01-preview",
"location": "<region>",
"dependsOn": [],
"tags": {
"imagebuilderTemplate": "ubuntu1804",
"userIdentity": "enabled"
},
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"<imgBuilderId>": {}
}
},
"properties": {
"buildTimeoutInMinutes" : 80,
"vmProfile":
{
"vmSize": "Standard_D1_v2",
"osDiskSizeGB": 30
},
"source": {
"type": "PlatformImage",
"publisher": "Canonical",
"offer": "UbuntuServer",
"sku": "18.04-LTS",
"version": "latest"
},
"customize": [
{
"type": "Shell",
"name": "RunScriptFromSource",
"scriptUri": "https://raw.githubusercontent.com/danielsollondon/azvmimagebuilder/master/quickquickstarts/customizeScript.sh"
}
],
"distribute":
[
]
}
}
나는 원래의 틀을 삭감해야 한다. 왜냐하면 그것은 상당히 길기 때문이다.여기서 너는 완전한 예를 찾을 수 있다.
ARM 템플릿은 다음과 같은 속성을 포함하는 매우 간단합니다.
Azure Image Builder는 Azure CLI를 사용하여 사용자 정의 이미지를 만들 수 있는 서비스입니다.JSON 템플릿 기반 이미지 생성의 예는 다음과 같습니다.
{
"type": "Microsoft.VirtualMachineImages/imageTemplates",
"apiVersion": "2019-05-01-preview",
"location": "<region>",
"dependsOn": [],
"tags": {
"imagebuilderTemplate": "ubuntu1804",
"userIdentity": "enabled"
},
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"<imgBuilderId>": {}
}
},
"properties": {
"buildTimeoutInMinutes" : 80,
"vmProfile":
{
"vmSize": "Standard_D1_v2",
"osDiskSizeGB": 30
},
"source": {
"type": "PlatformImage",
"publisher": "Canonical",
"offer": "UbuntuServer",
"sku": "18.04-LTS",
"version": "latest"
},
"customize": [
{
"type": "Shell",
"name": "RunScriptFromSource",
"scriptUri": "https://raw.githubusercontent.com/danielsollondon/azvmimagebuilder/master/quickquickstarts/customizeScript.sh"
}
],
"distribute":
[
]
}
}
나는 원래의 틀을 삭감해야 한다. 왜냐하면 그것은 상당히 길기 때문이다.여기서 너는 완전한 예를 찾을 수 있다.ARM 템플릿은 다음과 같은 속성을 포함하는 매우 간단합니다.
이점
템플릿과 프로세스 자체는 이해하기 쉽고 Azure DevOps와 쉽게 통합할 수 있습니다.
결점
이미지 생성기는 여전히 심사 중이기 때문에 생산에서 사용하는 것을 권장하지 않습니다.Hashicorp Packer에 비해 설정이 어려울 수 있습니다.(다음 절에서 차단기를 사용하는 방법을 설명합니다.)
2. Hashicorp 패키지를 사용하여 이미지 구축
Hashicorp Packer는 JSON 템플릿을 기반으로 사용자 정의 이미지를 구축할 수 있는 다중 플랫폼 솔루션입니다.JSON 템플릿의 구조가 양호하고 이해하기 쉬운 대상 모델을 바탕으로 한다.JSON 템플릿은 통신기, 구축기, 공급기, 후처리기 등 세 개의 루트만 있습니다.
Here JSON 템플릿을 찾을 수 있습니다.
JSON 템플릿은 미리 설치된 NGINX 웹 서버와 다른 업데이트를 사용하여 Ubuntu의 VHD 이미지를 만듭니다.여기서 너는 다른 템플릿을 많이 찾을 수 있다.
packer를 설정하려면 Chocolatie package manager를 사용합니다.
choco install packer -y
다음 명령을 사용하여 JSON 템플릿을 실행할 수 있습니다.
packer build <path/your/template.json>
템플릿을 실행하기 전에 다음과 같은 적절한 권한이 있는 관리 ID 또는 서비스 주체를 작성해야 합니다.
az ad sp create-for-rbac -n "ImageContributor"
--role contributor `
--scopes /subscriptions/<subscription_id> `
--sdk-auth > az-principal.auth
이 명령은clientId,clientSecret,tenantId,subscriptionId 및 기타 필드가 있는 JSON 파일을 자동으로 만듭니다.
이점
패키지와 JSON 템플릿은 이해하기 쉽습니다.환경을 빠르게 설정하고 이미지 구축을 시작할 수 있습니다.또 하나의 강력한 지역사회가 있다.또한 Packer는 여러 클라우드 공급업체를 지원합니다.
결점
나는 어떤 심각한 결점도 발견하지 못했다.그러나 이미지를 구축할 때 패키지는 이미지 작업에 필요한 디스크를 항상 제거합니다.예를 들어, 이미지를 복사하는 데 사용됩니다.
3. 사진 공유
Azure에서 이미지를 공유하려면 공유 이미지 라이브러리를 사용할 수 있습니다.다음을 수행할 수 있습니다.
- 이미지 정의 만들기
- 이미지 버전 유지
- 이미지 공유
예를 들어, Azure 구독, 리소스 그룹, 임차인 간에 이미지를 공유할 수 있습니다.
현재 장면에서 사용자 그룹이나 단일 사용자/서비스 주체를 만들 수 있으며, 이 공유 이미지 라이브러리에만 참여자 권한을 할당할 수 있습니다.
az ad sp create-for-rbac -n "ImageContributor"
--role contributor `
--scopes /subscriptions/<subscr-id>/resourceGroups/sig-we-rg/providers/Microsoft.Compute/galleries/testsig
따라서 이 그룹에서 온 사용자는 서로 다른 구독에서 이 공유 이미지 라이브러리의 Ubuntu 이미지를 바탕으로 가상 머신을 만들 수 있습니다.
az vm create `
--resource-group myResourceGroup `
--name UbuntuVM`
--image "/subscriptions/<subscr-id>/resourceGroups/sig-we-rg/providers/Microsoft.Compute/galleries/testsig/images/ubuntu-server-image-def/versions/1.0.0" \
--admin-username azureuser \
--generate-ssh-keys
이점
Azure 공유 이미지 라이브러리를 사용하면 조직 내에서 이미지를 쉽게 구축, 공유, 관리, 사용자 정의할 수 있습니다.SIG에는 Azure CLI가 있으므로 이미지 배포를 쉽게 자동화할 수 있습니다.
결점
이미지는 공유 액세스 라이브러리에 유지됩니다.그래서 물리적으로 그곳에 머물렀다.따라서 구독자 간에 공유할 때, 구독자마다 단독으로 변경하거나 삭제할 수 없습니다.
4. 이미지 복사
이미지를 복사하면 한 구독에서 다른 구독으로, 또는 한 자원 그룹에서 다른 자원 그룹으로 이미지를 전달할 수 있습니다.복사된 모든 이미지는 서로 독립적입니다.Azure Image copy extension을 사용하여 이미지를 복사하거나 Go를 사용하여 수동으로 복사할 수 있습니다.아래의 예를 봅시다.
Az Copy Extension을 사용하여 이미지 복사
구독 간에 이미지를 복사하기 위해 Az Image copy extension을 사용합니다.이것은 자원 그룹 a에서 새 이미지를 만듭니다.
복제 확장 설치:
az extension add --name image-copy-extension
복사 명령:
az image copy --source-resource-group Azure-Resource-Group-B `
--source-object-name image-version-1.0 `
--target-resource-group Azure-Resource-Group-A `
--target-location westeurope `
--target-subscription 111111-2222-2222-0000-0000000 ` # Subscription A
--cleanup
중요했어관리되는 이미지를 생성하면 Packer는 자동으로 디스크를 제거합니다.
이점
Az Image Copy extension은 사용하기 쉽고 자동화됩니다.
결점
이미지에 관리되는 CD가 있어야 합니다. 그렇지 않으면 복제 프로세스가 실패하고 자원을 찾을 수 없음 오류 메시지가 표시됩니다.
이미지 수동 복사
Az Copy Image Extension을 사용할 수 없는 경우 스토리지 계정에 VHD 이미지를 생성하여 다른 대상 스토리지 계정으로 복사할 수 있습니다.
프로세스 워크플로우:
choco install packer -y
packer build <path/your/template.json>
az ad sp create-for-rbac -n "ImageContributor"
--role contributor `
--scopes /subscriptions/<subscription_id> `
--sdk-auth > az-principal.auth
Azure에서 이미지를 공유하려면 공유 이미지 라이브러리를 사용할 수 있습니다.다음을 수행할 수 있습니다.
- 이미지 정의 만들기
- 이미지 버전 유지
- 이미지 공유
예를 들어, Azure 구독, 리소스 그룹, 임차인 간에 이미지를 공유할 수 있습니다.
현재 장면에서 사용자 그룹이나 단일 사용자/서비스 주체를 만들 수 있으며, 이 공유 이미지 라이브러리에만 참여자 권한을 할당할 수 있습니다.
az ad sp create-for-rbac -n "ImageContributor"
--role contributor `
--scopes /subscriptions/<subscr-id>/resourceGroups/sig-we-rg/providers/Microsoft.Compute/galleries/testsig
따라서 이 그룹에서 온 사용자는 서로 다른 구독에서 이 공유 이미지 라이브러리의 Ubuntu 이미지를 바탕으로 가상 머신을 만들 수 있습니다.az vm create `
--resource-group myResourceGroup `
--name UbuntuVM`
--image "/subscriptions/<subscr-id>/resourceGroups/sig-we-rg/providers/Microsoft.Compute/galleries/testsig/images/ubuntu-server-image-def/versions/1.0.0" \
--admin-username azureuser \
--generate-ssh-keys
이점
Azure 공유 이미지 라이브러리를 사용하면 조직 내에서 이미지를 쉽게 구축, 공유, 관리, 사용자 정의할 수 있습니다.SIG에는 Azure CLI가 있으므로 이미지 배포를 쉽게 자동화할 수 있습니다.
결점
이미지는 공유 액세스 라이브러리에 유지됩니다.그래서 물리적으로 그곳에 머물렀다.따라서 구독자 간에 공유할 때, 구독자마다 단독으로 변경하거나 삭제할 수 없습니다.
4. 이미지 복사
이미지를 복사하면 한 구독에서 다른 구독으로, 또는 한 자원 그룹에서 다른 자원 그룹으로 이미지를 전달할 수 있습니다.복사된 모든 이미지는 서로 독립적입니다.Azure Image copy extension을 사용하여 이미지를 복사하거나 Go를 사용하여 수동으로 복사할 수 있습니다.아래의 예를 봅시다.
Az Copy Extension을 사용하여 이미지 복사
구독 간에 이미지를 복사하기 위해 Az Image copy extension을 사용합니다.이것은 자원 그룹 a에서 새 이미지를 만듭니다.
복제 확장 설치:
az extension add --name image-copy-extension
복사 명령:
az image copy --source-resource-group Azure-Resource-Group-B `
--source-object-name image-version-1.0 `
--target-resource-group Azure-Resource-Group-A `
--target-location westeurope `
--target-subscription 111111-2222-2222-0000-0000000 ` # Subscription A
--cleanup
중요했어관리되는 이미지를 생성하면 Packer는 자동으로 디스크를 제거합니다.
이점
Az Image Copy extension은 사용하기 쉽고 자동화됩니다.
결점
이미지에 관리되는 CD가 있어야 합니다. 그렇지 않으면 복제 프로세스가 실패하고 자원을 찾을 수 없음 오류 메시지가 표시됩니다.
이미지 수동 복사
Az Copy Image Extension을 사용할 수 없는 경우 스토리지 계정에 VHD 이미지를 생성하여 다른 대상 스토리지 계정으로 복사할 수 있습니다.
프로세스 워크플로우:
az extension add --name image-copy-extension
az image copy --source-resource-group Azure-Resource-Group-B `
--source-object-name image-version-1.0 `
--target-resource-group Azure-Resource-Group-A `
--target-location westeurope `
--target-subscription 111111-2222-2222-0000-0000000 ` # Subscription A
--cleanup
이점
현재 이미지 처리 워크플로우는 완전히 사용자 정의되어 있습니다.따라서 언제든지 변경할 수 있습니다.또한 Az 이미지 복사 확장이 작동하지 않을 때도 유용합니다.예를 들어, 이미지를 생성할 때 관리되는 디스크를 제거할 때
결점
다음과 같은 모든 워크플로우 단계를 구현해야 합니다.
- creating VHD
- generating and managing SAS token
- copying an image
- cleaning up
- converting an image
5, 이미지 및 디스크 변환
VHD 이미지를 관리형 디스크로 변환하거나 관리형 디스크를 VHD 이미지로 변환하는 작업입니다.이미지 복사 과정에서 Azure Shared Image Gallery를 사용하여 전체 조직에서 이미지를 배포해야 할 때, 그리고 새 가상 시스템을 시작해야 할 때 유용합니다.
또한 일부 구형 VHD가 있고 업데이트를 설치하고 자동 백업을 설정하며 가용성 세트 및 가용성 영역을 사용해야 할 때도 유용합니다.
Here는 관리되는 이미지의 장점 목록입니다.
VHD 이미지를 관리형 디스크로 변환
# Provide the subscription Id where Managed Disks will be created
$subscriptionId = '00000-00000-0000-0000-0000000'
# Provide the name of your resource group where Managed Disks will be created.
$resourceGroupName ='HBI'
# Provide the name of the Managed Disk
$diskName = 'image-test-disk'
# The Disk It should be greater than the VHD file size.
$diskSize = '130'
# Storage LRS. Options: Premium_LRS, Standard_LRS, etc
$storageType = 'Premium_LRS'
# Set Azure region (e.g. westus, westeurope), Ensure that location of the VHD image (alongside with Storage Account),
# and future Managed Disk is the same.
$location = 'westeurope'
# Set URI of the VHD file (page blob) in a storage account.
$sourceVHDURI = 'https://imagesstorage.blob.core.windows.net/test-image-disk.vhd'
# Set the Resource Id of the Source storage account where VHD file is stored. You can avoid it if VHD in the same subscription
$storageAccountId = '/subscriptions/subscription-id/resourceGroups/test-rg/providers/Microsoft.Storage/storageAccounts/imagesstorage'
#Set the context to the subscription Id where Managed Disk will be created
Select-AzSubscription -SubscriptionId $SubscriptionId
$diskConfig = New-AzDiskConfig -AccountType $storageType -Location $location -CreateOption Import -StorageAccountId $storageAccountId -SourceUri $sourceVHDURI
New-AzDisk -Disk $diskConfig -ResourceGroupName $resourceGroupName -DiskName $diskName
관리되는 디스크를 관리되는 이미지로 변환
$rgName = "HBI"
$location = "westeurope"
$imageName = "boriszn-test-imagefromdisk"
# Get disk
$disk = Get-AzDisk -ResourceGroupName 'HBI' -DiskName 'image-test-disk'
$diskId = $disk.Id
# Create Managed Image Config with Managed Disk Info
# OS Types (Linux, Windows)
$imageConfig = New-AzImageConfig -Location $location
$imageConfig = Set-AzImageOsDisk -Image $imageConfig -OsState Generalized -OsType Linux -ManagedDiskId $diskId
# Create the image.
$image = New-AzImage -ImageName $imageName -ResourceGroupName $rgName -Image $imageConfig
이점
이 두 가지 cmdlet을 사용하면 서로 다른 구독과 자원 그룹을 뛰어넘어 Azure 공유 이미지에 이미지를 전달할 수 있습니다.
결점
변환 프로세스가 복잡할 수 있습니다. 일부 이미지는 유행이 지났을 수도 있고 변환 프로세스가 실패할 수도 있습니다.
6. 테스트 이미지
이미지를 테스트하려면 이미지 라이브러리에서 새 가상 머신을 시작하고 이미지 정의를 사용하십시오
az vm create `
--resource-group container-image-rg `
--name vm-test `
--image "/subscriptions/<subscription-id>/resourceGroups/container-image-rg/providers/Microsoft.Compute/galleries/test-gallery/images/image-test-def" `
--generate-ssh-keys
이점
명령과 과정 자체는 매우 간단하다.
결점
JSON 구성에 특정 소프트웨어와 서비스가 제대로 설치되어 있는지 확인하지 않습니다.따라서 이 논리는 반드시 단독으로 실현되어야 한다.
이미지 게시/하위 시스템 개념(상금)
여러 구독자나 자원 그룹에 걸쳐 이미지를 관리하는 것은 어려울 수 있습니다. 특히 이미지의 새로운 버전을 끊임없이 생성하거나 자동화된 프로세스를 통해 새로운 가상 머신을 시작할 때입니다.
이 경우 새 이미지를 만들 때 다른 구성 요소를 알리는 알림 시스템을 구축해야 합니다. Azure 공유 이미지 라이브러리에 새 버전이나 이미지 정의가 표시됩니다.필터가 있는 Azure 이벤트 격자를 사용하여 쉽게 만들 수 있습니다.
이벤트 격자, 대기열, Webhook, Azure 서비스 버스를 사용하여 메시지를 대상 구성 요소here에 전달하는 방법을 볼 수 있습니다.
결론
그렇습니다.이러한 방법을 바탕으로 Azure DevOps에서 이미지 강화 및 관리 파이프를 쉽게 설정할 수 있습니다.
Reference
이 문제에 관하여(Azure에서 VM 이미지를 관리하고 강화하는 6가지 간단한 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/boriszn/6-easy-ways-to-manage-and-harden-vm-images-in-azure-30e8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
# Provide the subscription Id where Managed Disks will be created
$subscriptionId = '00000-00000-0000-0000-0000000'
# Provide the name of your resource group where Managed Disks will be created.
$resourceGroupName ='HBI'
# Provide the name of the Managed Disk
$diskName = 'image-test-disk'
# The Disk It should be greater than the VHD file size.
$diskSize = '130'
# Storage LRS. Options: Premium_LRS, Standard_LRS, etc
$storageType = 'Premium_LRS'
# Set Azure region (e.g. westus, westeurope), Ensure that location of the VHD image (alongside with Storage Account),
# and future Managed Disk is the same.
$location = 'westeurope'
# Set URI of the VHD file (page blob) in a storage account.
$sourceVHDURI = 'https://imagesstorage.blob.core.windows.net/test-image-disk.vhd'
# Set the Resource Id of the Source storage account where VHD file is stored. You can avoid it if VHD in the same subscription
$storageAccountId = '/subscriptions/subscription-id/resourceGroups/test-rg/providers/Microsoft.Storage/storageAccounts/imagesstorage'
#Set the context to the subscription Id where Managed Disk will be created
Select-AzSubscription -SubscriptionId $SubscriptionId
$diskConfig = New-AzDiskConfig -AccountType $storageType -Location $location -CreateOption Import -StorageAccountId $storageAccountId -SourceUri $sourceVHDURI
New-AzDisk -Disk $diskConfig -ResourceGroupName $resourceGroupName -DiskName $diskName
$rgName = "HBI"
$location = "westeurope"
$imageName = "boriszn-test-imagefromdisk"
# Get disk
$disk = Get-AzDisk -ResourceGroupName 'HBI' -DiskName 'image-test-disk'
$diskId = $disk.Id
# Create Managed Image Config with Managed Disk Info
# OS Types (Linux, Windows)
$imageConfig = New-AzImageConfig -Location $location
$imageConfig = Set-AzImageOsDisk -Image $imageConfig -OsState Generalized -OsType Linux -ManagedDiskId $diskId
# Create the image.
$image = New-AzImage -ImageName $imageName -ResourceGroupName $rgName -Image $imageConfig
이미지를 테스트하려면 이미지 라이브러리에서 새 가상 머신을 시작하고 이미지 정의를 사용하십시오
az vm create `
--resource-group container-image-rg `
--name vm-test `
--image "/subscriptions/<subscription-id>/resourceGroups/container-image-rg/providers/Microsoft.Compute/galleries/test-gallery/images/image-test-def" `
--generate-ssh-keys
이점
명령과 과정 자체는 매우 간단하다.
결점
JSON 구성에 특정 소프트웨어와 서비스가 제대로 설치되어 있는지 확인하지 않습니다.따라서 이 논리는 반드시 단독으로 실현되어야 한다.
이미지 게시/하위 시스템 개념(상금)
여러 구독자나 자원 그룹에 걸쳐 이미지를 관리하는 것은 어려울 수 있습니다. 특히 이미지의 새로운 버전을 끊임없이 생성하거나 자동화된 프로세스를 통해 새로운 가상 머신을 시작할 때입니다.
이 경우 새 이미지를 만들 때 다른 구성 요소를 알리는 알림 시스템을 구축해야 합니다. Azure 공유 이미지 라이브러리에 새 버전이나 이미지 정의가 표시됩니다.필터가 있는 Azure 이벤트 격자를 사용하여 쉽게 만들 수 있습니다.
이벤트 격자, 대기열, Webhook, Azure 서비스 버스를 사용하여 메시지를 대상 구성 요소here에 전달하는 방법을 볼 수 있습니다.
결론
그렇습니다.이러한 방법을 바탕으로 Azure DevOps에서 이미지 강화 및 관리 파이프를 쉽게 설정할 수 있습니다.
Reference
이 문제에 관하여(Azure에서 VM 이미지를 관리하고 강화하는 6가지 간단한 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/boriszn/6-easy-ways-to-manage-and-harden-vm-images-in-azure-30e8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
그렇습니다.이러한 방법을 바탕으로 Azure DevOps에서 이미지 강화 및 관리 파이프를 쉽게 설정할 수 있습니다.
Reference
이 문제에 관하여(Azure에서 VM 이미지를 관리하고 강화하는 6가지 간단한 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/boriszn/6-easy-ways-to-manage-and-harden-vm-images-in-azure-30e8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)