Visual Studio Code y Azure

En este articulo exploraremos Visual studio Code, desde una perspectiva dinamica y divertida…

Es como todas las historias de aventuras de D&D, o del señor de los anillos, estamos todos reunidos en la mayor comodidad, tranquilos disfrutando de la tarde, y el destino nos va a llegar nuevo un “Quest”, una busqueda o reto, en este caso vamos a acompañar a este valiente explorador, de abultado vientre, y corta vista, en un terreno poco explorado, como lo es el uso de las diferentes plataformas de administracion de la nube como las lineas de comando y particularmente el vscode para gestionar plantillas ARM.

Instalacion de prerequisitos

Si usted no tiene una suscripcion de Azure haga clic aqui, necesitara un equipo con Windows 10 preferiblemente, y lo invito a que preparemos los pre-requisitos:

  • Primero que todo una enorme taza del café de su preferencia
  • El modulo de Azure para powershell, aunque se puede administrar Azure desde el portal web cual seria la gracia, este modulo AZ se puede instalar iniciando el PowerShell en modo administrador (es decir dando clic derecho sobre el icono de PowerShell), y usando los siguientes comandos:
$PSVersionTable.PSVersion #para verificar que version de Powershell se tiene con version 5.0 o superior podemos hacer uso de

Install-Module -Name Az #Esto tomara un rato, porque son varios modulos, tambien es posible que te solicite confirmacion de que confias en el repositorio de PSGallery antes de continuar.

Para mas informacion consulte aqui

  • El Azure CLI tambien vale la pena tenerlo, vamos a instalarlo desde aqui esta es otra manera de interactuar con Azure desde PowerShell como administrador ejecutaremos
Invoke-WebRequest -Uri https://aka.ms/installazurecliwindows -OutFile .\AzureCLI.msi; Start-Process msiexec.exe -Wait -ArgumentList '/I AzureCLI.msi /quiet'; rm .\AzureCLI.msi
  • Es posible ingresar a la tienda de Microsoft Store, y descargar el Windows Terminal
  • Tambien puedes querer descargar el WSL (Windows Subsystem for Linux) que permite la ejecucion de un linux Ubuntu dentro de tu sistema operativo, para tener acceso por BASH y poder ejecutar herramientas propias de linux, para instalar el WSL
  • Descargue el Visual Studio Code desde aqui el instalador es muy liviano, pesa menos de 100MB. la instalacion es super simple, y vamos a ir complementandola con las extensiones para Azure a lo largo de este workshop
$VSCode = "https://code.visualstudio.com/docs/?dv=win"
New-FileDownload -SourceFile $VSCode

Guia de laboratorio

Visual Studio Code

Empecemos reconociendo el terreno,

“VS Code viene con un diseño simple e intuitivo que maximiza el espacio provisto para el editor mientras deja un amplio espacio para navegar y acceder al contexto completo de su carpeta o proyecto. La IU se divide en cinco áreas:

  • Editor: el área principal para editar sus archivos. Puede abrir tantos editores como desee, uno al lado del otro, vertical y horizontalmente.
  • Barra lateral: contiene diferentes vistas como el Explorador para ayudarlo mientras trabaja en su proyecto.
  • Barra de estado: información sobre el proyecto abierto y los archivos que edita.
  • Barra de actividad: ubicada en el extremo izquierdo, le permite cambiar de vista y le brinda indicadores adicionales específicos del contexto, como la cantidad de cambios salientes cuando Git está habilitado.
  • Paneles: puede mostrar diferentes paneles debajo de la región del editor para obtener información de salida o depuración, errores y advertencias, o un terminal integrado. El panel también se puede mover hacia la derecha para obtener más espacio vertical.” tomado de:(https://code.visualstudio.com/docs/getstarted/userinterface#_basic-layout)

ahora el Tiki-tiki

Para empezar a probar que todo nos este funcionando, usaremos la barra lateral, para crear un nuevo archivo. Quiero que lo llamemos test.ps1, esta extension hara que el Visual Studio Code identifique que estas intentando crear un Script de PowerShell, por lo que en el modulo de Extensiones te solicitara la instalacion de la extension de PowerShell, en mi escenario utilice la de “PowerShell preview”-

vamos a abrir la consola de PowerShell dentro del vscode, en la seccion inferior aparecen cuatro pestañas, “Problemas”, “Salidas”, “Consola de Depuracion”, y “Terminal” esta ultima es la que me interesa, y vamos a validar que en la parte de la derecha aparece indicando que esta en modo PowerShell, porque tambien puede que esta consola nos funcione para bash.-

Connect-AzAccount #Aqui te pedira iniciar sesion sobre el portal de https://microsoft.com/devicelogin 
get-azresource |ft

PowerShell en 5 minutos

Write-Host #"Powershell tiene una estructura sencilla, es una composicion de un verbo en infinitivo, un guion al medio y un sustantivo singular" -ForegroundColor Yellow
Write-Host #"Por ejemplo podemos encontrar un Get-Command, un Get-Help, o un Get-Service en mas de 800 cmd-lets" -ForegroundColor Yellow
Get-Command
Write-host #"Si queremos saber que esta haciendo nuestro equipo, hacemos un get-process" -ForegroundColor Yellow
Get-process
Write-Host #"Si la informacion es muy extensa, como en este caso, podemos ordenarla" -ForegroundColor Yellow
Update-Help
get-help Get-Process
get-help Get-Process -full
get-help Get-Process -detailed
get-help Get-Process -examples
get-help Get-Process -Online
Get-Service
Get-Service -Name Spooler |Stop-Service
Get-Service M* |Format-List

Command-lets y Parametros

Get-Service M* |Format-Custom
Get-Service M* |Where-Object {$_.Status -eq "Running"}
Get-Service M* |Where-Object {$_.Status -eq "Stopped"}
Get-Service | Sort-Object Status
Get-Service | Sort-Object Status |Format-Table -GroupBy Status Name, DisplayName
Get-Service |Get-Member
Get-Process |Get-Member
Get-Service Spooler |Select-Object ServicesDependedOn
Show-Command Get-Service
Stop-Service M* -WhatIf
Stop-Service M* -Confirm

Pasando resultados con el Pipe o Piping

Get-Process |sort CPU -Descending
Get-EventLog -LogName System -EntryType Error -Newest 10
Get-EventLog -LogName System -EntryType Error -Newest 10 |fl
Get-EventLog -LogName System -EntryType Error -Newest 10 |ogv

Variables y Scripts

$var = "Hola DevOps2020"
$var
Write-host "$var" -ForegroundColor Yellow
Get-Variable 
#podemos manejar strings
$num = 123
$num
#Podemos contener listas o arrays tambien
$num = 1,2,3
$num
$var.GetType().FullName
$var.Length
$var[1]
[int[]] $var = (1,2,3)
$var[2] = "1234"
$var[2]
$v1 = "Hello "
$v2 = "world"
$v1+$v2
($var1+$var2).Length
#Comparar con -eq -ne -gt -lt -ge -le
"Juan Perez" -eq "Ramon Valdez"
#formatos
"{0:f2}" -f 12.4
"|{0,10:C}|" -f 12.4
"{0:hh:mm}" -f (get-date)
#Scripting
Get-ExecutionPolicy
Set-ExecutionPolicy Unrestricted
Get-ExecutionPolicy
runas /user:username PowerShell
##Mas info sobre seguridad en PoSh http://technet.microsoft.com/en-us/magazine/2007.09.powershell.aspx
#------------------------
#test.ps1
#Show Hello and time
"" #Blank line
"Hello"+$Env:USERNAME +"!"
"Time is" + "{0:HH}:{0:mm}" -f (get-Date)
"" #blank line
#------------------------
#Funciones
function get-soup (
    [switch] $please,
    [String] $soup = "chicken noodle"
    )
{
    if ($please){
        "Here's your $soup soup"
    }
    else {
        "No soup for you!"
    }
}
#------------------------

Entornos y modulos

#---------
$User = "fabian.campo@MiDominio.com"
$Pass = ConvertTo-SecureString "AzurePa55w.rd" -AsPlainText -Force
$Cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User, $Pass
Import-Module MSOnline
Connect-msolservice -Credential $Cred
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell/ -Credential $Cred -Authentication Basic -AllowRedirection
Import-PSSession $Session
Import-Module LyncOnlineConnector
import-module microsoft.online.sharepoint.powershell
$Session = New-CsOnlinesession -Credential $Cred
Import-PSSession $Session
[string]$tenant = get-msoldomain | where {$_.name -like "*.onmicrosoft.com" -and -not($_.name -like "*mail.onmicrosoft.com")} | select name
$tenant
$tenant3 = $tenant -split("=")
[string]$tenant4 = $tenant3[1]
$tenant4
$tenant5 = $tenant4 -split(".on")
[string]$tenant6 = $tenant5[0]
$url = "https://" + $tenant6 + "-admin.sharepoint.com"
Connect-SPOService -Url $url -credential $Cred  
#---------

Registro, Certificados y otros almacenes

Get-psprovider
Get-psDrive
New-PsDrive -Name HKCS -PSProvider Registry -Root "HKEY_CLASSES_ROOT"
cd HKCS:
dir .ht*
$process = Get-WmiObject -Class win32_Process
$item.name
foreach ($item in $process)
{
    $item.name
}

Creando Maquinas virtuales en Azure

Connect-AzAccount
Get-AZSubscription | Sort SubscriptionName | Select SubscriptionName
$subscrName="Plataformas de MSDN"
Select-AzSubscription -SubscriptionName $subscrName
$rgName="Devops2020_rg"
$locName="eastus"
New-AZResourceGroup -Name $rgName -Location $locName
Get-AZStorageAccountNameAvailability "campoh1473"
$rgName="Devops2020_rg"
$saName="campoh1473"
$locName=(Get-AZResourceGroup -Name $rgName).Location
New-AZStorageAccount -Name $saName -ResourceGroupName $rgName -Type Standard_LRS -Location $locName
$rgName="Devops2020_rg"
$locName=(Get-AZResourceGroup -Name $rgName).Location
$vnetName="Vnet01"
$SubnetName="Subnet01"
$Subnet=New-AZVirtualNetworkSubnetConfig -Name $SubnetName -AddressPrefix 10.0.0.0/27
New-AZVirtualNetwork -Name $vnetName -ResourceGroupName $rgName -Location $locName -AddressPrefix 10.0.0.0/24 -Subnet $Subnet -DNSServer 10.0.0.4
$rule1 = New-AZNetworkSecurityRuleConfig -Name "RDPTraffic" -Description "Allow RDP to all VMs on the subnet" -Access Allow -Protocol Tcp -Direction Inbound -Priority 100 -SourceAddressPrefix Internet -SourcePortRange * -DestinationAddressPrefix * -DestinationPortRange 3389
$rule2 = New-AZNetworkSecurityRuleConfig -Name "ExchangeSecureWebTraffic" -Description "Allow HTTPS to the Exchange server" -Access Allow -Protocol Tcp -Direction Inbound -Priority 101 -SourceAddressPrefix Internet -SourcePortRange * -DestinationAddressPrefix "10.0.0.5/32" -DestinationPortRange 443
$rule3 = New-AZNetworkSecurityRuleConfig -Name "SharePointSecureWebTraffic" -Description "Allow HTTPS to the SharePoint server" -Access Allow -Protocol Tcp -Direction Inbound -Priority 102 -SourceAddressPrefix Internet -SourcePortRange * -DestinationAddressPrefix "10.0.0.7/32" -DestinationPortRange 80
New-AZNetworkSecurityGroup -Name $SubnetName -ResourceGroupName $rgName -Location $locName -SecurityRules $rule1, $rule2, $rule3
$vnet=Get-AZVirtualNetwork -ResourceGroupName $rgName -Name $vnetName
$nsg=Get-AZNetworkSecurityGroup -Name $SubnetName -ResourceGroupName $rgName
Set-AZVirtualNetworkSubnetConfig -VirtualNetwork $vnet -Name $SubnetName -AddressPrefix "10.0.0.0/27" -NetworkSecurityGroup $nsg
$vnet | Set-AzVirtualNetwork
$rgName="Devops2020_rg"
# Create an availability set for domain controller virtual machines
New-AZAvailabilitySet -ResourceGroupName $rgName -Name dcAvailabilitySet -Location $locName -Sku Aligned  -PlatformUpdateDomainCount 5 -PlatformFaultDomainCount 2
# Create the domain controller virtual machine
$vmName="adVM"
$vmSize="Standard_D1_v2"
$vnet=Get-AZVirtualNetwork -Name $vnetName -ResourceGroupName $rgName
$pip = New-AZPublicIpAddress -Name ($vmName + "-PIP") -ResourceGroupName $rgName -Location $locName -AllocationMethod Dynamic
$nic = New-AZNetworkInterface -Name ($vmName + "-NIC") -ResourceGroupName $rgName -Location $locName -SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $pip.Id -PrivateIpAddress 10.0.0.4
$avSet=Get-AZAvailabilitySet -Name dcAvailabilitySet -ResourceGroupName $rgName
$vm=New-AZVMConfig -VMName $vmName -VMSize $vmSize -AvailabilitySetId $avSet.Id
$vm=Set-AZVMOSDisk -VM $vm -Name ($vmName +"-OS") -DiskSizeInGB 128 -CreateOption FromImage -StorageAccountType "Standard_LRS"
$diskConfig=New-AZDiskConfig -AccountType "Standard_LRS" -Location $locName -CreateOption Empty -DiskSizeGB 20
$dataDisk1=New-AZDisk -DiskName ($vmName + "-DataDisk1") -Disk $diskConfig -ResourceGroupName $rgName
$vm=Add-AZVMDataDisk -VM $vm -Name ($vmName + "-DataDisk1") -CreateOption Attach -ManagedDiskId $dataDisk1.Id -Lun 1
$cred=Get-Credential -Message "Type the name and password of the local administrator account for adVM."
$vm=Set-AZVMOperatingSystem -VM $vm -Windows -ComputerName adVM -Credential $cred -ProvisionVMAgent -EnableAutoUpdate
$vm=Set-AZVMSourceImage -VM $vm -PublisherName MicrosoftWindowsServer -Offer WindowsServer -Skus 2012-R2-Datacenter -Version "latest"
$vm=Add-AZVMNetworkInterface -VM $vm -Id $nic.Id
New-AZVM -ResourceGroupName $rgName -Location $locName -VM $vm
## conecte al adVM y ejecute
$disk=Get-Disk | where {$_.PartitionStyle -eq "RAW"}
$diskNumber=$disk.Number
Initialize-Disk -Number $diskNumber
New-Partition -DiskNumber $diskNumber -UseMaximumSize -AssignDriveLetter
Format-Volume -DriveLetter F
Install-WindowsFeature AD-Domain-Services -IncludeManagementTools
Install-ADDSForest -DomainName campoh.lab -DatabasePath "F:\NTDS" -SysvolPath "F:\SYSVOL" -LogPath "F:\Logs"
Add-WindowsFeature RSAT-ADDS-Tools
New-ADUser -SamAccountName sp_farm_db -AccountPassword (read-host "Set user password" -assecurestring) -name "sp_farm_db" -enabled $true -PasswordNeverExpires $true -ChangePasswordAtLogon $false
New-ADUser -Name EXCHSVC -GivenName EXCHSVC -UserPrincipalName EXCHSVC -ChangePasswordAtLogon $false -AccountPassword (ConvertTo-SecureString -AsPlainText "p@ssw0rd" -Force) -Enabled $true
New-ADUser -Name SYSADMIN -GivenName EXCHADMIN -UserPrincipalName EXCHADMIN -ChangePasswordAtLogon $false -AccountPassword (ConvertTo-SecureString -AsPlainText "p@ssw0rd" -Force) -Enabled $true
New-ADUser -Name EFlores -GivenName "Maria Elena" -surname "Flores" -UserPrincipalName EFlores -EmailAddress EFlores@campoh.lab -ChangePasswordAtLogon $false -AccountPassword (ConvertTo-SecureString -AsPlainText "p@ssw0rd" -Force) -Enabled $true
New-ADUser -Name Vgarcia -GivenName "Victor" -surname "Garcia" -UserPrincipalName Vgarcia -EmailAddress Vgarcia@campoh.lab -ChangePasswordAtLogon $false -AccountPassword (ConvertTo-SecureString -AsPlainText "p@ssw0rd" -Force) -Enabled $true
New-ADUser -Name LRodriguez -GivenName "Lourdes" -surname "Rodriguez" -UserPrincipalName LRodriguez -EmailAddress LRodriguez@campoh.lab -ChangePasswordAtLogon $false -AccountPassword (ConvertTo-SecureString -AsPlainText "p@ssw0rd" -Force) -Enabled $true
New-ADUser -Name JLSanchez -GivenName "Jorge Luis" -surname "Sanchez" -UserPrincipalName JLSanchez -EmailAddress JLSanchez@campoh.lab -ChangePasswordAtLogon $false -AccountPassword (ConvertTo-SecureString -AsPlainText "p@ssw0rd" -Force) -Enabled $true
New-ADUser -Name CZambrano -GivenName "Cecilia" -surname "Zambrano" -UserPrincipalName CZambrano -EmailAddress CZambrano@campoh.lab -ChangePasswordAtLogon $false -AccountPassword (ConvertTo-SecureString -AsPlainText "p@ssw0rd" -Force) -Enabled $true
New-ADUser -Name MSalazar -GivenName "Mariana " -surname "Salazar" -UserPrincipalName MSalazar -EmailAddress MSalazar@campoh.lab -ChangePasswordAtLogon $false -AccountPassword (ConvertTo-SecureString -AsPlainText "p@ssw0rd" -Force) -Enabled $true
New-ADUser -Name JCTorres -GivenName "Juan Carlos" -surname "Torres" -UserPrincipalName JCTorres -EmailAddress JCTorres@campoh.lab -ChangePasswordAtLogon $false -AccountPassword (ConvertTo-SecureString -AsPlainText "p@ssw0rd" -Force) -Enabled $true
New-ADUser -Name ALAndrade -GivenName "Ana Lucia" -surname "Andrade" -UserPrincipalName ALAndrade -EmailAddress ALAndrade@campoh.lab -ChangePasswordAtLogon $false -AccountPassword (ConvertTo-SecureString -AsPlainText "p@ssw0rd" -Force) -Enabled $true
New-ADUser -Name MVera -GivenName "Miguel Angel" -surname "Vera" -UserPrincipalName MVera -EmailAddress MVera@campoh.lab -ChangePasswordAtLogon $false -AccountPassword (ConvertTo-SecureString -AsPlainText "p@ssw0rd" -Force) -Enabled $true
## Fase 2- Creamos ahora la maquina de Exchange
$vmDNSName="mail2393"
$rgName="Devops2020_rg"
$locName=(Get-AZResourceGroup -Name $rgName).Location
Test-AZDnsAvailability -DomainQualifiedName $vmDNSName -Location $locName
# Set up key variables
$subscrName="Plataformas de MSDN"
$rgName="Devops2020_rg"
$vmDNSName="mail2393"
# Set the Azure subscription
Select-AzSubscription -SubscriptionName $subscrName
# Get the Azure location and storage account names
$locName=(Get-AZResourceGroup -Name $rgName).Location
$saName=(Get-AZStorageaccount | Where {$_.ResourceGroupName -eq $rgName}).StorageAccountName
# Create an availability set for Exchange virtual machines
New-AZAvailabilitySet -ResourceGroupName $rgName -Name exAvailabilitySet -Location $locName -Sku Aligned  -PlatformUpdateDomainCount 5 -PlatformFaultDomainCount 2
# Specify the virtual machine name and size
$vmName="exVM"
$vmSize="Standard_D3_v2"
$vnet=Get-AZVirtualNetwork -Name $vnetName -ResourceGroupName $rgName
$avSet=Get-AZAvailabilitySet -Name exAvailabilitySet -ResourceGroupName $rgName
$vm=New-AZVMConfig -VMName $vmName -VMSize $vmSize -AvailabilitySetId $avSet.Id
# Create the NIC for the virtual machine
$nicName=$vmName + "-NIC"
$pipName=$vmName + "-PublicIP"
$pip=New-AZPublicIpAddress -Name $pipName -ResourceGroupName $rgName -DomainNameLabel $vmDNSName -Location $locName -AllocationMethod Dynamic
$nic=New-AZNetworkInterface -Name $nicName -ResourceGroupName $rgName -Location $locName -SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $pip.Id -PrivateIpAddress "10.0.0.5"
# Create and configure the virtual machine
$cred=Get-Credential -Message "Type the name and password of the local administrator account for exVM."
$vm=Set-AZVMOSDisk -VM $vm -Name ($vmName +"-OS") -DiskSizeInGB 128 -CreateOption FromImage -StorageAccountType "Standard_LRS"
$vm=Set-AZVMOperatingSystem -VM $vm -Windows -ComputerName $vmName -Credential $cred -ProvisionVMAgent -EnableAutoUpdate
$vm=Set-AZVMSourceImage -VM $vm -PublisherName MicrosoftWindowsServer -Offer WindowsServer -Skus 2012-R2-Datacenter -Version "latest"
$vm=Add-AZVMNetworkInterface -VM $vm -Id $nic.Id
New-AZVM -ResourceGroupName $rgName -Location $locName -VM $vm
## Conectese a exVM y ejecute
Add-Computer -DomainName "campoh.lab"
Install-WindowsFeature AS-HTTP-Activation, Server-Media-Foundation, NET-Framework-45-Features, RPC-over-HTTP-proxy, RSAT-Clustering, RSAT-Clustering-CmdInterface, RSAT-Clustering-Mgmt, RSAT-Clustering-PowerShell, WAS-Process-Model, Web-Asp-Net45, Web-Basic-Auth, Web-Client-Auth, Web-Digest-Auth, Web-Dir-Browsing, Web-Dyn-Compression, Web-Http-Errors, Web-Http-Logging, Web-Http-Redirect, Web-Http-Tracing, Web-ISAPI-Ext, Web-ISAPI-Filter, Web-Lgcy-Mgmt-Console, Web-Metabase, Web-Mgmt-Console, Web-Mgmt-Service, Web-Net-Ext45, Web-Request-Monitor, Web-Server, Web-Stat-Compression, Web-Static-Content, Web-Windows-Auth, Web-WMI, Windows-Identity-Foundation, RSAT-ADDS
Restart-Computer
## Configurar el Exchange
Write-Host (Get-AZPublicIpaddress -Name "40.84.58.22" -ResourceGroup $rgName).DnsSettings.Fqdn
## Desde exVM
## descarga los pre-requisitos, 
## https://go.microsoft.com/fwlink/p/?linkid=863265 ".NET Framework 4.7.2 "
## https://go.microsoft.com/fwlink/?linkid=327788 "Paquete redistribuible de Visual C++ para Visual Studio 2012"
## https://go.microsoft.com/fwlink/?linkid=2002913 "Paquete redistribuible de Visual C++ para Visual Studio 2013"
## https://go.microsoft.com/fwlink/p/?linkId=258269 "API administrada de comunicaciones unificadas de Microsoft 4.0, Core Runtime (64 bits)" 
## descarga el ISO de Exchange con el ultimo CU
e:
.\setup.exe /prepareSchema /IacceptExchangeServerLicenseTerms
.\setup.exe /prepareAD /OrganizationName:LandonHotel /IacceptExchangeServerLicenseTerms
.\setup.exe /mode:Install /role:Mailbox /OrganizationName:LandonHotel /IacceptExchangeServerLicenseTerms
Restart-Computer
$dnsName="mail1473.eastus2.cloudapp.azure.com"
$user1Name="chris@" + $dnsName
$user2Name="janet@" + $dnsName
$db=Get-MailboxDatabase
$dbName=$db.Name
$password = Read-Host "Enter password" -AsSecureString
New-Mailbox -UserPrincipalName $user1Name -Alias chris -Database $dbName -Name ChrisAshton -OrganizationalUnit Users -Password $password -FirstName Chris -LastName Ashton -DisplayName "Chris Ashton"
New-Mailbox -UserPrincipalName $user2Name -Alias janet -Database $dbName -Name JanetSchorr -OrganizationalUnit Users -Password $password -FirstName Janet -LastName Schorr -DisplayName "Janet Schorr"
## Fase 3- Creamos ahora la maquina de SQL Server
# Log in to Azure
Connect-AzAccount
# Set up key variables
$subscrName="Plataformas de MSDN"
$rgName="Devops2020_rg"
# Set the Azure subscription and location
Select-AzSubscription -SubscriptionName $subscrName
$locName=(Get-AzResourceGroup -Name $rgName).Location
# Create an availability set for SQL Server virtual machines
New-AzAvailabilitySet -ResourceGroupName $rgName -Name sqlAvailabilitySet -Location $locName -Sku Aligned  -PlatformUpdateDomainCount 5 -PlatformFaultDomainCount 2
# Create the SQL Server virtual machine
$vmName="sqlVM"
$vmSize="Standard_D3_V2"
$vnetName="Vnet01"
$vnet=Get-AzVirtualNetwork -Name $vnetName -ResourceGroupName $rgName
$pip=New-AzPublicIpAddress -Name ($vmName + "-PIP") -ResourceGroupName $rgName -Location $locName -AllocationMethod Dynamic
$nic=New-AzNetworkInterface -Name ($vmName + "-NIC") -ResourceGroupName $rgName -Location $locName -SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $pip.Id -PrivateIpAddress "10.0.0.6"
$avSet=Get-AzAvailabilitySet -Name sqlAvailabilitySet -ResourceGroupName $rgName 
$vm=New-AzVMConfig -VMName $vmName -VMSize $vmSize -AvailabilitySetId $avSet.Id
$vm=Set-AzVMOSDisk -VM $vm -Name ($vmName +"-OS") -DiskSizeInGB 128 -CreateOption FromImage -StorageAccountType "Standard_LRS"
$diskSize=100
$diskConfig=New-AzDiskConfig -AccountType "Standard_LRS" -Location $locName -CreateOption Empty -DiskSizeGB $diskSize
$dataDisk1=New-AzDisk -DiskName ($vmName + "-SQLData") -Disk $diskConfig -ResourceGroupName $rgName
$vm=Add-AzVMDataDisk -VM $vm -Name ($vmName + "-SQLData") -CreateOption Attach -ManagedDiskId $dataDisk1.Id -Lun 1
$cred=Get-Credential -Message "Type the name and password of the local administrator account of the SQL Server computer." 
$vm=Set-AzVMOperatingSystem -VM $vm -Windows -ComputerName $vmName -Credential $cred -ProvisionVMAgent -EnableAutoUpdate
$vm=Set-AzVMSourceImage -VM $vm -PublisherName MicrosoftSQLServer -Offer SQL2017-WS2016 -Skus Standard -Version "latest"
$vm=Add-AzVMNetworkInterface -VM $vm -Id $nic.Id
New-AzVM -ResourceGroupName $rgName -Location $locName -VM $vm
## Connect sqlVM 
Add-Computer -DomainName "campoh.lab"
Restart-Computer
Get-Disk | Where PartitionStyle -eq "RAW" | Initialize-Disk -PartitionStyle GPT -PassThru | New-Partition -AssignDriveLetter -UseMaximumSize | Format-Volume -FileSystem NTFS -NewFileSystemLabel "SQL Data"
md f:\Data
md f:\Log
md f:\Backup
New-NetFirewallRule -DisplayName "SQL Server ports 1433, 1434, and 5022" -Direction Inbound -Protocol TCP -LocalPort 1433,1434,5022 -Action Allow
## Fase 4- Creamos ahora la maquina de SP Server
# Set up key variables
$subscrName="Plataformas de MSDN"
$rgName="Devops2020_rg"
$dnsName="campoh1473"
# Set the Azure subscription
Select-AzSubscription -SubscriptionName $subscrName
# Get the location
$locName=(Get-AzResourceGroup -Name $rgName).Location
# Create an availability set for SharePoint virtual machines
New-AzAvailabilitySet -ResourceGroupName $rgName -Name spAvailabilitySet -Location $locName -Sku Aligned  -PlatformUpdateDomainCount 5 -PlatformFaultDomainCount 2
# Create the spVM virtual machine
$vmName="spVM"
$vmSize="Standard_D3_V2"
$vnetName="Vnet01"
$vm=New-AzVMConfig -VMName $vmName -VMSize $vmSize
$pip=New-AzPublicIpAddress -Name ($vmName + "-PIP") -ResourceGroupName $rgName -DomainNameLabel $dnsName -Location $locName -AllocationMethod Dynamic
$vnet=Get-AzVirtualNetwork -Name $vnetName -ResourceGroupName $rgName
$nic=New-AzNetworkInterface -Name ($vmName + "-NIC") -ResourceGroupName $rgName -Location $locName -SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $pip.Id -PrivateIpAddress "10.0.0.7"
$avSet=Get-AzAvailabilitySet -Name spAvailabilitySet -ResourceGroupName $rgName 
$vm=New-AzVMConfig -VMName $vmName -VMSize $vmSize -AvailabilitySetId $avSet.Id
$vm=Set-AzVMOSDisk -VM $vm -Name ($vmName +"-OS") -DiskSizeInGB 128 -CreateOption FromImage -StorageAccountType "Standard_LRS"
$cred=Get-Credential -Message "Type the name and password of the local administrator account."
$vm=Set-AzVMOperatingSystem -VM $vm -Windows -ComputerName $vmName -Credential $cred -ProvisionVMAgent -EnableAutoUpdate
$vm=Set-AzVMSourceImage -VM $vm -PublisherName "MicrosoftSharePoint" -Offer "MicrosoftSharePointServer" -Skus "2019" -Version "latest"
$vm=Add-AzVMNetworkInterface -VM $vm -Id $nic.Id
New-AzVM -ResourceGroupName $rgName -Location $locName -VM $vm
## Connect spVM 
Add-Computer -DomainName "campoh.lab"
Restart-Computer
New-NetFirewallRule -DisplayName "SQL Server ports 1433, 1434, and 5022" -Direction Inbound -Protocol TCP -LocalPort 1433,1434,5022 -Action Allow
Write-Host (Get-AzPublicIpaddress -Name "13.77.127.118" -ResourceGroup $rgName).DnsSettings.Fqdn
##Desplegar un cliente
$rgName="Devops2020_rg"
$locName=(Get-AzResourceGroup -Name $rgName).Location
$vnet=Get-AzVirtualNetwork -Name $vnetName -ResourceGroupName $rgName
$pip=New-AzPublicIpAddress -Name CLIENT1-PIP -ResourceGroupName $rgName -Location $locName -AllocationMethod Dynamic
$nic=New-AzNetworkInterface -Name CLIENT1-NIC -ResourceGroupName $rgName -Location $locName -SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $pip.Id
$vm=New-AzVMConfig -VMName CLIENT1 -VMSize Standard_A1
$cred=Get-Credential -Message "Type the name and password of the local administrator account for CLIENT1."
$vm=Set-AzVMOperatingSystem -VM $vm -Windows -ComputerName CLIENT1 -Credential $cred -ProvisionVMAgent -EnableAutoUpdate
$vm=Set-AzVMSourceImage -VM $vm -PublisherName MicrosoftWindowsServer -Offer WindowsServer -Skus 2016-Datacenter -Version "latest"
$vm=Add-AzVMNetworkInterface -VM $vm -Id $nic.Id
$vm=Set-AzVMOSDisk -VM $vm -Name "CLIENT1-OS" -DiskSizeInGB 128 -CreateOption FromImage -StorageAccountType "Standard_LRS"
New-AzVM -ResourceGroupName $rgName -Location $locName -VM $vm
## Detener / Iniciar las maquinas virtuales
$rgName="Devops2020_rg"
Stop-AZVM -Name Client1 -ResourceGroupName $rgName -Force
Stop-AZVM -Name exVM -ResourceGroupName $rgName -Force
Stop-AzVM -Name spVM -ResourceGroupName $rgName -Force
Stop-AzVM -Name sqlVM -ResourceGroupName $rgName -Force
Stop-AZVM -Name adVM -ResourceGroupName $rgName -Force
$rgName="Devops2020_rg"
Start-AZVM -Name adVM -ResourceGroupName $rgName
Start-AZVM -Name exVM -ResourceGroupName $rgName
Start-AzVM -Name sqlVM -ResourceGroupName $rgName
Start-AzVM -Name spVM -ResourceGroupName $rgName
Start-AZVM -Name Client1 -ResourceGroupName $rgName

Plantillas ARM

$location = 'eastus'
$rgName = 'az-rg1'
New-AzResourceGroup -Name $rgName -Location $location
New-AzResourceGroupDeployment `
   -ResourceGroupName $rgName `
   -TemplateFile $HOME/az-vms-template.json `
   -TemplateParameterFile $HOME/az-vm-parameters.json `
   -AsJob

$rgName = 'az-rg2'
New-AzResourceGroup -Name $rgName -Location $location

New-AzResourceGroupDeployment `
   -ResourceGroupName $rgName `
   -TemplateFile $HOME/az-vm-template.json `
   -TemplateParameterFile $HOME/az-vm-parameters.json `
   -nameSuffix 2 `
   -AsJob

$rgName = 'az-rg3'
New-AzResourceGroup -Name $rgName -Location $location

New-AzResourceGroupDeployment `
   -ResourceGroupName $rgName `
   -TemplateFile $HOME/az-vm-template.json `
   -TemplateParameterFile $HOME/az-vm-parameters.json `
   -nameSuffix 3 `
   -AsJob

$virtualNetwork1 =az-vnet01
$virtualNetwork2 =az-vnet02
$virtualNetwork3 =az-vnet03

Add-AzVirtualNetworkPeering `
  -Name myVirtualNetwork1-myVirtualNetwork2 `
  -VirtualNetwork $virtualNetwork1 `
  -RemoteVirtualNetworkId $virtualNetwork2.Id

Add-AzVirtualNetworkPeering `
  -Name myVirtualNetwork2-myVirtualNetwork1 `
  -VirtualNetwork $virtualNetwork2 `
  -RemoteVirtualNetworkId $virtualNetwork1.Id

Get-AzVirtualNetworkPeering `
  -ResourceGroupName myResourceGroup `
  -VirtualNetworkName myVirtualNetwork1 `
  | Select PeeringState

Add-AzVirtualNetworkPeering `
  -Name myVirtualNetwork2-myVirtualNetwork3 `
  -VirtualNetwork $virtualNetwork2 `
  -RemoteVirtualNetworkId $virtualNetwork3.Id

Add-AzVirtualNetworkPeering `
  -Name myVirtualNetwork3-myVirtualNetwork2 `
  -VirtualNetwork $virtualNetwork3 `
  -RemoteVirtualNetworkId $virtualNetwork2.Id

Get-AzVirtualNetworkPeering `
  -ResourceGroupName myResourceGroup `
  -VirtualNetworkName myVirtualNetwork2 `
  | Select PeeringState

$PIP=Get-AzPublicIpAddress `
  -Name az-vm0 `
  -ResourceGroupName myResourceGroup | Select IpAddress

mstsc /v:$PIP

New-NetFirewallRule –DisplayName "Allow ICMPv4-In" –Protocol ICMPv4

mstsc /v:10.1.0.4
ping 10.0.0.4

Install-WindowsFeature RemoteAccess -IncludeManagementTools
Install-WindowsFeature -Name Routing -IncludeManagementTools -IncludeAllSubFeature
Install-WindowsFeature -Name "RSAT-RemoteAccess-Powershell"
Install-RemoteAccess -VpnType RoutingOnly
Get-NetAdapter | Set-NetIPInterface -Forwarding Enabled

Contribuciones

Las solicitudes de extracción son bienvenidas. Para cambios importantes, abra primero un problema para discutir qué le gustaría cambiar.

Asegúrese de actualizar las pruebas según corresponda.

Fabian Alberto Campo
Microsoft Most Valuable Professional 2018-2020
Microsoft Certified Trainer /LinkedIn Learning Author
Website: [www.campohenriquez.com]
LinkedIn: [https://www.linkedin.com/in/fcampo/]
Twitter: [https://twitter.com/fcampo]
Youtube: [https://www.youtube.com/channel/UC5_-RLpII-4R_xyF6R4CZ2Q?view_as=subscriber]

License

MIT

Aprender a aprender

Soy una persona supremamente curiosa, y eso me acarrea que sea descuidado, desordenado, que la curiosidad me lleve con facilidad a estar a veces en demasiadas cosas simultaneas. Para poder hacer procesos de aprendizaje, es necesario despejar la mente, enfocarse realmente en aquello que se quiere aprender, recuerdo que el maestro Yoda le pegaba al joven Skywalker (Mark Hamill) por estar con otros pensamientos durante las prácticas.

Busquemos estar en paz, relajados, sin música que nos distraiga (para cantar) puede ser instrumental o electrónica, también debemos estar cómodos, no acostados ni muy reclinados o nos quedaremos dormidos a la brevedad. Si la iluminación no es suficiente acabaremos por cansar nuestros ojos, y nos dará como mínimo, mucho sueño.

Definamos unos tiempos donde estaremos concentrados dedicados a la actividad y al cabo de 15 ó 20 minutos tomaremos agua o estiraremos las piernas para evitar fatiga de esta manera optimizaremos los tiempos en micro sesiones, no sé si les ha pasado que durar en una misma reunión por más de una hora terminan agotados mental y físicamente por eso la propuesta es hacer pequeñas sesiones tres o cuatro cada hora en donde vayamos trabajando y adelantando cada tema

adicionalmente a estas recomendaciones propongo hacer uso de las características del bienestar digital que hoy en día son lo máximo porque te permiten reducir o minimizar la cantidad de interrupciones que el celular ocasionaba permitiendo que nos concentremos con mayor facilidad y al cabo de una hora de actividad podremos darle una chequeada a la mensajería instantánea o al correo electrónico.

también recomiendo contar con unas galletitas o un maní o algo que se pueda ir picando durante la jornada sin ocasionar que tenga que levantarse a buscar una merienda fuerte.

En estos tiempos de covid, en donde todos hemos empezado a trabajar estudiar y compartir desde la casa tenemos que ser conscientes que las actividades cómo hacer aseo lavar la loza doblar la ropa fácilmente pueden distraer nuestra atención sin embargo hay que buscar mantener un equilibrio entre la vida personal y la vida laboral. y como siempre digo la tecnología tiene que facilitarnos la vida es una herramienta y debe como tal ayudarnos.

Sean felices!

Actualizacion de los modulos de Azure para PowerShell

Hola a todos, hoy gracias a las indicaciones de otro MVP, quisiera que nuestra comunidad hispana pueda contar con las versiones mas recientes de los modulos de Azure para Powershell, es decir los modulos AZ. para instalar los modulos de Azure buscamos con Find-Module Az*, y una vez que los encontramos en PSGallery, le daremos Install-Module AZ aceptando las preguntas y advertencias como que si confiamos en PSGallery.

Vamos a ejecutar en una ventana de PowerShell el siguiente comando, Get-InstalledModule -Name AZ* el cual debera mostrarnos la version instalada dentro de nuestro Powershell, pero para actualizar apropiadamente usaremos el siguiente script.

PS C:\WINDOWS\system32> Get-Module -Name az.* -ListAvailable | >> Where-Object -Property Name -ne ‘Az.’ | >> ForEach-Object { >> $currentVersion = [Version] $_.Version >> $newVersion = [Version] (Find-Module -Name $_.Name).Version >> if ($newVersion -gt $currentVersion) { >> Write-Host -Object “Updating $_ Module from $currentVersion to $newVersion” >> Update-Module -Name $_.Name -RequiredVersion $newVersion -Force >> Uninstall-Module -Name $_.Name -RequiredVersion $currentVersion -Force >> } >> }

Ahora que ya estas actualizado, te invito a ver mis videos de Youtube, para que aproveches el powershell, y tambien quiero invitarte a mi repositorio de GitHub https://github.com/Bravecold/FCampOps donde tengo montones de scripts no solo para Azure, sino para Office 365, y Windows Server tambien. Gracias por visitarme, y hasta la proxima!

Ubuntu 20.04 en AzureNautismo3

En esta oportunidad conversaremos del despliegue de maquinas virtuales en Azure, comenzare por indicar que los equipos virtuales son una de las soluciones de computo que Azure puede ofrecernos, consiste en la posibilidad de utilizar un equipo físico como un host, en el cual ejecutaremos diferentes maquinas con distintos sistemas operativos, utilizando un hipervisor, que simula el driver que controla el elemento físico, y consigue dividir el procesamiento y la memoria, permitiendo que optimicemos el uso de los recursos como la energía y el manejo de calor.

Iniciaremos en nuestro portal de Azure, considerando que cada maquina virtual en Azure despliega el sistema operativo que escojamos en un disco virtual VHD, y que este lo almacenaremos en la cuenta de almacenamiento (storage account) dentro de un BLOB (binary large object), se despliega además un segundo disco duro o volumen D:\ el cual se utilizara para paginación o swapping. Toda máquina virtual creara además una o varias tarjetas de red NIC (Network Interface Card), que usaran direcciones IP y unos NSG (Network Security Groups) los cuales permiten o restringen puertos y tráfico de red.

Ingresamos al Azure Marketplace, donde seleccionaremos que queremos desplegar una maquina virtual con sistema operativo Linux Ubuntu, de una vez seleccionaremos Ubuntu 20.04 el cual fue lanzado el pasado 23 de abril de 2020. En este caso seleccionare Ubuntu Pro 20.04 LTS

El pago de estas maquinas virtuales basadas en Linux no ocasionan un costo adicional al hardware, dado que su sistema operativo open source no representa un sobre costo al alquiler de la maquina virtual. Aprovecho esto para indicar que las maquinas virtuales vienen por tallas, entonces uno simplemente debe seleccionar que tamaño le conviene más, en capacidades de vCPU y memoria, y se cobran por tiempo de ejecución, si la maquina dura 8 horas al día encendida, al mes se proyectan 220 horas, y solo si es una máquina de producción de 24-7 se pagaran 730 horas al mes.

Es necesario especificar algunos detalles como la suscripción sobre la que se cobrara, el grupo de recursos donde lo desplegaremos, y la región del centro de datos.

En este caso usaremos una maquina con 2 vcpus, y 8 GiB de memoria, con un costo de U$86.43 para 730 horas de servicio.

Creamos un usuario administrador, y la contraseña. Habilitamos el puerto de SSH (22).

Si se precisa de otros discos duros para datos en esta parte del formulario se pueden precisar otros discos adicionales.

En esta sección especificaremos la red virtual, y la dirección ip.

Podemos especificar en que cuenta de almacenamiento llevar los eventos de inicio y diagnostico al arranque de la maquina.

Seleccionamos el botón azul para crear la maquina con las configuraciones seleccionadas. Y al cabo de unos segundos tendremos nuestro equipo Linux.

Y quedo! Nuestra maquina estara desplegada con Ubuntu 20.04

Podemos conectarnos directamente por SSH desde Windows Terminal con el WSL

Podemos actualizar los paquetes desde apt update

Para comentarios y mas opciones les agradezco los comentarios en este mismo post. Hasta una proxima!

Exámenes de certificación 2020

Microsoft ha venido actualizando sus contenidos temáticos sobre los exámenes de certificación en la medida que los productos han venido creciendo, una de las situaciones reportadas hace años cuando presentabamos exámenes de Windows server era que en el exámen te podían salir preguntas “viejas” sobre procedimientos que ahora se hacían gráficamente por GUI o por powershell de una manera más sencilla, (como la configuración de los clusters).

Hoy en día y gracias a la dinámica de desarrollo constante que ofrecen los ciclos devops y portales como uservoice dónde los usuarios podemos votar solicitando prioridad en algún desarrollo de alguna característica para un producto, Azure y Office 365 han sido abanderados en estos procesos de innovación y desarrollo constante

En https://aka.ms/traincertposter encontraremos la nueva ruta de certificación publicada desde el 02 de Abril por Microsoft, escencial mente se enfoca en roles, así que hay nuevos exámenes y nuevos perfiles.

Nueva ruta de exámenes de Azure

La cronológia de los exámenes de azure esta aquí https://msftcert.azurewebsites.net/2020/04/09/exam-az-103-microsoft-azure-administrator-has-been-updated-to-az-104/, recuerden que el nivel introductorio es el Az-900, y pueden registrarse en https://www.eventbrite.co/e/curso-online-az-900t01-gratis-tickets-103469714702?ref=estw para entradas gratis a este nivel online el próximo 9 de mayo, si tienen alguna duda o comentario simplemente respondan sobre este post. Saludos.

Azure-nautismo parte 2

Sigamos hablando de Cloud…

En nuestro último post, conversamos de la importancia de las suscripciones, y de cómo los grupos de recursos nos permiten organizar los elementos dentro de nuestra suscripción. Hablemos ahora de las limitaciones que estos elementos tienen, ya que no se trata de resaltar las bondades de cada producto, sino de conocer a profundidad sus capacidades técnicas, y es claro que todo producto tiene sus límites y condiciones.

ResourceLímite predeterminadoLímite máximo
Suscripciones por inquilino de Azure Active DirectorySin límite.Sin límite.
Coadministradores por suscripciónSin límite.Sin límite.
Grupos de recursos por suscripción980980
Tamaño de solicitud de API de Azure Resource Manager4 194 304 bytes.4 194 304 bytes.
Etiquetas por suscripciónSin límite.Sin límite.
Cálculos de etiquetas únicas por suscripción10 00010 000
Implementaciones de nivel de suscripción por ubicación800800
Límites de las suscripciones

En el caso puntual de las suscripciones y grupos de recursos, encontramos por ejemplo que no todos los tipos de elementos y no todas las tallas se encuentran disponibles en todos los centros de datos, por otro lado un límite que se aplica por defecto es que contamos con 20 vCPU inicialmente en una suscripción, para solicitar la ampliación del número de vCPU, es necesario escalar una solicitud en este url

ResourceLímite predeterminadoLímite máximo
Recursos por grupo de recursosN/DLos recursos no están limitados por el grupo de recursos. En su lugar, están limitados por el tipo de recurso de un grupo de recursos. Consulte la fila siguiente.
Recursos por grupo de recursos, por tipo de recurso800Algunos tipos de recursos pueden superar el límite de 800. Consulte Resources not limited to 800 instances per resource group (Recursos no limitados a 800 instancias por grupo de recursos).
Implementaciones por grupo de recursos en el historial de implementaciones800800
Recursos por implementación800800
Bloqueos de administración por ámbito único2020
Número de etiquetas por recurso o grupo de recursos5050
Longitud de la clave de etiqueta512512
Longitud del valor de la etiqueta256256
Límites de los grupos de recursos

Una de las actividades que me gusta hacer por cada recurso, es rotular, para esto Azure nos permite utilizar unas etiquetas o Tags, que nos permiten identificar para qué estamos creando esa máquina virtual, este website, o esa base de datos. incluso las utilizo para rotular los escenarios de pruebas, producción y desarrollo, de estas podemos aplicar hasta 50 a un solo elemento. Ahora bien, cambiando de tema, por otro lado tenemos la parte de la conectividad de red, podemos tener un total de 980 grupos de recursos en una suscripción, y hasta 800 elementos de un mismo tipo por grupo de recursos, entonces si estamos montando una granja de servidores front end, ya tenemos un tope de hasta 800 web server en el mismo grupo de recursos.

Azure Poster

Cuando vamos a crear una máquina virtual en Azure, debemos considerar en dónde la vamos a definir, para esto es necesario crear el grupo de recursos, en este se genera una virtual network, por medio de la cual nuestra máquina obtendrá su dirección IP. en este mismo grupo de recursos crearemos un Storage Account, el cual almacenará en un BLOB los discos VHD de la máquina virtual, tranquilo si alguno de estos términos le resulta poco familiar, los haremos más claros conforme avancemos en esta conversación, por ahora, y para concluir la creación de la máquina virtual, debo contarle que se creará una tarjeta de red o NIC, esta contará con una dirección IP, y un network security group que filtra los puertos de conexión.

Ahora bien, el portal de Azure cuenta con un Azure Marketplace, que es el sitio donde se pueden contratar más de 1000 productos y servicios, de diferentes fabricantes, ya que al alquilar una máquina virtual puede que se precise con sistema operativo Windows Server o Linux, Microsoft nos ofrece alianza con muchísimos proveedores y fabricantes, así como soporte en muchos de estos offerings, al punto que si despliegas una máquina virtual con Red Hat y tienes una necesidad de soporte, la puedes escalar por Azure, o por Red Hat.

Volveré en una próxima entrega, con más información sobre máquinas virtuales y networking, espero sus comentarios y feedback.

Azure-nautismo

Azure es la plataforma cloud de Microsoft

Cuando queremos empezar a practicar un deporte, empezamos por adquirir los elementos básicos, un balón apropiado, canilleras si es futbol Soccer, rodilleras si es voleibol o tu raqueta personal si es tenis. Para iniciarnos en el inmenso cloud de Microsoft Azure donde se pueden crear maquinas virtuales, aplicaciones web, o bases de datos, lo primero es obtener una suscripción gratuita donde nos pedirán un correo valido y un teléfono de contacto, para obtener U$200 de crédito, por 30 días.

Ahora que ya tienes acceso a tu suscripción, Azure es un servicio que se te cobra por el tiempo en uso de cada maquina virtual encendida, por el trafico de red, por el espacio de almacenamiento ocupado. La suscripción normalmente es la que define si Microsoft hará cobro después de facturar (mes vencido), o si tienes un saldo a favor (crédito) del cual se puede descontar lo facturado. Dentro de una suscripción tu puedes tener un propietario, y hasta 200 coadministradores.

Arquitectura de soluciones multi sitio en Azure

Una estructura familiar y que fácilmente reconocemos es el rack que se implementa en los centros de datos, estos tienen switches de comunicaciones y soluciones de almacenamiento, además de los servidores enrackables, si hacemos esta estructura imaginaria en la definición de lo que podemos crear en Azure, podemos crear un grupo de recursos, el cual será un conjunto de elementos, para crear un grupo de recursos le definiremos tres valores, la suscripción, el nombre y la ubicación geográfica. una buena forma de identificar en que regiones nos conviene ubicar nuestros recursos consiste en ejecutar un Azure Speed Test lo que nos permite identificar cuan rápido obtenemos respuesta desde los diferentes centros de datos en todo el mundo. Confinar los diferentes elementos que conforman una solución dentro de un mismo grupo de recursos, ayudan a ordenar los elementos dentro de tu suscripción, ayuda a identificar cuanto te cuesta una solución después de desplegada mes a mes, pero para hacer una proyección de cuanto podría costar, antes de implementar se puede usar la calculadora de precios de Azure. Una buena practica consiste en etiquetar cada recurso, de manera que se puedan usar varios grupos de recursos para una misma aplicacion, de este modo podríamos tener un grupo de recursos de front end, para la publicación web de la aplicación, otro grupo de recursos para el midleware, y otro grupo de recursos para las base de datos. así se puede desplegar un balanceador de carga para los websites y una protección de firewall para llegar a las bases de datos.

Azure tiene una amplia oferta en su market place

Empezaremos por definir que dentro de cada grupo de recursos podemos definir un Storage Account, el cual es un tipo de almacenamiento basado en Blobs (Binary large object storage) en donde todo lo que creemos dentro del grupo de recursos se podrá almacenar, discos VHD, bases de datos, y aplicaciones web. y por otro lado debemos crear un Virtual Network, el cual será como nuestro switch virtual para todos los elementos que dentro del grupo de recursos creemos. este virtual network se puede empalmar con otros grupos de recursos (de hecho con otros VNet) por medio de emparejamientos peer to peer. el VNet se comporta como un DHCP que asigna direcciones IP a cada elemento creado dentro del grupo de recursos, y asociado a este VNet. dentro del ejercicio de arquitectura, debemos concebir y planear como van a ser las conexiones, por donde llega el trafico, y que puertos se van a habilitar, antes de empezar a hacer los despliegues sobre la suscripción, pues ensayar allí tiene costo.

En Azure encontramos diferentes elementos por cada categoría

Espero que les haya gustado este articulo, espero sus preguntas y comentarios, y recuerden #MeQuedoEnCasa

Vida post Corona-calypsis

Considerar la complicada situación de salud publica o pandémica que estamos viviendo en las diferentes latitudes mundiales, a razón del Covid-19 parece salido de una película apocalíptica, como “Resident Evil”, o “Zombieland”, donde un virus que empieza a propagarse rápidamente, o en “this is the end” donde ocurre un apocalipsis y las personas se resguardan en sus casas, con total pánico, pues las otras personas empiezan a saquear armados en busca de comida, y víveres para sobrevivir.

“This is the end”, es una comedia satírica, sobre un apocalipsis https://www.imdb.com/title/tt1245492/

Lo mejor que podemos hacer es realmente resguardarnos, cuidar la distancia, cuidar la vida de nuestros familiares, vecinos y amigos, consumir frutas y vegetales que nos ayuden a mejorar nuestras defensas, y leer, mucho en estos momentos de cuarentena. Entrenemos nuevas habilidades, aprendamos a hacer manualidades, practiquemos yoga, pilates, o algun ejercicio en casa, y sobre todo, aprendamos a utilizar las video llamadas, con la plataforma de nuestra preferencia, Microsoft Teams, Facebook Messenger, Whatsapp, Telegram, Zoom, BlueJeans o Slack. Todas igualmente funcionales, nos facilitan la toma de deciciones, nos evitan el recorrido, nos permiten telepresencia o control remoto.

En mi caso me aplicare a leer sobre Azure, leyendo https://azure.microsoft.com/en-us/resources/learn-azure-in-a-month-of-lunches/en-us/ y buscare entrenar mediante el blog o video sesiones a mis seguidores. Colombia registro el primer contagiado de Covid-19 el 6 de marzo, con una joven de 19 años que estuvo estudiando en Italia, y regreso asintomática. A la fecha con tan solo 12 días, ya se reportan 93 casos a nivel nacional, a pesar de las medidas de prevención, y el sitio web de noticias Caracol anuncia dramáticamente que 17 Millones de Colombianos estamos en riesgo de contagiarnos.

Esta pandemia nos dejara cicatrices, como humanidad, como sociedad, muchos morirán, sin una oportunidad, para todos los que logren superar esta situación, recae la responsabilidad de reestablecer y reparar la sociedad, reevaluar muchos dogmas y creencias, que quedaran en entredicho, Dioses e iglesias, futbol o políticas de izquierda o de derecha, y otras pasiones se han visto entintadas bajo un mismo tono.

Espero sus comentarios, y me gustaría saber si programamos sesiones en streaming presentando novedades sobre Azure y Office 365. participen en los comentarios, hagamos de la cuarentena algo valioso y enriquecedor, aprovechemos el tiempo que le estamos ganando diariamente al caotico transporte de nuestra ciudad.

Nueva versión de Windows Admin Center

Microsoft esta reemplazando el ya tradicional y confiable Server Manager, con el que instalabamos los roles y caracteristicas a los servidores y teniamos un rapido resumen de la configuracion del servidor y de los servicios en ejecucion.

ahora la versión de Windows Admin Center, que es basada en web, nos permite no solamente desplegar roles y características, sino que nos da acceso a consola, podemos crear usuarios, subir servicios y procesos, ver gráficamente el performance del servidor, y podemos tener una sola consola para la administración de muchos servidores, para descargarlo haga clic en este enlace, https://docs.microsoft.com/en-us/windows-server/manage/windows-admin-center/overview

Esta nueva consola nos permite integracion con Azure, pero adicionalmente nos permite gestionar servidores 2008 R2, 2012, 2012 R2, 2016 y 2019.