automating and managing windows azure solutions with powershell tom fuller windows azure –...
TRANSCRIPT
![Page 1: Automating and Managing Windows Azure Solutions with Powershell Tom Fuller Windows Azure – Technology Solution Professional @DeveloperTofu](https://reader036.vdocuments.mx/reader036/viewer/2022062511/5517a7225503460e6e8b5f7e/html5/thumbnails/1.jpg)
Automating and Managing Windows Azure Solutions with PowershellTom FullerWindows Azure – Technology Solution Professional@DeveloperTofuhttp://developertofu.com
![Page 2: Automating and Managing Windows Azure Solutions with Powershell Tom Fuller Windows Azure – Technology Solution Professional @DeveloperTofu](https://reader036.vdocuments.mx/reader036/viewer/2022062511/5517a7225503460e6e8b5f7e/html5/thumbnails/2.jpg)
Who is Tom Fuller?
In 2010, the family moves to Atlanta, GA from Tampa, FL
I lived in Buffalo, NY until I left for college and yes, I am still a Buffalo Bills fan but no, I do not miss the snow
2 Years as MVP, 5 Years as Microsoft Field Engineer, recently took role as Azure specialist
12 years in dev focused roles like architect, web developer lots of work with large enterprises in the US
A fun challenge, coaching a 5 and under girls team
Active speaker, writer, blogger developertofu.com or @DeveloperTofu
![Page 3: Automating and Managing Windows Azure Solutions with Powershell Tom Fuller Windows Azure – Technology Solution Professional @DeveloperTofu](https://reader036.vdocuments.mx/reader036/viewer/2022062511/5517a7225503460e6e8b5f7e/html5/thumbnails/3.jpg)
Cloud ComputingPackaged Software
Storage
Servers
Networking
O/S
Middleware
Virtualization
Data
Applications
Runtime
You
man
ag
e
Infrastructure(as a Service)
Storage
Servers
Networking
O/S
Middleware
Virtualization
Data
Applications
Runtime
Man
ag
ed
by v
en
dor
You
man
ag
e
Platform(as a Service)
Man
ag
ed
by v
en
dor
You
man
ag
e
Storage
Servers
Networking
O/S
Middleware
Virtualization
Applications
Runtime
Data
Software(as a Service)
Man
ag
ed
by v
en
dor
Storage
Servers
Networking
O/S
Middleware
Virtualization
Applications
Runtime
Data
![Page 4: Automating and Managing Windows Azure Solutions with Powershell Tom Fuller Windows Azure – Technology Solution Professional @DeveloperTofu](https://reader036.vdocuments.mx/reader036/viewer/2022062511/5517a7225503460e6e8b5f7e/html5/thumbnails/4.jpg)
Cloud Computing Patterns
tCom
pute
Inactivity
Period
t
t
t
On and OffOn & off workloads (e.g. batch job)Over provisioned capacity is wasted Time to market can be cumbersome
Unpredictable BurstingUnexpected/unplanned peak in demand Sudden spike impacts performance Can’t over provision for extreme cases C
om
pute
Growing FastSuccessful services needs to grow/scale Keeping up w/ growth is big IT challenge Cannot provision hardware fast enoughC
om
pute
Predictable BurstingServices with micro seasonality trends Peaks due to periodic increased demandIT complexity and wasted capacity
Com
pute
![Page 5: Automating and Managing Windows Azure Solutions with Powershell Tom Fuller Windows Azure – Technology Solution Professional @DeveloperTofu](https://reader036.vdocuments.mx/reader036/viewer/2022062511/5517a7225503460e6e8b5f7e/html5/thumbnails/5.jpg)
Windows Azure
Comprehensive set of services that enable you to quickly build, deploy and manage applications across a global network of Microsoft-managed datacenters
Solid
Open
Flexible
![Page 6: Automating and Managing Windows Azure Solutions with Powershell Tom Fuller Windows Azure – Technology Solution Professional @DeveloperTofu](https://reader036.vdocuments.mx/reader036/viewer/2022062511/5517a7225503460e6e8b5f7e/html5/thumbnails/6.jpg)
Global Footprint
![Page 7: Automating and Managing Windows Azure Solutions with Powershell Tom Fuller Windows Azure – Technology Solution Professional @DeveloperTofu](https://reader036.vdocuments.mx/reader036/viewer/2022062511/5517a7225503460e6e8b5f7e/html5/thumbnails/7.jpg)
99.95% monthly SLA
![Page 8: Automating and Managing Windows Azure Solutions with Powershell Tom Fuller Windows Azure – Technology Solution Professional @DeveloperTofu](https://reader036.vdocuments.mx/reader036/viewer/2022062511/5517a7225503460e6e8b5f7e/html5/thumbnails/8.jpg)
Pay only for what you use
![Page 9: Automating and Managing Windows Azure Solutions with Powershell Tom Fuller Windows Azure – Technology Solution Professional @DeveloperTofu](https://reader036.vdocuments.mx/reader036/viewer/2022062511/5517a7225503460e6e8b5f7e/html5/thumbnails/9.jpg)
Cloud services Web sites Virtual machines
![Page 10: Automating and Managing Windows Azure Solutions with Powershell Tom Fuller Windows Azure – Technology Solution Professional @DeveloperTofu](https://reader036.vdocuments.mx/reader036/viewer/2022062511/5517a7225503460e6e8b5f7e/html5/thumbnails/10.jpg)
infrastructure for building andrunning your applications
applicationbuilding
blocksstorage
big data
caching
CDN
database
media
networking
traffic manager
virtualmachines
web sites
cloud services
compute
service bus
identity
mobile
![Page 11: Automating and Managing Windows Azure Solutions with Powershell Tom Fuller Windows Azure – Technology Solution Professional @DeveloperTofu](https://reader036.vdocuments.mx/reader036/viewer/2022062511/5517a7225503460e6e8b5f7e/html5/thumbnails/11.jpg)
Windows Azure Cloud Services (Stateless VM’s)
Web Role Worker Role
Virtual machines in the CloudTwo Flavors:
A place for your application code to run…Web role is simply a Virtual Machine with IIS pre-configured
Worker role is for non-web based processing code, back-end business processes
You can actually connect to your web/worker roles – they are just VM’s
You package your code/artifacts and Windows
Azure bootstraps a VM, installs the code and starts up the VM for you. Load balances multiple instances
compute data management networking
SQL database
noSQL databasewebsites blob connect
virtual network
traffic managerVMs
cloud services
![Page 12: Automating and Managing Windows Azure Solutions with Powershell Tom Fuller Windows Azure – Technology Solution Professional @DeveloperTofu](https://reader036.vdocuments.mx/reader036/viewer/2022062511/5517a7225503460e6e8b5f7e/html5/thumbnails/12.jpg)
Windows Azure Virtual Machines
Management Portal
Scripting (Windows, Linux and Mac)
compute data management networking
SQL database
noSQL databasewebsites blob connect
virtual network
traffic manager
cloud services
REST API
Getting Started Select Image and VM Size New Disk Persisted in Storage
Boot VM from New Disk
VMs
![Page 13: Automating and Managing Windows Azure Solutions with Powershell Tom Fuller Windows Azure – Technology Solution Professional @DeveloperTofu](https://reader036.vdocuments.mx/reader036/viewer/2022062511/5517a7225503460e6e8b5f7e/html5/thumbnails/13.jpg)
Windows Azure Web SitesQuickly and easily deploy sites to a highly scalable cloud environment with the frameworks and open source apps of your choice using Windows Azure Web Sites
Supports multiple frameworks (ASP.NET, Classic ASP, PHP, Node.js)
Pick from popular Open Source apps
Pick your DB (SQL Azure, MySQL)
Choose your tools (Visual Studio, Git, FTP, WebMatrix)
Build on any platform (Windows, Mac, Linux)
compute data management networking
SQL database
noSQL database blob connect
virtual network
traffic manager
cloud services VMs
GIT : FTP
GIT : FTP
GIT : FTP Web Deploy : TFS Deploy
Supported Deployment Protocols
websites
![Page 14: Automating and Managing Windows Azure Solutions with Powershell Tom Fuller Windows Azure – Technology Solution Professional @DeveloperTofu](https://reader036.vdocuments.mx/reader036/viewer/2022062511/5517a7225503460e6e8b5f7e/html5/thumbnails/14.jpg)
Management
![Page 15: Automating and Managing Windows Azure Solutions with Powershell Tom Fuller Windows Azure – Technology Solution Professional @DeveloperTofu](https://reader036.vdocuments.mx/reader036/viewer/2022062511/5517a7225503460e6e8b5f7e/html5/thumbnails/15.jpg)
Service Management API for Managing and Monitoring Applications in Windows Azure
Provides programmatic access to platform functionality
Used to deploy, manage, and monitor applications
Powerful REST API, performed over SSL and mutually authenticated using X.509 certificatesMay be accessed from within application running in Windows Azure, or directly over the Internet from any application
PowerShell commands using the same APIs can be used to script management functions
![Page 16: Automating and Managing Windows Azure Solutions with Powershell Tom Fuller Windows Azure – Technology Solution Professional @DeveloperTofu](https://reader036.vdocuments.mx/reader036/viewer/2022062511/5517a7225503460e6e8b5f7e/html5/thumbnails/16.jpg)
What can you do with PowerShell?
AutomationQuery, Manage and Configure Virtual Machines across multiple subscriptions, cloud services and storage accounts.
Virtual NetworkingCompletely Configure VNETs from a Script
Provision Fully Configured Virtual MachinesDomain JoinedStorage and Networking Configured
Remote ManagementManage SQL Databases, Configuration, Diagnostics, Deployments, and Azure assets (Affinity Groups, Storage Accounts, Keys, etc..)
![Page 17: Automating and Managing Windows Azure Solutions with Powershell Tom Fuller Windows Azure – Technology Solution Professional @DeveloperTofu](https://reader036.vdocuments.mx/reader036/viewer/2022062511/5517a7225503460e6e8b5f7e/html5/thumbnails/17.jpg)
Getting StartedUse: Get-AzurePublishSettingsFile and Import-AzurePublishSettingsFileTo Import Downloaded Publish Profile (.publishsettings) http://windows.azure.com/download/publishprofile.aspx
Automatically configures Subscription ID, Certificate, Service Endpoint and Subscription Name.
Multiple Subscription Support Get-AzureSubscription | foreach { Select-AzureSubscription $_.SubscriptionName # Perform Management Operation Against Each Subscription}
![Page 18: Automating and Managing Windows Azure Solutions with Powershell Tom Fuller Windows Azure – Technology Solution Professional @DeveloperTofu](https://reader036.vdocuments.mx/reader036/viewer/2022062511/5517a7225503460e6e8b5f7e/html5/thumbnails/18.jpg)
DemoGetting Started with Azure Subscription Credentials in Powershell
![Page 19: Automating and Managing Windows Azure Solutions with Powershell Tom Fuller Windows Azure – Technology Solution Professional @DeveloperTofu](https://reader036.vdocuments.mx/reader036/viewer/2022062511/5517a7225503460e6e8b5f7e/html5/thumbnails/19.jpg)
Virtual Machine Management
Quick VM Provisioning ModeSupports VM Creation in a Single Cmdlet
Create Multiple Pre-Defined VMs in a BatchNew-AzureVM -VMs $vm1, $vm2, $vm3
Advanced Provisioning Configuration ModeProvision With: Endpoints, Data DisksConfigure: Cache Settings for OS/Data Disks and Subnet Names
![Page 20: Automating and Managing Windows Azure Solutions with Powershell Tom Fuller Windows Azure – Technology Solution Professional @DeveloperTofu](https://reader036.vdocuments.mx/reader036/viewer/2022062511/5517a7225503460e6e8b5f7e/html5/thumbnails/20.jpg)
Setting the current storage account
Returns Storage AccountGet-AzureStorageAccount | Select StorageAccountName
Cmdlets like New-AzureQuickVM will use this Account
Sets the Current Storage AccountSet-AzureSubscription 'somesub1' -CurrentStorageAccount 'mystorage‘
![Page 21: Automating and Managing Windows Azure Solutions with Powershell Tom Fuller Windows Azure – Technology Solution Professional @DeveloperTofu](https://reader036.vdocuments.mx/reader036/viewer/2022062511/5517a7225503460e6e8b5f7e/html5/thumbnails/21.jpg)
Information Needed to create a VM
Image NameGet-AzureVMImage | select ImageName
Disk NameGet-AzureDisk | select DiskName
Data Center LocationGet-AzureLocation
![Page 22: Automating and Managing Windows Azure Solutions with Powershell Tom Fuller Windows Azure – Technology Solution Professional @DeveloperTofu](https://reader036.vdocuments.mx/reader036/viewer/2022062511/5517a7225503460e6e8b5f7e/html5/thumbnails/22.jpg)
Simple VM Creation
First Virtual Machine in a NEW Cloud Service (-Location specified)New-AzureQuickVM -Windows -ServiceName $svc -Name $vm1 -ImageName $wimg -Location $location -Password $pwd
New Virtual Machine in an Existing Cloud Service (no –Location)New-AzureQuickVM -Windows -ServiceName $svc -Name $vm2 -ImageName $wimg -Password $pwd
Creating a Linux Virtual Machine in an Existing Cloud ServiceNew-AzureQuickVM -Linux -ServiceName $svc -Name $vm3 -ImageName $limg -LinuxUser $lu -Password $pwd
![Page 23: Automating and Managing Windows Azure Solutions with Powershell Tom Fuller Windows Azure – Technology Solution Professional @DeveloperTofu](https://reader036.vdocuments.mx/reader036/viewer/2022062511/5517a7225503460e6e8b5f7e/html5/thumbnails/23.jpg)
Virtual Machine Discovery
Retrieve Cloud Services Get-AzureService
Retrieve Virtual Machines for Service Get-AzureVM -ServiceName $cloudSvcName
Retrieve Status for All VMs in SubsriptionGet-AzureService | foreach { $_ | Get-AzureVM | ft ServiceName, Name, InstanceStatus}
![Page 24: Automating and Managing Windows Azure Solutions with Powershell Tom Fuller Windows Azure – Technology Solution Professional @DeveloperTofu](https://reader036.vdocuments.mx/reader036/viewer/2022062511/5517a7225503460e6e8b5f7e/html5/thumbnails/24.jpg)
Common Settings
NameThe name of the Virtual Machine
InstanceSizeExtraSmall, Small, Medium, Large, ExtraLarge
AvailabilitySetNameThe availability set (used for high availability)
![Page 25: Automating and Managing Windows Azure Solutions with Powershell Tom Fuller Windows Azure – Technology Solution Professional @DeveloperTofu](https://reader036.vdocuments.mx/reader036/viewer/2022062511/5517a7225503460e6e8b5f7e/html5/thumbnails/25.jpg)
Provisioning Options
Add-AzureProvisioningConfig Options-Windows -Password $pwd-WindowsDomain -Password $pwd -Domain $dom, -JoinDomain $fqdn, -DomainUser $domUser -DomainPassword $domPwd -MachineObjectOU $ou-DisableAutomaticUpdates-NoRDPEndpoint, -TimeZone, Certificates
Add-AzureProvisioningConfig OptionsLinux -LinuxUser $user -Password $pwd -DisableSSH , -NoSSHEndpoint -SSHKeyPairs, -SSHPublicKeys installed from certificates deployed in cloud service
![Page 26: Automating and Managing Windows Azure Solutions with Powershell Tom Fuller Windows Azure – Technology Solution Professional @DeveloperTofu](https://reader036.vdocuments.mx/reader036/viewer/2022062511/5517a7225503460e6e8b5f7e/html5/thumbnails/26.jpg)
Configuring a VM at Provision Time
Create Configuration Object with New-AzureVMConfigModify with Add-* cmdletsAdd with New-AzureVM
New-AzureVMConfig -Name $vm1 -InstanceSize Medium -ImageName $img | Add-AzureProvisioningConfig -Windows -Password $pwd | Add-AzureDataDisk -CreateNew -DiskLabel 'data' -DiskSizeInGB 10 -LUN 0 | Add-AzureEndpoint -Name 'web' -PublicPort 80 -LocalPort 80 -Protocol tcp | New-AzureVM -ServiceName $newSvc -Location $location
![Page 27: Automating and Managing Windows Azure Solutions with Powershell Tom Fuller Windows Azure – Technology Solution Professional @DeveloperTofu](https://reader036.vdocuments.mx/reader036/viewer/2022062511/5517a7225503460e6e8b5f7e/html5/thumbnails/27.jpg)
Virtual Machine Storage
Data DisksAdd/Remove data disks at boot or while runningCreate blank or attach existing disks
Modify Cache Settings of OS Disk or Data DiskModifying OS Disk while running requires reboot
![Page 28: Automating and Managing Windows Azure Solutions with Powershell Tom Fuller Windows Azure – Technology Solution Professional @DeveloperTofu](https://reader036.vdocuments.mx/reader036/viewer/2022062511/5517a7225503460e6e8b5f7e/html5/thumbnails/28.jpg)
Data Disk Creation
New Virtual Machine Creation with Data DiskNew-AzureVMConfig -Name 'myvm1' -InstanceSize 'Small' -ImageName $img | Add-AzureProvisioningConfig -Windows -Password $pwd | Add-AzureDataDisk -CreateNew -DiskSizeInGB 10 -DiskLabel 'myddisk' -LUN 0 | New-AzureVM -ServiceName $cloudSvcName
Add new Data Disk to existing Virtual MachineGet-AzureVM -ServiceName 'myvm1' | Add-AzureDataDisk -CreateNew -DiskSizeInGB 10 -DiskLabel 'myddisk' -LUN 1 | Update-AzureVM
![Page 29: Automating and Managing Windows Azure Solutions with Powershell Tom Fuller Windows Azure – Technology Solution Professional @DeveloperTofu](https://reader036.vdocuments.mx/reader036/viewer/2022062511/5517a7225503460e6e8b5f7e/html5/thumbnails/29.jpg)
Deploying into a Virtual Network
Virtual Machine SettingsSet Subnet on VM with Set-AzureSubnet
Deployment SettingsSet Virtual Network -VNetName Set DNS Servers - New-AzureDns and -DNSSettings
![Page 30: Automating and Managing Windows Azure Solutions with Powershell Tom Fuller Windows Azure – Technology Solution Professional @DeveloperTofu](https://reader036.vdocuments.mx/reader036/viewer/2022062511/5517a7225503460e6e8b5f7e/html5/thumbnails/30.jpg)
Provision into a VNET and AD
$dom = 'contoso'$jdom = 'contoso.com'$onPremDNS = New-AzureDns -IPAddress '192.168.1.4' -Name 'OnPremDNS'$cloudDNS = New-AzureDns -IPAddress '10.1.1.4' -Name 'CloudDNS'$computerOU = $advmou = 'OU=AzureVMs,DC=contoso,DC=com‘
New-AzureVMConfig -Name 'myvm1' -InstanceSize 'Small' -ImageName $img | Add-AzureProvisioningConfig -WindowsDomain -Password $pwd -Domain $dom ` -DomainUserName $domUser -DomainPassword $dpwd -JoinDomain $jdom ` -MachineObjectOU 'AzureVMs' | Set-AzureSubnet -SubnetNames 'AppSubnet' | New-AzureVM –ServiceName $svc -AffinityGroup 'adag' ` -VNetName 'ADVNet' -DnsSettings $onPremDNS, $cloudDNS
![Page 31: Automating and Managing Windows Azure Solutions with Powershell Tom Fuller Windows Azure – Technology Solution Professional @DeveloperTofu](https://reader036.vdocuments.mx/reader036/viewer/2022062511/5517a7225503460e6e8b5f7e/html5/thumbnails/31.jpg)
DemoProvisioning and updating a new Virtual Machine from Powershell
![Page 32: Automating and Managing Windows Azure Solutions with Powershell Tom Fuller Windows Azure – Technology Solution Professional @DeveloperTofu](https://reader036.vdocuments.mx/reader036/viewer/2022062511/5517a7225503460e6e8b5f7e/html5/thumbnails/32.jpg)
Automation
![Page 33: Automating and Managing Windows Azure Solutions with Powershell Tom Fuller Windows Azure – Technology Solution Professional @DeveloperTofu](https://reader036.vdocuments.mx/reader036/viewer/2022062511/5517a7225503460e6e8b5f7e/html5/thumbnails/33.jpg)
Adding and Removing Instances
Update a running role to have more or less instances
Set-AzureRole –ServiceName "MySvc1" –Slot "Production" –RoleName "MyTestRole3" –Count 3
![Page 34: Automating and Managing Windows Azure Solutions with Powershell Tom Fuller Windows Azure – Technology Solution Professional @DeveloperTofu](https://reader036.vdocuments.mx/reader036/viewer/2022062511/5517a7225503460e6e8b5f7e/html5/thumbnails/34.jpg)
VM Batch Creation
Create Multiple Configured VMs and Pass to New-AzureVM
$vm1 = New-AzureVMConfig -Name 'myvm1' -InstanceSize 'Small' -ImageName $img | Add-AzureProvisioningConfig -Windows -Password $pwd
$vm2 = New-AzureVMConfig -Name 'myvm1' -InstanceSize 'Small' -ImageName $img | Add-AzureProvisioningConfig -Windows -Password $pwd $vm3 = New-AzureVMConfig -Name 'myvm1' -InstanceSize 'Small' -ImageName $img | Add-AzureProvisioningConfig -Windows -Password $pwd New-AzureVM -CreateService -ServiceName $cloudSvcName -VMs $vm1,$vm2,$vm3 -Location $dc
![Page 35: Automating and Managing Windows Azure Solutions with Powershell Tom Fuller Windows Azure – Technology Solution Professional @DeveloperTofu](https://reader036.vdocuments.mx/reader036/viewer/2022062511/5517a7225503460e6e8b5f7e/html5/thumbnails/35.jpg)
Disk and Image Repository
OS Images
Get-AzureVMImage # Return all Get-AzureVMImage | Where { $_.Category -eq 'Microsoft' } # Return Microsoft Get-AzureVMImage | Where { $_.Category -eq 'User' } # Return CustomGet-AzureVMImage | Where { $_.Category -eq 'Partner' } # Return Partner ImagesGet-AzureVMImage | Where { $_.OS -eq 'Windows' } # Return only Windows OS imagesRemove-AzureVMImage -ImageName 'myimg' -DeleteVHD # Delete image and storageAdd-AzureVMImage -OS 'Windows' -ImageName 'MyWinImage' -MediaLocation 'http://storageaccount/vhds/winimage.vhd' # Add Existing VM Image from Storage
Disks
Get-AzureDisk # Return all Get-AzureDisk | Where { $_.AttachedTo -eq $null } # Return all not attached to a VMGet-AzureDisk | Where { $_.OS -eq $null } # Return only data disks Get-AzureDisk | Where { $_.OS -eq 'Windows' } # Return only Windows OS disksRemove-AzureDisk -DiskName 'mydisk' -DeleteVHD # Delete disk and storageAdd-AzureDisk -OS 'Windows' -DiskName 'MyWinDisk' -MediaLocation 'http://storageaccount/vhds/winosdisk.vhd‘ # Add Existing OS Disk from Storage Add-AzureDisk -DiskName 'MyDataDisk' -MediaLocation 'http://storageaccount/vhds/datadisk.vhd‘# Add Existing Data Disk from Storage
Microsoft, Partner and User
OS Disks or Data Disks
![Page 36: Automating and Managing Windows Azure Solutions with Powershell Tom Fuller Windows Azure – Technology Solution Professional @DeveloperTofu](https://reader036.vdocuments.mx/reader036/viewer/2022062511/5517a7225503460e6e8b5f7e/html5/thumbnails/36.jpg)
Batch Updating Running VMs
Remove RDP and Add New Storage Across all Web Front Ends
Get-AzureVM -ServiceName $svc | Where { $_.Name -match 'wfe' } | foreach { $_ | Remove-AzureEndpoint -Name 'rdp' | Add-AzureDataDisk -CreateNew -DiskSizeInGB 10 -LUN 1 -DiskLabel 'newstorage' | Update-AzureVM}
![Page 37: Automating and Managing Windows Azure Solutions with Powershell Tom Fuller Windows Azure – Technology Solution Professional @DeveloperTofu](https://reader036.vdocuments.mx/reader036/viewer/2022062511/5517a7225503460e6e8b5f7e/html5/thumbnails/37.jpg)
DemoAutomating Scale Up of a Web Role with Powershell
![Page 38: Automating and Managing Windows Azure Solutions with Powershell Tom Fuller Windows Azure – Technology Solution Professional @DeveloperTofu](https://reader036.vdocuments.mx/reader036/viewer/2022062511/5517a7225503460e6e8b5f7e/html5/thumbnails/38.jpg)
Get Started
http://WindowsAzure.com
![Page 39: Automating and Managing Windows Azure Solutions with Powershell Tom Fuller Windows Azure – Technology Solution Professional @DeveloperTofu](https://reader036.vdocuments.mx/reader036/viewer/2022062511/5517a7225503460e6e8b5f7e/html5/thumbnails/39.jpg)
Q&A