✕ סגור 
צור קשר
תודה על ההתעניינות .

Thank you! Your submission has been received!

Oops! Something went wrong while submitting the form

איך ליצור Custom Image ב-Azure

אביחי חג'ג'
|
בינונית
|
Jan 11, 2018
להרשמה
לניוזלטר

שלום לכולם,

במאמר קצר זה אני הולך להראות לכם איך ליצור Golden Image מותאם אישית ואיך “להפיץ” באופן פשוט כולל הכנסה לדומיין בעזרת סקריפט.למי שלא מכיר -Golden Image מאפשר ליצור Template (תבנית) של מערכת הפעלה עם כל התוכנות, הגדרות שביצעתם ולהפיץ אותה לשרתים חדשים.פלטפורמת Azure מאפשרת  ליצור Golden Image כתבנית בסיס בהתאם לתצורת העבודה בארגון לטובת יצירת מכונות וירטואליות חדשות במקום מתבנית נקייה של Windows/Linux ב-Azure Marketplace.חלק מיתרונות ביצירת Image מותאם אישית:

  1. חוסך זמן בהפצת שרת חדש.
  2. מבטיח עקביות ומונע שינוי תצורה חוזרים.
  3. מקצר את תהליכים העדכונים.
  4. מונע סיכונים והבדלי גרסאות.

איך מייצרים Image מותאם אישית

  • הכנת שרת ל-Sysprep.
  • יצירת Capture מ-Azure Portal.
  • יצירת מחשב חדש מ-Custom Image והכנסה לדומיין בעזרת PowerShell.

שלב I – הכנת שרת ל-Sysprep

  1. הקמת שרת עם מערכת הפעלה רצויה וביצוע כל התוכנות וההגדרות בהתאם למדיניות ותצורת העבודה בארגון.
  2. הרצת Sysprep לאחר סיום כל ההגדרות לסגירת ה-Template.
  3. יש לגשת לנתיב הבא ולהריץ את התוכנה Sysprep.exe%windir%\system32\sysprep
  4. בחלון שנפתח יש לסמן Generalize ולבחור ב-Shutdown תחת Shutdown Options. 

Sysprep

שלב II – יצירת Capture מ-Azure Portal

בוחרים את השרת הרצוי (השרת שביצענו Sysprep בשלב ה-I) ולוחצים על Capture

CaptureVM-01

נותנים שם ל-Image ולאיזה ResourceGroup לשייך אותובנוסף, יש אפשרות לסמן ב-V שלאחר סיום ה-Capture תתבצע תהליך מחיקה אוטומטית ל-VM.

CaptureVM-02

הערה: שימו לב שיש לבצע Sysprep (ביצענו בשלב ה-I) לפני שמריצים Capture.

לאחר סיום ה-Capture נוכל לראות תחת Images את ה-Image שיצרנו ונוכל להתחיל ליצור מכונות חדשות בלחיצה על Create VM

CaptureVM-03

שלב III – יצירת מחשב חדש מ-Custom Image והכנסה לדומיין בעזרת PowerShell.

אני רוצה לשתף אתכם בסקריפט שכתבתי שמאפשר ליצור מכונות חדשות ולהכניס ישירות לדומיין.תהליך זה יעזור לכם בפריסה מהירה של מחשבים ואפשרות לתת למשתמשים מסוימים להרים מכונות חברות בדומיין בצורה קלה ופשוטה.לינק להורדה ישירה של הסקריפט: Deploy Azure VM from Image with Join AD

#Set Parameters

#VM Configuration

$VNName = "<VM Computer Name>"

$ResoureGroup = "<ResourceGroup Name>"

$SizeVM = "<Size of the VM>"

$Location = "<Azure Region Location>"

$VNetName = "<VNET Name>"

$SubnetName = "<Subnet Name>"

$ImageName = "<Image Name to Deploy>"

$ResoureGroupImage = "<ResourceGroup of the image>"

#Join to Domain (Need Domain Admin Credential)

$DomainName = "<Domain Name>"

$DomainJoinAdminName = "<Admin Account - Domain\UserName>"

$DomainJoinPassword = "<Admin Password>"

$OUDN = "<OU Distinguished Name>"

####MAIN Script###

#Get Image ID

$image = Get-AzureRMImage -ImageName:$ImageName -ResourceGroupName:$ResoureGroupImage -ErrorAction:Stop;

if ($Image) {

   #Get VNET

   $vnetDef = Get-AzureRmVirtualNetwork -ResourceGroupName:$ResoureGroup -Name:$VNetName -ErrorAction:Stop;

   #Get Subnet

   $subnet = Get-AzureRmVirtualNetworkSubnetConfig -Name:$SubnetName -VirtualNetwork:$vnetDef -ErrorAction:Stop;

   $nicName = "$VNName-NIC1"

   #Create NIC

   $nic = New-AzureRmNetworkInterface -ResourceGroupName:$ResoureGroup -Location:$Location -Name:$nicName -SubnetId:$subnet.Id -ErrorAction:Stop;

   #Provide Local Admin Credential

   $Cred = Get-Credential -Message:"Please Provide Local Admin User for VM" -ErrorAction:Stop;

   if (!$Cred) {

       Write-Host "Error: Invaild Local Admin Credential (The Windows will be close after 3 seconds)";

       sleep -Seconds:3;

       Exit -1

   }

   #VM Configuration

   $vm = New-AzureRmVMConfig -VMName $VNName -VMSize $SizeVM;

   $vm = Set-AzureRmVMSourceImage -VM $vm -Id $image.Id;

   $vm = Set-AzureRmVMOSDisk -VM $vm  -StorageAccountType standardLRS -DiskSizeInGB 128 -CreateOption FromImage -Caching ReadWrite;

   $vm = Set-AzureRmVMOperatingSystem -VM $vm -Windows -ComputerName $VNName -Credential $Cred -ProvisionVMAgent -EnableAutoUpdate;

   $vm = Add-AzureRmVMNetworkInterface -VM $vm -Id $nic.Id;

   #Create Azure VM

   try {

       New-AzureRmVM -VM $vm -ResourceGroupName $ResoureGroup -Location $Location;

   } catch {

       $ErrorMessage = $_.Exception.Message;

       Write-Host "Failed To Create VM with error $errorMessage (The Windows will be close after 3 seconds)";

       sleep -Seconds:3;

       Exit -1

   }

   #Join to AD with ADExtension

   try {

       Set-AzureRMVMExtension -VMName $VNName -ResourceGroupName $ResoureGroup -Name "JoinAD" -ExtensionType "JsonADDomainExtension" -Publisher "Microsoft.Compute" -TypeHandlerVersion "1.0" -Location $Location -Settings @{ "Name" = $DomainName; "OUPath" = "$OUDN"; "User" = $DomainJoinAdminName; "Restart" = "true"; "Options" = 3} -ProtectedSettings @{ "Password" = $DomainJoinPassword}

   } catch {

       $ErrorMessage = $_.Exception.Message;

       Write-Host "Failed To Join Domain with error $errorMessage";

   }

}

CaptureVM-04

בהצלחה 

שלום לכולם,

במאמר קצר זה אני הולך להראות לכם איך ליצור Golden Image מותאם אישית ואיך “להפיץ” באופן פשוט כולל הכנסה לדומיין בעזרת סקריפט.למי שלא מכיר -Golden Image מאפשר ליצור Template (תבנית) של מערכת הפעלה עם כל התוכנות, הגדרות שביצעתם ולהפיץ אותה לשרתים חדשים.פלטפורמת Azure מאפשרת  ליצור Golden Image כתבנית בסיס בהתאם לתצורת העבודה בארגון לטובת יצירת מכונות וירטואליות חדשות במקום מתבנית נקייה של Windows/Linux ב-Azure Marketplace.חלק מיתרונות ביצירת Image מותאם אישית:

  1. חוסך זמן בהפצת שרת חדש.
  2. מבטיח עקביות ומונע שינוי תצורה חוזרים.
  3. מקצר את תהליכים העדכונים.
  4. מונע סיכונים והבדלי גרסאות.

איך מייצרים Image מותאם אישית

  • הכנת שרת ל-Sysprep.
  • יצירת Capture מ-Azure Portal.
  • יצירת מחשב חדש מ-Custom Image והכנסה לדומיין בעזרת PowerShell.

שלב I – הכנת שרת ל-Sysprep

  1. הקמת שרת עם מערכת הפעלה רצויה וביצוע כל התוכנות וההגדרות בהתאם למדיניות ותצורת העבודה בארגון.
  2. הרצת Sysprep לאחר סיום כל ההגדרות לסגירת ה-Template.
  3. יש לגשת לנתיב הבא ולהריץ את התוכנה Sysprep.exe%windir%\system32\sysprep
  4. בחלון שנפתח יש לסמן Generalize ולבחור ב-Shutdown תחת Shutdown Options. 

Sysprep

שלב II – יצירת Capture מ-Azure Portal

בוחרים את השרת הרצוי (השרת שביצענו Sysprep בשלב ה-I) ולוחצים על Capture

CaptureVM-01

נותנים שם ל-Image ולאיזה ResourceGroup לשייך אותובנוסף, יש אפשרות לסמן ב-V שלאחר סיום ה-Capture תתבצע תהליך מחיקה אוטומטית ל-VM.

CaptureVM-02

הערה: שימו לב שיש לבצע Sysprep (ביצענו בשלב ה-I) לפני שמריצים Capture.

לאחר סיום ה-Capture נוכל לראות תחת Images את ה-Image שיצרנו ונוכל להתחיל ליצור מכונות חדשות בלחיצה על Create VM

CaptureVM-03

שלב III – יצירת מחשב חדש מ-Custom Image והכנסה לדומיין בעזרת PowerShell.

אני רוצה לשתף אתכם בסקריפט שכתבתי שמאפשר ליצור מכונות חדשות ולהכניס ישירות לדומיין.תהליך זה יעזור לכם בפריסה מהירה של מחשבים ואפשרות לתת למשתמשים מסוימים להרים מכונות חברות בדומיין בצורה קלה ופשוטה.לינק להורדה ישירה של הסקריפט: Deploy Azure VM from Image with Join AD

#Set Parameters

#VM Configuration

$VNName = "<VM Computer Name>"

$ResoureGroup = "<ResourceGroup Name>"

$SizeVM = "<Size of the VM>"

$Location = "<Azure Region Location>"

$VNetName = "<VNET Name>"

$SubnetName = "<Subnet Name>"

$ImageName = "<Image Name to Deploy>"

$ResoureGroupImage = "<ResourceGroup of the image>"

#Join to Domain (Need Domain Admin Credential)

$DomainName = "<Domain Name>"

$DomainJoinAdminName = "<Admin Account - Domain\UserName>"

$DomainJoinPassword = "<Admin Password>"

$OUDN = "<OU Distinguished Name>"

####MAIN Script###

#Get Image ID

$image = Get-AzureRMImage -ImageName:$ImageName -ResourceGroupName:$ResoureGroupImage -ErrorAction:Stop;

if ($Image) {

   #Get VNET

   $vnetDef = Get-AzureRmVirtualNetwork -ResourceGroupName:$ResoureGroup -Name:$VNetName -ErrorAction:Stop;

   #Get Subnet

   $subnet = Get-AzureRmVirtualNetworkSubnetConfig -Name:$SubnetName -VirtualNetwork:$vnetDef -ErrorAction:Stop;

   $nicName = "$VNName-NIC1"

   #Create NIC

   $nic = New-AzureRmNetworkInterface -ResourceGroupName:$ResoureGroup -Location:$Location -Name:$nicName -SubnetId:$subnet.Id -ErrorAction:Stop;

   #Provide Local Admin Credential

   $Cred = Get-Credential -Message:"Please Provide Local Admin User for VM" -ErrorAction:Stop;

   if (!$Cred) {

       Write-Host "Error: Invaild Local Admin Credential (The Windows will be close after 3 seconds)";

       sleep -Seconds:3;

       Exit -1

   }

   #VM Configuration

   $vm = New-AzureRmVMConfig -VMName $VNName -VMSize $SizeVM;

   $vm = Set-AzureRmVMSourceImage -VM $vm -Id $image.Id;

   $vm = Set-AzureRmVMOSDisk -VM $vm  -StorageAccountType standardLRS -DiskSizeInGB 128 -CreateOption FromImage -Caching ReadWrite;

   $vm = Set-AzureRmVMOperatingSystem -VM $vm -Windows -ComputerName $VNName -Credential $Cred -ProvisionVMAgent -EnableAutoUpdate;

   $vm = Add-AzureRmVMNetworkInterface -VM $vm -Id $nic.Id;

   #Create Azure VM

   try {

       New-AzureRmVM -VM $vm -ResourceGroupName $ResoureGroup -Location $Location;

   } catch {

       $ErrorMessage = $_.Exception.Message;

       Write-Host "Failed To Create VM with error $errorMessage (The Windows will be close after 3 seconds)";

       sleep -Seconds:3;

       Exit -1

   }

   #Join to AD with ADExtension

   try {

       Set-AzureRMVMExtension -VMName $VNName -ResourceGroupName $ResoureGroup -Name "JoinAD" -ExtensionType "JsonADDomainExtension" -Publisher "Microsoft.Compute" -TypeHandlerVersion "1.0" -Location $Location -Settings @{ "Name" = $DomainName; "OUPath" = "$OUDN"; "User" = $DomainJoinAdminName; "Restart" = "true"; "Options" = 3} -ProtectedSettings @{ "Password" = $DomainJoinPassword}

   } catch {

       $ErrorMessage = $_.Exception.Message;

       Write-Host "Failed To Join Domain with error $errorMessage";

   }

}

CaptureVM-04

בהצלחה 

בחזרה לכל המאמרים
בואו נעבוד ביחד
צרו קשר