@ -0,0 +1,53 @@ | |||||
Param( | |||||
[parameter(Mandatory=$true)][string]$vaultName, | |||||
[parameter(Mandatory=$true)][string]$certName, | |||||
[parameter(Mandatory=$true)][string]$certPwd, | |||||
[parameter(Mandatory=$true)][string]$subjectName, | |||||
[parameter(Mandatory=$false)][string]$ValidityInMonths=12, | |||||
[parameter(Mandatory=$true)][string]$saveDir | |||||
) | |||||
#Log in Azure Account | |||||
Login-AzureRmAccount | |||||
# Create Cert in KeyVault | |||||
Write-Host "Creating certificate in Azure KeyVault..." -ForegroundColor Yellow | |||||
$policy = New-AzureKeyVaultCertificatePolicy -SubjectName $subjectName -IssuerName Self -ValidityInMonths $ValidityInMonths | |||||
Add-AzureKeyVaultCertificate -VaultName $vaultName -Name $certName -CertificatePolicy $policy | |||||
# Downloading Certificate | |||||
Write-Host "Downloading Certificate from KeyVault..." -ForegroundColor Yellow | |||||
$Stoploop = $false | |||||
$Retrycount = 0 | |||||
do { | |||||
try { | |||||
$kvSecret = Get-AzureKeyVaultSecret -VaultName $vaultName -Name $certName -ErrorAction SilentlyContinue | |||||
$kvSecretBytes = [System.Convert]::FromBase64String($kvSecret.SecretValueText) | |||||
$certCollection = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2Collection | |||||
$certCollection.Import($kvSecretBytes,$null,[System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable) | |||||
$protectedCertificateBytes = $certCollection.Export([System.Security.Cryptography.X509Certificates.X509ContentType]::Pkcs12, $certPwd) | |||||
[System.IO.File]::WriteAllBytes($saveDir + "\" + $certName + ".pfx", $protectedCertificateBytes) | |||||
$Stoploop = $true | |||||
Write-Host "Finished!" -ForegroundColor Yellow | |||||
} | |||||
catch { | |||||
if ($Retrycount -gt 5){ | |||||
$Stoploop = $true | |||||
Write-Host "Not possible to retrieve the certificate!" -ForegroundColor Yellow | |||||
} | |||||
else { | |||||
Start-Sleep -Seconds 20 | |||||
$Retrycount = $Retrycount + 1 | |||||
} | |||||
} | |||||
} | |||||
While ($Stoploop -eq $false) | |||||
# Show Certificate Values | |||||
Get-AzureKeyVaultCertificate -VaultName $vaultName -Name $certName |
@ -0,0 +1,88 @@ | |||||
# Deploying Azure Service Fabric (No Secured) | |||||
The ARM template `servicefabricdeploy.json` and its parameter file (`servicefabricdeploy.parameters.json`) are used to create a service fabric cluster environment for linux containers. | |||||
## Editing servicefabricdeploy.parameters.json file | |||||
Edit the following params in `servicefabricdeploy.parameters.json` file to set your values: | |||||
- clusterName: Name of your SF cluster | |||||
- dnsName: Name assigned to your SF dns | |||||
- adminUserName: user name for administration | |||||
- adminPassword: user password for administration | |||||
Optionally, you can modify which ports are opened in the LoadBalancer for accessing externally to the apps: | |||||
- webMvcHttpPort: port externally exposed for the WebMVC app | |||||
- webSpaHttpPort: port externally exposed for the WebSPA app | |||||
- webStatusHttpPort: port externally exposed for the WebStatus app | |||||
- IdSrvHttpRule: port externally exposed for the Identity app | |||||
## Deploy the template | |||||
Once parameter file is edited you can deploy it using [create-resources script](../readme.md). | |||||
i. e. if you are in windows, to deploy sql databases in a new resourcegroup located in westus, go to `deploy\az` folder and type: | |||||
``` | |||||
create-resources.cmd servicefabric\LinuxContainers\servicefabricdeploy newResourceGroup -c westus | |||||
``` | |||||
## Deploy eShopOnServiceFabric with Visual Studio. | |||||
Alternatively, instead of using ARM templates, you can deploy eShop on service fabric directly by publishing the project eShopOnServiceFabric in eShopOnContainers-ServicesAndWebApps.sln with Visual Studio publish tool. | |||||
# Deploying Azure Service Fabric (Secured) | |||||
The ARM template `servicefabricdeploysecured.json` and its parameter file (`servicefabricdeploysecured.parameters.json`) are used to create a service fabric cluster environment for linux containers secured with a certificate. | |||||
## Create Azure Keyvault service | |||||
Go to PortalAzure and create a Keyvault service. Make sure Enable access for deployment checkboxes are selected. | |||||
<img src="../../../../img/sf/create-kv.png"> | |||||
## Generate a certificate in Azure Keyvault | |||||
Execute the gen-keyvaultcert.ps1 script to generate and download a certificate from Keyvault. | |||||
``` | |||||
.\gen-keyvaultcert.ps1 -vaultName <your_keyvault_service> -certName <your_cert_name> -certPwd <your_cert_pwd> -subjectName CN=<your_sf_dns_name>.westeurope.cloudapp.azure.com -saveDir C:\Users\<user>\Downloads | |||||
``` | |||||
## Install the certificate | |||||
Install the certificate under 'Current User' store location and check it as exportable. | |||||
<img src="../../../../img/sf/install-cert.png"> | |||||
## Editing servicefabricdeploysecured.parameters.json file | |||||
Edit the following params in `servicefabricdeploysecured.parameters.json` file to set your values: | |||||
- clusterName: Name of your SF cluster | |||||
- dnsName: Name assigned to your SF dns | |||||
- adminUserName: user name for administration | |||||
- adminPassword: user password for administration | |||||
- sourceVaultValue: keyvault resource id (check azure keyvault properties) | |||||
- certificateUrlValue: certificate url (check azure Keyvault certificate properties) | |||||
- certificateThumbprint: certificate thumbprint (check azure Keyvault certificate properties) | |||||
Optionally, you can modify which ports are opened in the LoadBalancer for accessing externally to the apps: | |||||
- webMvcHttpPort: port externally exposed for the WebMVC app | |||||
- webSpaHttpPort: port externally exposed for the WebSPA app | |||||
- webStatusHttpPort: port externally exposed for the WebStatus app | |||||
- IdSrvHttpRule: port externally exposed for the Identity app | |||||
## Deploy the template | |||||
Once parameter file is edited you can deploy it using [create-resources script](../readme.md). | |||||
``` | |||||
create-resources.cmd servicefabric\LinuxContainers\servicefabricdeploysecured newResourceGroup -c westus | |||||
``` | |||||
## Deploy eShopOnServiceFabric with Visual Studio. | |||||
Modify the cloud.xml file of each Service Fabric application in PublishProfile directory and set your certificate settings to be able to deploy eshopOnContainers in the secured cluster: | |||||
<img src="../../../../img/sf/cloud_publishProfile.png"> | |||||
@ -0,0 +1,751 @@ | |||||
{ | |||||
"$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json", | |||||
"contentVersion": "1.0.0.0", | |||||
"parameters": { | |||||
"clusterLocation": { | |||||
"type": "string", | |||||
"metadata": { | |||||
"description": "Location of the Cluster" | |||||
} | |||||
}, | |||||
"clusterName": { | |||||
"type": "string", | |||||
"defaultValue": "Cluster", | |||||
"metadata": { | |||||
"description": "Name of your cluster - Between 3 and 23 characters. Letters and numbers only" | |||||
} | |||||
}, | |||||
"nt0applicationStartPort": { | |||||
"type": "int", | |||||
"defaultValue": 20000 | |||||
}, | |||||
"nt0applicationEndPort": { | |||||
"type": "int", | |||||
"defaultValue": 30000 | |||||
}, | |||||
"nt0ephemeralStartPort": { | |||||
"type": "int", | |||||
"defaultValue": 49152 | |||||
}, | |||||
"nt0ephemeralEndPort": { | |||||
"type": "int", | |||||
"defaultValue": 65534 | |||||
}, | |||||
"nt0fabricTcpGatewayPort": { | |||||
"type": "int", | |||||
"defaultValue": 19000 | |||||
}, | |||||
"nt0fabricHttpGatewayPort": { | |||||
"type": "int", | |||||
"defaultValue": 19080 | |||||
}, | |||||
"webMvcHttpPort": { | |||||
"type": "int", | |||||
"defaultValue": 5100 | |||||
}, | |||||
"webSpaHttpPort": { | |||||
"type": "int", | |||||
"defaultValue": 5104 | |||||
}, | |||||
"webStatusHttpPort": { | |||||
"type": "int", | |||||
"defaultValue": 5107 | |||||
}, | |||||
"IdSrvHttpRule": { | |||||
"type": "int", | |||||
"defaultValue": 5105 | |||||
}, | |||||
"BasketApiHttpRule": { | |||||
"type": "int", | |||||
"defaultValue": 5103 | |||||
}, | |||||
"CatalogApiHttpRule": { | |||||
"type": "int", | |||||
"defaultValue": 5101 | |||||
}, | |||||
"OrderingApiHttpRule": { | |||||
"type": "int", | |||||
"defaultValue": 5102 | |||||
}, | |||||
"MarketingApiHttpRule": { | |||||
"type": "int", | |||||
"defaultValue": 5110 | |||||
}, | |||||
"LocationsApiHttpRule": { | |||||
"type": "int", | |||||
"defaultValue": 5109 | |||||
}, | |||||
"subnet0Name": { | |||||
"type": "string", | |||||
"defaultValue": "Subnet-0" | |||||
}, | |||||
"subnet0Prefix": { | |||||
"type": "string", | |||||
"defaultValue": "10.0.0.0/24" | |||||
}, | |||||
"computeLocation": { | |||||
"type": "string" | |||||
}, | |||||
"publicIPAddressName": { | |||||
"type": "string", | |||||
"defaultValue": "PublicIP-VM" | |||||
}, | |||||
"publicIPAddressType": { | |||||
"type": "string", | |||||
"allowedValues": [ | |||||
"Dynamic" | |||||
], | |||||
"defaultValue": "Dynamic" | |||||
}, | |||||
"vmStorageAccountContainerName": { | |||||
"type": "string", | |||||
"defaultValue": "vhds" | |||||
}, | |||||
"adminUserName": { | |||||
"type": "string", | |||||
"defaultValue": "testadm", | |||||
"metadata": { | |||||
"description": "Remote desktop user Id" | |||||
} | |||||
}, | |||||
"adminPassword": { | |||||
"type": "securestring", | |||||
"metadata": { | |||||
"description": "Remote desktop user password. Must be a strong password" | |||||
} | |||||
}, | |||||
"virtualNetworkName": { | |||||
"type": "string", | |||||
"defaultValue": "VNet" | |||||
}, | |||||
"addressPrefix": { | |||||
"type": "string", | |||||
"defaultValue": "10.0.0.0/16" | |||||
}, | |||||
"dnsName": { | |||||
"type": "string" | |||||
}, | |||||
"nicName": { | |||||
"type": "string", | |||||
"defaultValue": "NIC" | |||||
}, | |||||
"lbName": { | |||||
"type": "string", | |||||
"defaultValue": "LoadBalancer" | |||||
}, | |||||
"lbIPName": { | |||||
"type": "string", | |||||
"defaultValue": "PublicIP-LB-FE" | |||||
}, | |||||
"overProvision": { | |||||
"type": "string", | |||||
"defaultValue": "false" | |||||
}, | |||||
"vmImagePublisher": { | |||||
"type": "string", | |||||
"defaultValue": "Microsoft.Azure.ServiceFabric" | |||||
}, | |||||
"vmImageOffer": { | |||||
"type": "string", | |||||
"defaultValue": "UbuntuServer" | |||||
}, | |||||
"vmImageSku": { | |||||
"type": "string", | |||||
"defaultValue": "16.04" | |||||
}, | |||||
"vmImageVersion": { | |||||
"type": "string", | |||||
"defaultValue": "6.0.12" | |||||
}, | |||||
"storageAccountType": { | |||||
"type": "string", | |||||
"allowedValues": [ | |||||
"Standard_LRS", | |||||
"Standard_GRS" | |||||
], | |||||
"defaultValue": "Standard_LRS", | |||||
"metadata": { | |||||
"description": "Replication option for the VM image storage account" | |||||
} | |||||
}, | |||||
"supportLogStorageAccountType": { | |||||
"type": "string", | |||||
"allowedValues": [ | |||||
"Standard_LRS", | |||||
"Standard_GRS" | |||||
], | |||||
"defaultValue": "Standard_LRS", | |||||
"metadata": { | |||||
"description": "Replication option for the support log storage account" | |||||
} | |||||
}, | |||||
"supportLogStorageAccountName": { | |||||
"type": "string", | |||||
"defaultValue": "[toLower( concat('sflogs', uniqueString(resourceGroup().id),'2'))]", | |||||
"metadata": { | |||||
"description": "Name for the storage account that contains support logs from the cluster" | |||||
} | |||||
}, | |||||
"applicationDiagnosticsStorageAccountType": { | |||||
"type": "string", | |||||
"allowedValues": [ | |||||
"Standard_LRS", | |||||
"Standard_GRS" | |||||
], | |||||
"defaultValue": "Standard_LRS", | |||||
"metadata": { | |||||
"description": "Replication option for the application diagnostics storage account" | |||||
} | |||||
}, | |||||
"applicationDiagnosticsStorageAccountName": { | |||||
"type": "string", | |||||
"defaultValue": "[toLower(concat(uniqueString(resourceGroup().id), '3' ))]", | |||||
"metadata": { | |||||
"description": "Name for the storage account that contains application diagnostics data from the cluster" | |||||
} | |||||
}, | |||||
"nt0InstanceCount": { | |||||
"type": "int", | |||||
"defaultValue": 1, | |||||
"metadata": { | |||||
"description": "Instance count for node type" | |||||
} | |||||
}, | |||||
"vmNodeType0Name": { | |||||
"type": "string", | |||||
"defaultValue": "primary", | |||||
"maxLength": 9 | |||||
}, | |||||
"vmNodeType0Size": { | |||||
"type": "string", | |||||
"defaultValue": "Standard_D1_v2" | |||||
} | |||||
}, | |||||
"variables": { | |||||
"vmssApiVersion": "2017-03-30", | |||||
"lbApiVersion": "2015-06-15", | |||||
"vNetApiVersion": "2015-06-15", | |||||
"storageApiVersion": "2016-01-01", | |||||
"publicIPApiVersion": "2015-06-15", | |||||
"vnetID": "[resourceId('Microsoft.Network/virtualNetworks',parameters('virtualNetworkName'))]", | |||||
"subnet0Ref": "[concat(variables('vnetID'),'/subnets/',parameters('subnet0Name'))]", | |||||
"wadlogs": "<WadCfg><DiagnosticMonitorConfiguration>", | |||||
"wadperfcounters1": "<PerformanceCounters scheduledTransferPeriod=\"PT1M\"><PerformanceCounterConfiguration counterSpecifier=\"\\Memory\\AvailableMemory\" sampleRate=\"PT15S\" unit=\"Bytes\"><annotation displayName=\"Memory available\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\Memory\\PercentAvailableMemory\" sampleRate=\"PT15S\" unit=\"Percent\"><annotation displayName=\"Mem. percent available\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\Memory\\UsedMemory\" sampleRate=\"PT15S\" unit=\"Bytes\"><annotation displayName=\"Memory used\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\Memory\\PercentUsedMemory\" sampleRate=\"PT15S\" unit=\"Percent\"><annotation displayName=\"Memory percentage\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\Memory\\PercentUsedByCache\" sampleRate=\"PT15S\" unit=\"Percent\"><annotation displayName=\"Mem. used by cache\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\Processor\\PercentIdleTime\" sampleRate=\"PT15S\" unit=\"Percent\"><annotation displayName=\"CPU idle time\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\Processor\\PercentUserTime\" sampleRate=\"PT15S\" unit=\"Percent\"><annotation displayName=\"CPU user time\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\Processor\\PercentProcessorTime\" sampleRate=\"PT15S\" unit=\"Percent\"><annotation displayName=\"CPU percentage guest OS\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\Processor\\PercentIOWaitTime\" sampleRate=\"PT15S\" unit=\"Percent\"><annotation displayName=\"CPU IO wait time\" locale=\"en-us\"/></PerformanceCounterConfiguration>", | |||||
"wadperfcounters2": "<PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk\\BytesPerSecond\" sampleRate=\"PT15S\" unit=\"BytesPerSecond\"><annotation displayName=\"Disk total bytes\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk\\ReadBytesPerSecond\" sampleRate=\"PT15S\" unit=\"BytesPerSecond\"><annotation displayName=\"Disk read guest OS\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk\\WriteBytesPerSecond\" sampleRate=\"PT15S\" unit=\"BytesPerSecond\"><annotation displayName=\"Disk write guest OS\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk\\TransfersPerSecond\" sampleRate=\"PT15S\" unit=\"CountPerSecond\"><annotation displayName=\"Disk transfers\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk\\ReadsPerSecond\" sampleRate=\"PT15S\" unit=\"CountPerSecond\"><annotation displayName=\"Disk reads\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk\\WritesPerSecond\" sampleRate=\"PT15S\" unit=\"CountPerSecond\"><annotation displayName=\"Disk writes\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk\\AverageReadTime\" sampleRate=\"PT15S\" unit=\"Seconds\"><annotation displayName=\"Disk read time\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk\\AverageWriteTime\" sampleRate=\"PT15S\" unit=\"Seconds\"><annotation displayName=\"Disk write time\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk\\AverageTransferTime\" sampleRate=\"PT15S\" unit=\"Seconds\"><annotation displayName=\"Disk transfer time\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk\\AverageDiskQueueLength\" sampleRate=\"PT15S\" unit=\"Count\"><annotation displayName=\"Disk queue length\" locale=\"en-us\"/></PerformanceCounterConfiguration></PerformanceCounters>", | |||||
"wadcfgxstart": "[concat(variables('wadlogs'),variables('wadperfcounters1'),variables('wadperfcounters2'),'<Metrics resourceId=\"')]", | |||||
"wadcfgxend": "[concat('\"><MetricAggregation scheduledTransferPeriod=\"PT1H\"/><MetricAggregation scheduledTransferPeriod=\"PT1M\"/></Metrics></DiagnosticMonitorConfiguration></WadCfg>')]", | |||||
"lbID0": "[resourceId('Microsoft.Network/loadBalancers', concat('LB','-', parameters('clusterName'),'-',parameters('vmNodeType0Name')))]", | |||||
"lbIPConfig0": "[concat(variables('lbID0'),'/frontendIPConfigurations/LoadBalancerIPConfig')]", | |||||
"lbPoolID0": "[concat(variables('lbID0'),'/backendAddressPools/LoadBalancerBEAddressPool')]", | |||||
"lbProbeID0": "[concat(variables('lbID0'),'/probes/FabricGatewayProbe')]", | |||||
"lbHttpProbeID0": "[concat(variables('lbID0'),'/probes/FabricHttpGatewayProbe')]", | |||||
"lbNatPoolID0": "[concat(variables('lbID0'),'/inboundNatPools/LoadBalancerBEAddressNatPool')]", | |||||
"vmStorageAccountName0": "[toLower(concat(uniqueString(resourceGroup().id), '1', '0' ))]", | |||||
"wadmetricsresourceid0": "[concat('/subscriptions/',subscription().subscriptionId,'/resourceGroups/',resourceGroup().name ,'/providers/','Microsoft.Compute/virtualMachineScaleSets/', parameters('vmNodeType0Name'))]" | |||||
}, | |||||
"resources": [ | |||||
{ | |||||
"apiVersion": "[variables('storageApiVersion')]", | |||||
"type": "Microsoft.Storage/storageAccounts", | |||||
"name": "[parameters('supportLogStorageAccountName')]", | |||||
"location": "[parameters('computeLocation')]", | |||||
"dependsOn": [], | |||||
"properties": {}, | |||||
"kind": "Storage", | |||||
"sku": { | |||||
"name": "[parameters('supportLogStorageAccountType')]" | |||||
}, | |||||
"tags": { | |||||
"resourceType": "Service Fabric", | |||||
"clusterName": "[parameters('clusterName')]" | |||||
} | |||||
}, | |||||
{ | |||||
"apiVersion": "[variables('storageApiVersion')]", | |||||
"type": "Microsoft.Storage/storageAccounts", | |||||
"name": "[parameters('applicationDiagnosticsStorageAccountName')]", | |||||
"location": "[parameters('computeLocation')]", | |||||
"dependsOn": [], | |||||
"properties": {}, | |||||
"kind": "Storage", | |||||
"sku": { | |||||
"name": "[parameters('applicationDiagnosticsStorageAccountType')]" | |||||
}, | |||||
"tags": { | |||||
"resourceType": "Service Fabric", | |||||
"clusterName": "[parameters('clusterName')]" | |||||
} | |||||
}, | |||||
{ | |||||
"apiVersion": "[variables('vNetApiVersion')]", | |||||
"type": "Microsoft.Network/virtualNetworks", | |||||
"name": "[parameters('virtualNetworkName')]", | |||||
"location": "[parameters('computeLocation')]", | |||||
"dependsOn": [], | |||||
"properties": { | |||||
"addressSpace": { | |||||
"addressPrefixes": [ | |||||
"[parameters('addressPrefix')]" | |||||
] | |||||
}, | |||||
"subnets": [ | |||||
{ | |||||
"name": "[parameters('subnet0Name')]", | |||||
"properties": { | |||||
"addressPrefix": "[parameters('subnet0Prefix')]" | |||||
} | |||||
} | |||||
] | |||||
}, | |||||
"tags": { | |||||
"resourceType": "Service Fabric", | |||||
"clusterName": "[parameters('clusterName')]" | |||||
} | |||||
}, | |||||
{ | |||||
"apiVersion": "[variables('publicIPApiVersion')]", | |||||
"type": "Microsoft.Network/publicIPAddresses", | |||||
"name": "[concat(parameters('lbIPName'),'-','0')]", | |||||
"location": "[parameters('computeLocation')]", | |||||
"properties": { | |||||
"dnsSettings": { | |||||
"domainNameLabel": "[parameters('dnsName')]" | |||||
}, | |||||
"publicIPAllocationMethod": "Dynamic" | |||||
}, | |||||
"tags": { | |||||
"resourceType": "Service Fabric", | |||||
"clusterName": "[parameters('clusterName')]" | |||||
} | |||||
}, | |||||
{ | |||||
"apiVersion": "[variables('lbApiVersion')]", | |||||
"type": "Microsoft.Network/loadBalancers", | |||||
"name": "[concat('LB','-', parameters('clusterName'),'-',parameters('vmNodeType0Name'))]", | |||||
"location": "[parameters('computeLocation')]", | |||||
"dependsOn": [ | |||||
"[concat('Microsoft.Network/publicIPAddresses/',concat(parameters('lbIPName'),'-','0'))]" | |||||
], | |||||
"properties": { | |||||
"frontendIPConfigurations": [ | |||||
{ | |||||
"name": "LoadBalancerIPConfig", | |||||
"properties": { | |||||
"publicIPAddress": { | |||||
"id": "[resourceId('Microsoft.Network/publicIPAddresses',concat(parameters('lbIPName'),'-','0'))]" | |||||
} | |||||
} | |||||
} | |||||
], | |||||
"backendAddressPools": [ | |||||
{ | |||||
"name": "LoadBalancerBEAddressPool", | |||||
"properties": {} | |||||
} | |||||
], | |||||
"loadBalancingRules": [ | |||||
{ | |||||
"name": "LBRule", | |||||
"properties": { | |||||
"backendAddressPool": { | |||||
"id": "[variables('lbPoolID0')]" | |||||
}, | |||||
"backendPort": "[parameters('nt0fabricTcpGatewayPort')]", | |||||
"enableFloatingIP": "false", | |||||
"frontendIPConfiguration": { | |||||
"id": "[variables('lbIPConfig0')]" | |||||
}, | |||||
"frontendPort": "[parameters('nt0fabricTcpGatewayPort')]", | |||||
"idleTimeoutInMinutes": "5", | |||||
"probe": { | |||||
"id": "[variables('lbProbeID0')]" | |||||
}, | |||||
"protocol": "tcp" | |||||
} | |||||
}, | |||||
{ | |||||
"name": "LBHttpRule", | |||||
"properties": { | |||||
"backendAddressPool": { | |||||
"id": "[variables('lbPoolID0')]" | |||||
}, | |||||
"backendPort": "[parameters('nt0fabricHttpGatewayPort')]", | |||||
"enableFloatingIP": "false", | |||||
"frontendIPConfiguration": { | |||||
"id": "[variables('lbIPConfig0')]" | |||||
}, | |||||
"frontendPort": "[parameters('nt0fabricHttpGatewayPort')]", | |||||
"idleTimeoutInMinutes": "5", | |||||
"probe": { | |||||
"id": "[variables('lbHttpProbeID0')]" | |||||
}, | |||||
"protocol": "tcp" | |||||
} | |||||
}, | |||||
{ | |||||
"name": "WebMVCHttpRule", | |||||
"properties": { | |||||
"backendAddressPool": { | |||||
"id": "[variables('lbPoolID0')]" | |||||
}, | |||||
"backendPort": "[parameters('webMvcHttpPort')]", | |||||
"enableFloatingIP": "false", | |||||
"frontendIPConfiguration": { | |||||
"id": "[variables('lbIPConfig0')]" | |||||
}, | |||||
"frontendPort": "[parameters('webMvcHttpPort')]", | |||||
"idleTimeoutInMinutes": "5", | |||||
"protocol": "tcp" | |||||
} | |||||
}, | |||||
{ | |||||
"name": "WebSPAHttpRule", | |||||
"properties": { | |||||
"backendAddressPool": { | |||||
"id": "[variables('lbPoolID0')]" | |||||
}, | |||||
"backendPort": "[parameters('webSpaHttpPort')]", | |||||
"enableFloatingIP": "false", | |||||
"frontendIPConfiguration": { | |||||
"id": "[variables('lbIPConfig0')]" | |||||
}, | |||||
"frontendPort": "[parameters('webSpaHttpPort')]", | |||||
"idleTimeoutInMinutes": "5", | |||||
"protocol": "tcp" | |||||
} | |||||
}, | |||||
{ | |||||
"name": "WebStatusHttpRule", | |||||
"properties": { | |||||
"backendAddressPool": { | |||||
"id": "[variables('lbPoolID0')]" | |||||
}, | |||||
"backendPort": "[parameters('webStatusHttpPort')]", | |||||
"enableFloatingIP": "false", | |||||
"frontendIPConfiguration": { | |||||
"id": "[variables('lbIPConfig0')]" | |||||
}, | |||||
"frontendPort": "[parameters('webStatusHttpPort')]", | |||||
"idleTimeoutInMinutes": "5", | |||||
"protocol": "tcp" | |||||
} | |||||
}, | |||||
{ | |||||
"name": "IdSrvHttpRule", | |||||
"properties": { | |||||
"backendAddressPool": { | |||||
"id": "[variables('lbPoolID0')]" | |||||
}, | |||||
"backendPort": "[parameters('IdSrvHttpRule')]", | |||||
"enableFloatingIP": "false", | |||||
"frontendIPConfiguration": { | |||||
"id": "[variables('lbIPConfig0')]" | |||||
}, | |||||
"frontendPort": "[parameters('IdSrvHttpRule')]", | |||||
"idleTimeoutInMinutes": "5", | |||||
"protocol": "tcp" | |||||
} | |||||
}, | |||||
{ | |||||
"name": "BasketApiHttpRule", | |||||
"properties": { | |||||
"backendAddressPool": { | |||||
"id": "[variables('lbPoolID0')]" | |||||
}, | |||||
"backendPort": "[parameters('BasketApiHttpRule')]", | |||||
"enableFloatingIP": "false", | |||||
"frontendIPConfiguration": { | |||||
"id": "[variables('lbIPConfig0')]" | |||||
}, | |||||
"frontendPort": "[parameters('BasketApiHttpRule')]", | |||||
"idleTimeoutInMinutes": "5", | |||||
"protocol": "tcp" | |||||
} | |||||
}, | |||||
{ | |||||
"name": "CatalogApiHttpRule", | |||||
"properties": { | |||||
"backendAddressPool": { | |||||
"id": "[variables('lbPoolID0')]" | |||||
}, | |||||
"backendPort": "[parameters('CatalogApiHttpRule')]", | |||||
"enableFloatingIP": "false", | |||||
"frontendIPConfiguration": { | |||||
"id": "[variables('lbIPConfig0')]" | |||||
}, | |||||
"frontendPort": "[parameters('CatalogApiHttpRule')]", | |||||
"idleTimeoutInMinutes": "5", | |||||
"protocol": "tcp" | |||||
} | |||||
}, | |||||
{ | |||||
"name": "OrderingApiHttpRule", | |||||
"properties": { | |||||
"backendAddressPool": { | |||||
"id": "[variables('lbPoolID0')]" | |||||
}, | |||||
"backendPort": "[parameters('OrderingApiHttpRule')]", | |||||
"enableFloatingIP": "false", | |||||
"frontendIPConfiguration": { | |||||
"id": "[variables('lbIPConfig0')]" | |||||
}, | |||||
"frontendPort": "[parameters('OrderingApiHttpRule')]", | |||||
"idleTimeoutInMinutes": "5", | |||||
"protocol": "tcp" | |||||
} | |||||
}, | |||||
{ | |||||
"name": "MarketingApiHttpRule", | |||||
"properties": { | |||||
"backendAddressPool": { | |||||
"id": "[variables('lbPoolID0')]" | |||||
}, | |||||
"backendPort": "[parameters('MarketingApiHttpRule')]", | |||||
"enableFloatingIP": "false", | |||||
"frontendIPConfiguration": { | |||||
"id": "[variables('lbIPConfig0')]" | |||||
}, | |||||
"frontendPort": "[parameters('MarketingApiHttpRule')]", | |||||
"idleTimeoutInMinutes": "5", | |||||
"protocol": "tcp" | |||||
} | |||||
}, | |||||
{ | |||||
"name": "LocationsApiHttpRule", | |||||
"properties": { | |||||
"backendAddressPool": { | |||||
"id": "[variables('lbPoolID0')]" | |||||
}, | |||||
"backendPort": "[parameters('LocationsApiHttpRule')]", | |||||
"enableFloatingIP": "false", | |||||
"frontendIPConfiguration": { | |||||
"id": "[variables('lbIPConfig0')]" | |||||
}, | |||||
"frontendPort": "[parameters('LocationsApiHttpRule')]", | |||||
"idleTimeoutInMinutes": "5", | |||||
"protocol": "tcp" | |||||
} | |||||
} | |||||
], | |||||
"probes": [ | |||||
{ | |||||
"name": "FabricGatewayProbe", | |||||
"properties": { | |||||
"intervalInSeconds": 5, | |||||
"numberOfProbes": 2, | |||||
"port": "[parameters('nt0fabricTcpGatewayPort')]", | |||||
"protocol": "tcp" | |||||
} | |||||
}, | |||||
{ | |||||
"name": "FabricHttpGatewayProbe", | |||||
"properties": { | |||||
"intervalInSeconds": 5, | |||||
"numberOfProbes": 2, | |||||
"port": "[parameters('nt0fabricHttpGatewayPort')]", | |||||
"protocol": "tcp" | |||||
} | |||||
} | |||||
], | |||||
"inboundNatPools": [ | |||||
{ | |||||
"name": "LoadBalancerBEAddressNatPool", | |||||
"properties": { | |||||
"backendPort": "22", | |||||
"frontendIPConfiguration": { | |||||
"id": "[variables('lbIPConfig0')]" | |||||
}, | |||||
"frontendPortRangeEnd": "4500", | |||||
"frontendPortRangeStart": "3389", | |||||
"protocol": "tcp" | |||||
} | |||||
} | |||||
] | |||||
}, | |||||
"tags": { | |||||
"resourceType": "Service Fabric", | |||||
"clusterName": "[parameters('clusterName')]" | |||||
} | |||||
}, | |||||
{ | |||||
"apiVersion": "[variables('vmssApiVersion')]", | |||||
"type": "Microsoft.Compute/virtualMachineScaleSets", | |||||
"name": "[parameters('vmNodeType0Name')]", | |||||
"location": "[parameters('computeLocation')]", | |||||
"dependsOn": [ | |||||
"[concat('Microsoft.Network/virtualNetworks/', parameters('virtualNetworkName'))]", | |||||
"[concat('Microsoft.Network/loadBalancers/', concat('LB','-', parameters('clusterName'),'-',parameters('vmNodeType0Name')))]", | |||||
"[concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName'))]", | |||||
"[concat('Microsoft.Storage/storageAccounts/', parameters('applicationDiagnosticsStorageAccountName'))]" | |||||
], | |||||
"properties": { | |||||
"overprovision": "[parameters('overProvision')]", | |||||
"upgradePolicy": { | |||||
"mode": "Automatic" | |||||
}, | |||||
"virtualMachineProfile": { | |||||
"extensionProfile": { | |||||
"extensions": [ | |||||
{ | |||||
"name": "[concat(parameters('vmNodeType0Name'),'_ServiceFabricLinuxNode')]", | |||||
"properties": { | |||||
"type": "ServiceFabricLinuxNode", | |||||
"autoUpgradeMinorVersion": true, | |||||
"protectedSettings": { | |||||
"StorageAccountKey1": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('supportLogStorageAccountName')),'2015-05-01-preview').key1]", | |||||
"StorageAccountKey2": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('supportLogStorageAccountName')),'2015-05-01-preview').key2]" | |||||
}, | |||||
"publisher": "Microsoft.Azure.ServiceFabric", | |||||
"settings": { | |||||
"clusterEndpoint": "[reference(parameters('clusterName')).clusterEndpoint]", | |||||
"nodeTypeRef": "[parameters('vmNodeType0Name')]", | |||||
"durabilityLevel": "Bronze", | |||||
"enableParallelJobs": true, | |||||
"nicPrefixOverride": "[parameters('subnet0Prefix')]" | |||||
}, | |||||
"typeHandlerVersion": "1.0" | |||||
} | |||||
}, | |||||
{ | |||||
"name": "[concat('VMDiagnosticsVmExt','_vmNodeType0Name')]", | |||||
"properties": { | |||||
"type": "LinuxDiagnostic", | |||||
"autoUpgradeMinorVersion": true, | |||||
"protectedSettings": { | |||||
"storageAccountName": "[parameters('applicationDiagnosticsStorageAccountName')]", | |||||
"storageAccountKey": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('applicationDiagnosticsStorageAccountName')),'2015-05-01-preview').key1]", | |||||
"storageAccountEndPoint": "https://core.windows.net/" | |||||
}, | |||||
"publisher": "Microsoft.OSTCExtensions", | |||||
"settings": { | |||||
"xmlCfg": "[base64(concat(variables('wadcfgxstart'),variables('wadmetricsresourceid0'),variables('wadcfgxend')))]", | |||||
"StorageAccount": "[parameters('applicationDiagnosticsStorageAccountName')]" | |||||
}, | |||||
"typeHandlerVersion": "2.3" | |||||
} | |||||
} | |||||
] | |||||
}, | |||||
"networkProfile": { | |||||
"networkInterfaceConfigurations": [ | |||||
{ | |||||
"name": "[concat(parameters('nicName'), '-0')]", | |||||
"properties": { | |||||
"ipConfigurations": [ | |||||
{ | |||||
"name": "[concat(parameters('nicName'),'-',0)]", | |||||
"properties": { | |||||
"loadBalancerBackendAddressPools": [ | |||||
{ | |||||
"id": "[variables('lbPoolID0')]" | |||||
} | |||||
], | |||||
"loadBalancerInboundNatPools": [ | |||||
{ | |||||
"id": "[variables('lbNatPoolID0')]" | |||||
} | |||||
], | |||||
"subnet": { | |||||
"id": "[variables('subnet0Ref')]" | |||||
} | |||||
} | |||||
} | |||||
], | |||||
"primary": true | |||||
} | |||||
} | |||||
] | |||||
}, | |||||
"osProfile": { | |||||
"adminPassword": "[parameters('adminPassword')]", | |||||
"adminUsername": "[parameters('adminUsername')]", | |||||
"computernamePrefix": "[parameters('vmNodeType0Name')]" | |||||
}, | |||||
"storageProfile": { | |||||
"imageReference": { | |||||
"publisher": "[parameters('vmImagePublisher')]", | |||||
"offer": "[parameters('vmImageOffer')]", | |||||
"sku": "[parameters('vmImageSku')]", | |||||
"version": "[parameters('vmImageVersion')]" | |||||
}, | |||||
"osDisk": { | |||||
"caching": "ReadOnly", | |||||
"createOption": "FromImage", | |||||
"managedDisk": { | |||||
"storageAccountType": "[parameters('storageAccountType')]" | |||||
} | |||||
} | |||||
} | |||||
} | |||||
}, | |||||
"sku": { | |||||
"name": "[parameters('vmNodeType0Size')]", | |||||
"capacity": "[parameters('nt0InstanceCount')]", | |||||
"tier": "Standard" | |||||
}, | |||||
"tags": { | |||||
"resourceType": "Service Fabric", | |||||
"clusterName": "[parameters('clusterName')]" | |||||
} | |||||
}, | |||||
{ | |||||
"apiVersion": "2017-07-01-preview", | |||||
"type": "Microsoft.ServiceFabric/clusters", | |||||
"name": "[parameters('clusterName')]", | |||||
"location": "[parameters('clusterLocation')]", | |||||
"dependsOn": [ | |||||
"[concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName'))]" | |||||
], | |||||
"properties": { | |||||
"addonFeatures": [ | |||||
"DnsService" | |||||
], | |||||
"clientCertificateCommonNames": [], | |||||
"clientCertificateThumbprints": [], | |||||
"clusterCodeVersion": "6.0.120.1", | |||||
"clusterState": "Default", | |||||
"diagnosticsStorageAccountConfig": { | |||||
"blobEndpoint": "[reference(concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName')), variables('storageApiVersion')).primaryEndpoints.blob]", | |||||
"protectedAccountKeyName": "StorageAccountKey1", | |||||
"queueEndpoint": "[reference(concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName')), variables('storageApiVersion')).primaryEndpoints.queue]", | |||||
"storageAccountName": "[parameters('supportLogStorageAccountName')]", | |||||
"tableEndpoint": "[reference(concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName')), variables('storageApiVersion')).primaryEndpoints.table]" | |||||
}, | |||||
"fabricSettings": [], | |||||
"managementEndpoint": "[concat('http://',reference(concat(parameters('lbIPName'),'-','0')).dnsSettings.fqdn,':',parameters('nt0fabricHttpGatewayPort'))]", | |||||
"nodeTypes": [ | |||||
{ | |||||
"name": "[parameters('vmNodeType0Name')]", | |||||
"applicationPorts": { | |||||
"endPort": "[parameters('nt0applicationEndPort')]", | |||||
"startPort": "[parameters('nt0applicationStartPort')]" | |||||
}, | |||||
"clientConnectionEndpointPort": "[parameters('nt0fabricTcpGatewayPort')]", | |||||
"durabilityLevel": "Bronze", | |||||
"ephemeralPorts": { | |||||
"endPort": "[parameters('nt0ephemeralEndPort')]", | |||||
"startPort": "[parameters('nt0ephemeralStartPort')]" | |||||
}, | |||||
"httpGatewayEndpointPort": "[parameters('nt0fabricHttpGatewayPort')]", | |||||
"isPrimary": true, | |||||
"vmInstanceCount": "[parameters('nt0InstanceCount')]" | |||||
} | |||||
], | |||||
"provisioningState": "Default", | |||||
"reliabilityLevel": "None", | |||||
"upgradeMode": "Manual", | |||||
"vmImage": "Linux" | |||||
}, | |||||
"tags": { | |||||
"resourceType": "Service Fabric", | |||||
"clusterName": "[parameters('clusterName')]" | |||||
} | |||||
} | |||||
], | |||||
"outputs": { | |||||
"clusterProperties": { | |||||
"value": "[reference(parameters('clusterName'))]", | |||||
"type": "object" | |||||
} | |||||
} | |||||
} |
@ -0,0 +1,93 @@ | |||||
{ | |||||
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#", | |||||
"contentVersion": "1.0.0.0", | |||||
"parameters": { | |||||
"clusterName": { | |||||
"value": "your_sf_name" | |||||
}, | |||||
"clusterLocation": { | |||||
"value": "westeurope" | |||||
}, | |||||
"computeLocation": { | |||||
"value": "westeurope" | |||||
}, | |||||
"adminUserName": { | |||||
"value": "eshop" | |||||
}, | |||||
"adminPassword": { | |||||
"value": "your_admin_password" | |||||
}, | |||||
"nicName": { | |||||
"value": "NIC-eshoponsflin" | |||||
}, | |||||
"publicIPAddressName": { | |||||
"value": "eshoponsflin-PubIP" | |||||
}, | |||||
"dnsName": { | |||||
"value": "your_sf_dns" | |||||
}, | |||||
"virtualNetworkName": { | |||||
"value": "VNet-eshoponsflin" | |||||
}, | |||||
"lbName": { | |||||
"value": "LB-eshoponsflin" | |||||
}, | |||||
"lbIPName": { | |||||
"value": "LBIP-eshoponsflin" | |||||
}, | |||||
"vmImageSku": { | |||||
"value": "16.04-LTS" | |||||
}, | |||||
"vmImageVersion": { | |||||
"value": "latest" | |||||
}, | |||||
"vmImagePublisher": { | |||||
"value": "Canonical" | |||||
}, | |||||
"nt0ephemeralStartPort": { | |||||
"value": 49152 | |||||
}, | |||||
"nt0ephemeralEndPort": { | |||||
"value": 65534 | |||||
}, | |||||
"nt0applicationStartPort": { | |||||
"value": 20000 | |||||
}, | |||||
"nt0applicationEndPort": { | |||||
"value": 30000 | |||||
}, | |||||
"nt0fabricTcpGatewayPort": { | |||||
"value": 19000 | |||||
}, | |||||
"nt0fabricHttpGatewayPort": { | |||||
"value": 19080 | |||||
}, | |||||
"webMvcHttpPort": { | |||||
"value": 5100 | |||||
}, | |||||
"webSpaHttpPort": { | |||||
"value": 5104 | |||||
}, | |||||
"webStatusHttpPort": { | |||||
"value": 5107 | |||||
}, | |||||
"IdSrvHttpRule": { | |||||
"value": 5105 | |||||
}, | |||||
"BasketApiHttpRule": { | |||||
"value": 5103 | |||||
}, | |||||
"CatalogApiHttpRule": { | |||||
"value": 5101 | |||||
}, | |||||
"OrderingApiHttpRule": { | |||||
"value": 5102 | |||||
}, | |||||
"MarketingApiHttpRule": { | |||||
"value": 5110 | |||||
}, | |||||
"LocationsApiHttpRule": { | |||||
"value": 5109 | |||||
} | |||||
} | |||||
} |
@ -0,0 +1,821 @@ | |||||
{ | |||||
"$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json", | |||||
"contentVersion": "1.0.0.0", | |||||
"parameters": { | |||||
"clusterLocation": { | |||||
"type": "string", | |||||
"metadata": { | |||||
"description": "Location of the Cluster" | |||||
} | |||||
}, | |||||
"clusterName": { | |||||
"type": "string", | |||||
"defaultValue": "Cluster", | |||||
"metadata": { | |||||
"description": "Name of your cluster - Between 3 and 23 characters. Letters and numbers only" | |||||
} | |||||
}, | |||||
"nt0applicationStartPort": { | |||||
"type": "int", | |||||
"defaultValue": 20000 | |||||
}, | |||||
"nt0applicationEndPort": { | |||||
"type": "int", | |||||
"defaultValue": 30000 | |||||
}, | |||||
"nt0ephemeralStartPort": { | |||||
"type": "int", | |||||
"defaultValue": 49152 | |||||
}, | |||||
"nt0ephemeralEndPort": { | |||||
"type": "int", | |||||
"defaultValue": 65534 | |||||
}, | |||||
"nt0fabricTcpGatewayPort": { | |||||
"type": "int", | |||||
"defaultValue": 19000 | |||||
}, | |||||
"nt0fabricHttpGatewayPort": { | |||||
"type": "int", | |||||
"defaultValue": 19080 | |||||
}, | |||||
"webMvcHttpPort": { | |||||
"type": "int", | |||||
"defaultValue": 5100 | |||||
}, | |||||
"webSpaHttpPort": { | |||||
"type": "int", | |||||
"defaultValue": 5104 | |||||
}, | |||||
"webStatusHttpPort": { | |||||
"type": "int", | |||||
"defaultValue": 5107 | |||||
}, | |||||
"IdSrvHttpRule": { | |||||
"type": "int", | |||||
"defaultValue": 5105 | |||||
}, | |||||
"BasketApiHttpRule": { | |||||
"type": "int", | |||||
"defaultValue": 5103 | |||||
}, | |||||
"CatalogApiHttpRule": { | |||||
"type": "int", | |||||
"defaultValue": 5101 | |||||
}, | |||||
"OrderingApiHttpRule": { | |||||
"type": "int", | |||||
"defaultValue": 5102 | |||||
}, | |||||
"MarketingApiHttpRule": { | |||||
"type": "int", | |||||
"defaultValue": 5110 | |||||
}, | |||||
"LocationsApiHttpRule": { | |||||
"type": "int", | |||||
"defaultValue": 5109 | |||||
}, | |||||
"subnet0Name": { | |||||
"type": "string", | |||||
"defaultValue": "Subnet-0" | |||||
}, | |||||
"subnet0Prefix": { | |||||
"type": "string", | |||||
"defaultValue": "10.0.0.0/24" | |||||
}, | |||||
"computeLocation": { | |||||
"type": "string" | |||||
}, | |||||
"publicIPAddressName": { | |||||
"type": "string", | |||||
"defaultValue": "PublicIP-VM" | |||||
}, | |||||
"publicIPAddressType": { | |||||
"type": "string", | |||||
"allowedValues": [ | |||||
"Dynamic" | |||||
], | |||||
"defaultValue": "Dynamic" | |||||
}, | |||||
"vmStorageAccountContainerName": { | |||||
"type": "string", | |||||
"defaultValue": "vhds" | |||||
}, | |||||
"adminUserName": { | |||||
"type": "string", | |||||
"defaultValue": "testadm", | |||||
"metadata": { | |||||
"description": "Remote desktop user Id" | |||||
} | |||||
}, | |||||
"adminPassword": { | |||||
"type": "securestring", | |||||
"metadata": { | |||||
"description": "Remote desktop user password. Must be a strong password" | |||||
} | |||||
}, | |||||
"virtualNetworkName": { | |||||
"type": "string", | |||||
"defaultValue": "VNet" | |||||
}, | |||||
"addressPrefix": { | |||||
"type": "string", | |||||
"defaultValue": "10.0.0.0/16" | |||||
}, | |||||
"dnsName": { | |||||
"type": "string" | |||||
}, | |||||
"nicName": { | |||||
"type": "string", | |||||
"defaultValue": "NIC" | |||||
}, | |||||
"lbName": { | |||||
"type": "string", | |||||
"defaultValue": "LoadBalancer" | |||||
}, | |||||
"lbIPName": { | |||||
"type": "string", | |||||
"defaultValue": "PublicIP-LB-FE" | |||||
}, | |||||
"overProvision": { | |||||
"type": "string", | |||||
"defaultValue": "false" | |||||
}, | |||||
"vmImagePublisher": { | |||||
"type": "string", | |||||
"defaultValue": "Microsoft.Azure.ServiceFabric" | |||||
}, | |||||
"vmImageOffer": { | |||||
"type": "string", | |||||
"defaultValue": "UbuntuServer" | |||||
}, | |||||
"vmImageSku": { | |||||
"type": "string", | |||||
"defaultValue": "16.04" | |||||
}, | |||||
"vmImageVersion": { | |||||
"type": "string", | |||||
"defaultValue": "6.0.12" | |||||
}, | |||||
"clusterProtectionLevel": { | |||||
"type": "string", | |||||
"allowedValues": [ | |||||
"None", | |||||
"Sign", | |||||
"EncryptAndSign" | |||||
], | |||||
"defaultValue": "EncryptAndSign", | |||||
"metadata": { | |||||
"description": "Protection level.Three values are allowed - EncryptAndSign, Sign, None. It is best to keep the default of EncryptAndSign, unless you have a need not to" | |||||
} | |||||
}, | |||||
"certificateStoreValue": { | |||||
"type": "string", | |||||
"allowedValues": [ | |||||
"My" | |||||
], | |||||
"defaultValue": "My", | |||||
"metadata": { | |||||
"description": "The store name where the cert will be deployed in the virtual machine" | |||||
} | |||||
}, | |||||
"certificateThumbprint": { | |||||
"type": "string", | |||||
"metadata": { | |||||
"description": "Certificate Thumbprint" | |||||
} | |||||
}, | |||||
"sourceVaultValue": { | |||||
"type": "string", | |||||
"metadata": { | |||||
"description": "Resource Id of the key vault, is should be in the format of /subscriptions/<Sub ID>/resourceGroups/<Resource group name>/providers/Microsoft.KeyVault/vaults/<vault name>" | |||||
} | |||||
}, | |||||
"certificateUrlValue": { | |||||
"type": "string", | |||||
"metadata": { | |||||
"description": "Refers to the location URL in your key vault where the certificate was uploaded, it is should be in the format of https://<name of the vault>.vault.azure.net:443/secrets/<exact location>" | |||||
} | |||||
}, | |||||
"storageAccountType": { | |||||
"type": "string", | |||||
"allowedValues": [ | |||||
"Standard_LRS", | |||||
"Standard_GRS" | |||||
], | |||||
"defaultValue": "Standard_LRS", | |||||
"metadata": { | |||||
"description": "Replication option for the VM image storage account" | |||||
} | |||||
}, | |||||
"supportLogStorageAccountType": { | |||||
"type": "string", | |||||
"allowedValues": [ | |||||
"Standard_LRS", | |||||
"Standard_GRS" | |||||
], | |||||
"defaultValue": "Standard_LRS", | |||||
"metadata": { | |||||
"description": "Replication option for the support log storage account" | |||||
} | |||||
}, | |||||
"supportLogStorageAccountName": { | |||||
"type": "string", | |||||
"defaultValue": "[toLower( concat('sflogs', uniqueString(resourceGroup().id),'2'))]", | |||||
"metadata": { | |||||
"description": "Name for the storage account that contains support logs from the cluster" | |||||
} | |||||
}, | |||||
"applicationDiagnosticsStorageAccountType": { | |||||
"type": "string", | |||||
"allowedValues": [ | |||||
"Standard_LRS", | |||||
"Standard_GRS" | |||||
], | |||||
"defaultValue": "Standard_LRS", | |||||
"metadata": { | |||||
"description": "Replication option for the application diagnostics storage account" | |||||
} | |||||
}, | |||||
"applicationDiagnosticsStorageAccountName": { | |||||
"type": "string", | |||||
"defaultValue": "[toLower(concat(uniqueString(resourceGroup().id), '3' ))]", | |||||
"metadata": { | |||||
"description": "Name for the storage account that contains application diagnostics data from the cluster" | |||||
} | |||||
}, | |||||
"nt0InstanceCount": { | |||||
"type": "int", | |||||
"defaultValue": 5, | |||||
"metadata": { | |||||
"description": "Instance count for node type" | |||||
} | |||||
}, | |||||
"vmNodeType0Name": { | |||||
"type": "string", | |||||
"defaultValue": "primary", | |||||
"maxLength": 9 | |||||
}, | |||||
"vmNodeType0Size": { | |||||
"type": "string", | |||||
"defaultValue": "Standard_D1_v2" | |||||
} | |||||
}, | |||||
"variables": { | |||||
"vmssApiVersion": "2017-03-30", | |||||
"lbApiVersion": "2015-06-15", | |||||
"vNetApiVersion": "2015-06-15", | |||||
"storageApiVersion": "2016-01-01", | |||||
"publicIPApiVersion": "2015-06-15", | |||||
"vnetID": "[resourceId('Microsoft.Network/virtualNetworks',parameters('virtualNetworkName'))]", | |||||
"subnet0Ref": "[concat(variables('vnetID'),'/subnets/',parameters('subnet0Name'))]", | |||||
"wadlogs": "<WadCfg><DiagnosticMonitorConfiguration>", | |||||
"wadperfcounters1": "<PerformanceCounters scheduledTransferPeriod=\"PT1M\"><PerformanceCounterConfiguration counterSpecifier=\"\\Memory\\AvailableMemory\" sampleRate=\"PT15S\" unit=\"Bytes\"><annotation displayName=\"Memory available\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\Memory\\PercentAvailableMemory\" sampleRate=\"PT15S\" unit=\"Percent\"><annotation displayName=\"Mem. percent available\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\Memory\\UsedMemory\" sampleRate=\"PT15S\" unit=\"Bytes\"><annotation displayName=\"Memory used\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\Memory\\PercentUsedMemory\" sampleRate=\"PT15S\" unit=\"Percent\"><annotation displayName=\"Memory percentage\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\Memory\\PercentUsedByCache\" sampleRate=\"PT15S\" unit=\"Percent\"><annotation displayName=\"Mem. used by cache\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\Processor\\PercentIdleTime\" sampleRate=\"PT15S\" unit=\"Percent\"><annotation displayName=\"CPU idle time\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\Processor\\PercentUserTime\" sampleRate=\"PT15S\" unit=\"Percent\"><annotation displayName=\"CPU user time\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\Processor\\PercentProcessorTime\" sampleRate=\"PT15S\" unit=\"Percent\"><annotation displayName=\"CPU percentage guest OS\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\Processor\\PercentIOWaitTime\" sampleRate=\"PT15S\" unit=\"Percent\"><annotation displayName=\"CPU IO wait time\" locale=\"en-us\"/></PerformanceCounterConfiguration>", | |||||
"wadperfcounters2": "<PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk\\BytesPerSecond\" sampleRate=\"PT15S\" unit=\"BytesPerSecond\"><annotation displayName=\"Disk total bytes\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk\\ReadBytesPerSecond\" sampleRate=\"PT15S\" unit=\"BytesPerSecond\"><annotation displayName=\"Disk read guest OS\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk\\WriteBytesPerSecond\" sampleRate=\"PT15S\" unit=\"BytesPerSecond\"><annotation displayName=\"Disk write guest OS\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk\\TransfersPerSecond\" sampleRate=\"PT15S\" unit=\"CountPerSecond\"><annotation displayName=\"Disk transfers\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk\\ReadsPerSecond\" sampleRate=\"PT15S\" unit=\"CountPerSecond\"><annotation displayName=\"Disk reads\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk\\WritesPerSecond\" sampleRate=\"PT15S\" unit=\"CountPerSecond\"><annotation displayName=\"Disk writes\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk\\AverageReadTime\" sampleRate=\"PT15S\" unit=\"Seconds\"><annotation displayName=\"Disk read time\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk\\AverageWriteTime\" sampleRate=\"PT15S\" unit=\"Seconds\"><annotation displayName=\"Disk write time\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk\\AverageTransferTime\" sampleRate=\"PT15S\" unit=\"Seconds\"><annotation displayName=\"Disk transfer time\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk\\AverageDiskQueueLength\" sampleRate=\"PT15S\" unit=\"Count\"><annotation displayName=\"Disk queue length\" locale=\"en-us\"/></PerformanceCounterConfiguration></PerformanceCounters>", | |||||
"wadcfgxstart": "[concat(variables('wadlogs'),variables('wadperfcounters1'),variables('wadperfcounters2'),'<Metrics resourceId=\"')]", | |||||
"wadcfgxend": "[concat('\"><MetricAggregation scheduledTransferPeriod=\"PT1H\"/><MetricAggregation scheduledTransferPeriod=\"PT1M\"/></Metrics></DiagnosticMonitorConfiguration></WadCfg>')]", | |||||
"lbID0": "[resourceId('Microsoft.Network/loadBalancers', concat('LB','-', parameters('clusterName'),'-',parameters('vmNodeType0Name')))]", | |||||
"lbIPConfig0": "[concat(variables('lbID0'),'/frontendIPConfigurations/LoadBalancerIPConfig')]", | |||||
"lbPoolID0": "[concat(variables('lbID0'),'/backendAddressPools/LoadBalancerBEAddressPool')]", | |||||
"lbProbeID0": "[concat(variables('lbID0'),'/probes/FabricGatewayProbe')]", | |||||
"lbHttpProbeID0": "[concat(variables('lbID0'),'/probes/FabricHttpGatewayProbe')]", | |||||
"lbNatPoolID0": "[concat(variables('lbID0'),'/inboundNatPools/LoadBalancerBEAddressNatPool')]", | |||||
"vmStorageAccountName0": "[toLower(concat(uniqueString(resourceGroup().id), '1', '0' ))]", | |||||
"wadmetricsresourceid0": "[concat('/subscriptions/',subscription().subscriptionId,'/resourceGroups/',resourceGroup().name ,'/providers/','Microsoft.Compute/virtualMachineScaleSets/', parameters('vmNodeType0Name'))]" | |||||
}, | |||||
"resources": [ | |||||
{ | |||||
"apiVersion": "[variables('storageApiVersion')]", | |||||
"type": "Microsoft.Storage/storageAccounts", | |||||
"name": "[parameters('supportLogStorageAccountName')]", | |||||
"location": "[parameters('computeLocation')]", | |||||
"dependsOn": [], | |||||
"properties": {}, | |||||
"kind": "Storage", | |||||
"sku": { | |||||
"name": "[parameters('supportLogStorageAccountType')]" | |||||
}, | |||||
"tags": { | |||||
"resourceType": "Service Fabric", | |||||
"clusterName": "[parameters('clusterName')]" | |||||
} | |||||
}, | |||||
{ | |||||
"apiVersion": "[variables('storageApiVersion')]", | |||||
"type": "Microsoft.Storage/storageAccounts", | |||||
"name": "[parameters('applicationDiagnosticsStorageAccountName')]", | |||||
"location": "[parameters('computeLocation')]", | |||||
"dependsOn": [], | |||||
"properties": {}, | |||||
"kind": "Storage", | |||||
"sku": { | |||||
"name": "[parameters('applicationDiagnosticsStorageAccountType')]" | |||||
}, | |||||
"tags": { | |||||
"resourceType": "Service Fabric", | |||||
"clusterName": "[parameters('clusterName')]" | |||||
} | |||||
}, | |||||
{ | |||||
"apiVersion": "[variables('vNetApiVersion')]", | |||||
"type": "Microsoft.Network/virtualNetworks", | |||||
"name": "[parameters('virtualNetworkName')]", | |||||
"location": "[parameters('computeLocation')]", | |||||
"dependsOn": [], | |||||
"properties": { | |||||
"addressSpace": { | |||||
"addressPrefixes": [ | |||||
"[parameters('addressPrefix')]" | |||||
] | |||||
}, | |||||
"subnets": [ | |||||
{ | |||||
"name": "[parameters('subnet0Name')]", | |||||
"properties": { | |||||
"addressPrefix": "[parameters('subnet0Prefix')]" | |||||
} | |||||
} | |||||
] | |||||
}, | |||||
"tags": { | |||||
"resourceType": "Service Fabric", | |||||
"clusterName": "[parameters('clusterName')]" | |||||
} | |||||
}, | |||||
{ | |||||
"apiVersion": "[variables('publicIPApiVersion')]", | |||||
"type": "Microsoft.Network/publicIPAddresses", | |||||
"name": "[concat(parameters('lbIPName'),'-','0')]", | |||||
"location": "[parameters('computeLocation')]", | |||||
"properties": { | |||||
"dnsSettings": { | |||||
"domainNameLabel": "[parameters('dnsName')]" | |||||
}, | |||||
"publicIPAllocationMethod": "Dynamic" | |||||
}, | |||||
"tags": { | |||||
"resourceType": "Service Fabric", | |||||
"clusterName": "[parameters('clusterName')]" | |||||
} | |||||
}, | |||||
{ | |||||
"apiVersion": "[variables('lbApiVersion')]", | |||||
"type": "Microsoft.Network/loadBalancers", | |||||
"name": "[concat('LB','-', parameters('clusterName'),'-',parameters('vmNodeType0Name'))]", | |||||
"location": "[parameters('computeLocation')]", | |||||
"dependsOn": [ | |||||
"[concat('Microsoft.Network/publicIPAddresses/',concat(parameters('lbIPName'),'-','0'))]" | |||||
], | |||||
"properties": { | |||||
"frontendIPConfigurations": [ | |||||
{ | |||||
"name": "LoadBalancerIPConfig", | |||||
"properties": { | |||||
"publicIPAddress": { | |||||
"id": "[resourceId('Microsoft.Network/publicIPAddresses',concat(parameters('lbIPName'),'-','0'))]" | |||||
} | |||||
} | |||||
} | |||||
], | |||||
"backendAddressPools": [ | |||||
{ | |||||
"name": "LoadBalancerBEAddressPool", | |||||
"properties": {} | |||||
} | |||||
], | |||||
"loadBalancingRules": [ | |||||
{ | |||||
"name": "LBRule", | |||||
"properties": { | |||||
"backendAddressPool": { | |||||
"id": "[variables('lbPoolID0')]" | |||||
}, | |||||
"backendPort": "[parameters('nt0fabricTcpGatewayPort')]", | |||||
"enableFloatingIP": "false", | |||||
"frontendIPConfiguration": { | |||||
"id": "[variables('lbIPConfig0')]" | |||||
}, | |||||
"frontendPort": "[parameters('nt0fabricTcpGatewayPort')]", | |||||
"idleTimeoutInMinutes": "5", | |||||
"probe": { | |||||
"id": "[variables('lbProbeID0')]" | |||||
}, | |||||
"protocol": "tcp" | |||||
} | |||||
}, | |||||
{ | |||||
"name": "LBHttpRule", | |||||
"properties": { | |||||
"backendAddressPool": { | |||||
"id": "[variables('lbPoolID0')]" | |||||
}, | |||||
"backendPort": "[parameters('nt0fabricHttpGatewayPort')]", | |||||
"enableFloatingIP": "false", | |||||
"frontendIPConfiguration": { | |||||
"id": "[variables('lbIPConfig0')]" | |||||
}, | |||||
"frontendPort": "[parameters('nt0fabricHttpGatewayPort')]", | |||||
"idleTimeoutInMinutes": "5", | |||||
"probe": { | |||||
"id": "[variables('lbHttpProbeID0')]" | |||||
}, | |||||
"protocol": "tcp" | |||||
} | |||||
}, | |||||
{ | |||||
"name": "WebMVCHttpRule", | |||||
"properties": { | |||||
"backendAddressPool": { | |||||
"id": "[variables('lbPoolID0')]" | |||||
}, | |||||
"backendPort": "[parameters('webMvcHttpPort')]", | |||||
"enableFloatingIP": "false", | |||||
"frontendIPConfiguration": { | |||||
"id": "[variables('lbIPConfig0')]" | |||||
}, | |||||
"frontendPort": "[parameters('webMvcHttpPort')]", | |||||
"idleTimeoutInMinutes": "5", | |||||
"protocol": "tcp" | |||||
} | |||||
}, | |||||
{ | |||||
"name": "WebSPAHttpRule", | |||||
"properties": { | |||||
"backendAddressPool": { | |||||
"id": "[variables('lbPoolID0')]" | |||||
}, | |||||
"backendPort": "[parameters('webSpaHttpPort')]", | |||||
"enableFloatingIP": "false", | |||||
"frontendIPConfiguration": { | |||||
"id": "[variables('lbIPConfig0')]" | |||||
}, | |||||
"frontendPort": "[parameters('webSpaHttpPort')]", | |||||
"idleTimeoutInMinutes": "5", | |||||
"protocol": "tcp" | |||||
} | |||||
}, | |||||
{ | |||||
"name": "WebStatusHttpRule", | |||||
"properties": { | |||||
"backendAddressPool": { | |||||
"id": "[variables('lbPoolID0')]" | |||||
}, | |||||
"backendPort": "[parameters('webStatusHttpPort')]", | |||||
"enableFloatingIP": "false", | |||||
"frontendIPConfiguration": { | |||||
"id": "[variables('lbIPConfig0')]" | |||||
}, | |||||
"frontendPort": "[parameters('webStatusHttpPort')]", | |||||
"idleTimeoutInMinutes": "5", | |||||
"protocol": "tcp" | |||||
} | |||||
}, | |||||
{ | |||||
"name": "IdSrvHttpRule", | |||||
"properties": { | |||||
"backendAddressPool": { | |||||
"id": "[variables('lbPoolID0')]" | |||||
}, | |||||
"backendPort": "[parameters('IdSrvHttpRule')]", | |||||
"enableFloatingIP": "false", | |||||
"frontendIPConfiguration": { | |||||
"id": "[variables('lbIPConfig0')]" | |||||
}, | |||||
"frontendPort": "[parameters('IdSrvHttpRule')]", | |||||
"idleTimeoutInMinutes": "5", | |||||
"protocol": "tcp" | |||||
} | |||||
}, | |||||
{ | |||||
"name": "BasketApiHttpRule", | |||||
"properties": { | |||||
"backendAddressPool": { | |||||
"id": "[variables('lbPoolID0')]" | |||||
}, | |||||
"backendPort": "[parameters('BasketApiHttpRule')]", | |||||
"enableFloatingIP": "false", | |||||
"frontendIPConfiguration": { | |||||
"id": "[variables('lbIPConfig0')]" | |||||
}, | |||||
"frontendPort": "[parameters('BasketApiHttpRule')]", | |||||
"idleTimeoutInMinutes": "5", | |||||
"protocol": "tcp" | |||||
} | |||||
}, | |||||
{ | |||||
"name": "CatalogApiHttpRule", | |||||
"properties": { | |||||
"backendAddressPool": { | |||||
"id": "[variables('lbPoolID0')]" | |||||
}, | |||||
"backendPort": "[parameters('CatalogApiHttpRule')]", | |||||
"enableFloatingIP": "false", | |||||
"frontendIPConfiguration": { | |||||
"id": "[variables('lbIPConfig0')]" | |||||
}, | |||||
"frontendPort": "[parameters('CatalogApiHttpRule')]", | |||||
"idleTimeoutInMinutes": "5", | |||||
"protocol": "tcp" | |||||
} | |||||
}, | |||||
{ | |||||
"name": "OrderingApiHttpRule", | |||||
"properties": { | |||||
"backendAddressPool": { | |||||
"id": "[variables('lbPoolID0')]" | |||||
}, | |||||
"backendPort": "[parameters('OrderingApiHttpRule')]", | |||||
"enableFloatingIP": "false", | |||||
"frontendIPConfiguration": { | |||||
"id": "[variables('lbIPConfig0')]" | |||||
}, | |||||
"frontendPort": "[parameters('OrderingApiHttpRule')]", | |||||
"idleTimeoutInMinutes": "5", | |||||
"protocol": "tcp" | |||||
} | |||||
}, | |||||
{ | |||||
"name": "MarketingApiHttpRule", | |||||
"properties": { | |||||
"backendAddressPool": { | |||||
"id": "[variables('lbPoolID0')]" | |||||
}, | |||||
"backendPort": "[parameters('MarketingApiHttpRule')]", | |||||
"enableFloatingIP": "false", | |||||
"frontendIPConfiguration": { | |||||
"id": "[variables('lbIPConfig0')]" | |||||
}, | |||||
"frontendPort": "[parameters('MarketingApiHttpRule')]", | |||||
"idleTimeoutInMinutes": "5", | |||||
"protocol": "tcp" | |||||
} | |||||
}, | |||||
{ | |||||
"name": "LocationsApiHttpRule", | |||||
"properties": { | |||||
"backendAddressPool": { | |||||
"id": "[variables('lbPoolID0')]" | |||||
}, | |||||
"backendPort": "[parameters('LocationsApiHttpRule')]", | |||||
"enableFloatingIP": "false", | |||||
"frontendIPConfiguration": { | |||||
"id": "[variables('lbIPConfig0')]" | |||||
}, | |||||
"frontendPort": "[parameters('LocationsApiHttpRule')]", | |||||
"idleTimeoutInMinutes": "5", | |||||
"protocol": "tcp" | |||||
} | |||||
} | |||||
], | |||||
"probes": [ | |||||
{ | |||||
"name": "FabricGatewayProbe", | |||||
"properties": { | |||||
"intervalInSeconds": 5, | |||||
"numberOfProbes": 2, | |||||
"port": "[parameters('nt0fabricTcpGatewayPort')]", | |||||
"protocol": "tcp" | |||||
} | |||||
}, | |||||
{ | |||||
"name": "FabricHttpGatewayProbe", | |||||
"properties": { | |||||
"intervalInSeconds": 5, | |||||
"numberOfProbes": 2, | |||||
"port": "[parameters('nt0fabricHttpGatewayPort')]", | |||||
"protocol": "tcp" | |||||
} | |||||
} | |||||
], | |||||
"inboundNatPools": [ | |||||
{ | |||||
"name": "LoadBalancerBEAddressNatPool", | |||||
"properties": { | |||||
"backendPort": "22", | |||||
"frontendIPConfiguration": { | |||||
"id": "[variables('lbIPConfig0')]" | |||||
}, | |||||
"frontendPortRangeEnd": "4500", | |||||
"frontendPortRangeStart": "3389", | |||||
"protocol": "tcp" | |||||
} | |||||
} | |||||
] | |||||
}, | |||||
"tags": { | |||||
"resourceType": "Service Fabric", | |||||
"clusterName": "[parameters('clusterName')]" | |||||
} | |||||
}, | |||||
{ | |||||
"apiVersion": "[variables('vmssApiVersion')]", | |||||
"type": "Microsoft.Compute/virtualMachineScaleSets", | |||||
"name": "[parameters('vmNodeType0Name')]", | |||||
"location": "[parameters('computeLocation')]", | |||||
"dependsOn": [ | |||||
"[concat('Microsoft.Network/virtualNetworks/', parameters('virtualNetworkName'))]", | |||||
"[concat('Microsoft.Network/loadBalancers/', concat('LB','-', parameters('clusterName'),'-',parameters('vmNodeType0Name')))]", | |||||
"[concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName'))]", | |||||
"[concat('Microsoft.Storage/storageAccounts/', parameters('applicationDiagnosticsStorageAccountName'))]" | |||||
], | |||||
"properties": { | |||||
"overprovision": "[parameters('overProvision')]", | |||||
"upgradePolicy": { | |||||
"mode": "Automatic" | |||||
}, | |||||
"virtualMachineProfile": { | |||||
"extensionProfile": { | |||||
"extensions": [ | |||||
{ | |||||
"name": "[concat(parameters('vmNodeType0Name'),'_ServiceFabricLinuxNode')]", | |||||
"properties": { | |||||
"type": "ServiceFabricLinuxNode", | |||||
"autoUpgradeMinorVersion": true, | |||||
"protectedSettings": { | |||||
"StorageAccountKey1": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('supportLogStorageAccountName')),'2015-05-01-preview').key1]", | |||||
"StorageAccountKey2": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('supportLogStorageAccountName')),'2015-05-01-preview').key2]" | |||||
}, | |||||
"publisher": "Microsoft.Azure.ServiceFabric", | |||||
"settings": { | |||||
"clusterEndpoint": "[reference(parameters('clusterName')).clusterEndpoint]", | |||||
"nodeTypeRef": "[parameters('vmNodeType0Name')]", | |||||
"durabilityLevel": "Bronze", | |||||
"enableParallelJobs": true, | |||||
"nicPrefixOverride": "[parameters('subnet0Prefix')]", | |||||
"certificate": { | |||||
"thumbprint": "[parameters('certificateThumbprint')]", | |||||
"x509StoreName": "[parameters('certificateStoreValue')]" | |||||
} | |||||
}, | |||||
"typeHandlerVersion": "1.0" | |||||
} | |||||
}, | |||||
{ | |||||
"name": "[concat('VMDiagnosticsVmExt','_vmNodeType0Name')]", | |||||
"properties": { | |||||
"type": "LinuxDiagnostic", | |||||
"autoUpgradeMinorVersion": true, | |||||
"protectedSettings": { | |||||
"storageAccountName": "[parameters('applicationDiagnosticsStorageAccountName')]", | |||||
"storageAccountKey": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('applicationDiagnosticsStorageAccountName')),'2015-05-01-preview').key1]", | |||||
"storageAccountEndPoint": "https://core.windows.net/" | |||||
}, | |||||
"publisher": "Microsoft.OSTCExtensions", | |||||
"settings": { | |||||
"xmlCfg": "[base64(concat(variables('wadcfgxstart'),variables('wadmetricsresourceid0'),variables('wadcfgxend')))]", | |||||
"StorageAccount": "[parameters('applicationDiagnosticsStorageAccountName')]" | |||||
}, | |||||
"typeHandlerVersion": "2.3" | |||||
} | |||||
} | |||||
] | |||||
}, | |||||
"networkProfile": { | |||||
"networkInterfaceConfigurations": [ | |||||
{ | |||||
"name": "[concat(parameters('nicName'), '-0')]", | |||||
"properties": { | |||||
"ipConfigurations": [ | |||||
{ | |||||
"name": "[concat(parameters('nicName'),'-',0)]", | |||||
"properties": { | |||||
"loadBalancerBackendAddressPools": [ | |||||
{ | |||||
"id": "[variables('lbPoolID0')]" | |||||
} | |||||
], | |||||
"loadBalancerInboundNatPools": [ | |||||
{ | |||||
"id": "[variables('lbNatPoolID0')]" | |||||
} | |||||
], | |||||
"subnet": { | |||||
"id": "[variables('subnet0Ref')]" | |||||
} | |||||
} | |||||
} | |||||
], | |||||
"primary": true | |||||
} | |||||
} | |||||
] | |||||
}, | |||||
"osProfile": { | |||||
"adminPassword": "[parameters('adminPassword')]", | |||||
"adminUsername": "[parameters('adminUsername')]", | |||||
"computernamePrefix": "[parameters('vmNodeType0Name')]", | |||||
"secrets": [ | |||||
{ | |||||
"sourceVault": { | |||||
"id": "[parameters('sourceVaultValue')]" | |||||
}, | |||||
"vaultCertificates": [ | |||||
{ | |||||
"certificateUrl": "[parameters('certificateUrlValue')]" | |||||
} | |||||
] | |||||
} | |||||
] | |||||
}, | |||||
"storageProfile": { | |||||
"imageReference": { | |||||
"publisher": "[parameters('vmImagePublisher')]", | |||||
"offer": "[parameters('vmImageOffer')]", | |||||
"sku": "[parameters('vmImageSku')]", | |||||
"version": "[parameters('vmImageVersion')]" | |||||
}, | |||||
"osDisk": { | |||||
"caching": "ReadOnly", | |||||
"createOption": "FromImage", | |||||
"managedDisk": { | |||||
"storageAccountType": "[parameters('storageAccountType')]" | |||||
} | |||||
} | |||||
} | |||||
} | |||||
}, | |||||
"sku": { | |||||
"name": "[parameters('vmNodeType0Size')]", | |||||
"capacity": "[parameters('nt0InstanceCount')]", | |||||
"tier": "Standard" | |||||
}, | |||||
"tags": { | |||||
"resourceType": "Service Fabric", | |||||
"clusterName": "[parameters('clusterName')]" | |||||
} | |||||
}, | |||||
{ | |||||
"apiVersion": "2017-07-01-preview", | |||||
"type": "Microsoft.ServiceFabric/clusters", | |||||
"name": "[parameters('clusterName')]", | |||||
"location": "[parameters('clusterLocation')]", | |||||
"dependsOn": [ | |||||
"[concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName'))]" | |||||
], | |||||
"properties": { | |||||
"addonFeatures": [ | |||||
"DnsService" | |||||
], | |||||
"certificate": { | |||||
"thumbprint": "[parameters('certificateThumbprint')]", | |||||
"x509StoreName": "[parameters('certificateStoreValue')]" | |||||
}, | |||||
"clientCertificateCommonNames": [], | |||||
"clientCertificateThumbprints": [], | |||||
"clusterCodeVersion": "6.0.120.1", | |||||
"clusterState": "Default", | |||||
"diagnosticsStorageAccountConfig": { | |||||
"blobEndpoint": "[reference(concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName')), variables('storageApiVersion')).primaryEndpoints.blob]", | |||||
"protectedAccountKeyName": "StorageAccountKey1", | |||||
"queueEndpoint": "[reference(concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName')), variables('storageApiVersion')).primaryEndpoints.queue]", | |||||
"storageAccountName": "[parameters('supportLogStorageAccountName')]", | |||||
"tableEndpoint": "[reference(concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName')), variables('storageApiVersion')).primaryEndpoints.table]" | |||||
}, | |||||
"fabricSettings": [ | |||||
{ | |||||
"parameters": [ | |||||
{ | |||||
"name": "ClusterProtectionLevel", | |||||
"value": "[parameters('clusterProtectionLevel')]" | |||||
} | |||||
], | |||||
"name": "Security" | |||||
} | |||||
], | |||||
"managementEndpoint": "[concat('https://',reference(concat(parameters('lbIPName'),'-','0')).dnsSettings.fqdn,':',parameters('nt0fabricHttpGatewayPort'))]", | |||||
"nodeTypes": [ | |||||
{ | |||||
"name": "[parameters('vmNodeType0Name')]", | |||||
"applicationPorts": { | |||||
"endPort": "[parameters('nt0applicationEndPort')]", | |||||
"startPort": "[parameters('nt0applicationStartPort')]" | |||||
}, | |||||
"clientConnectionEndpointPort": "[parameters('nt0fabricTcpGatewayPort')]", | |||||
"durabilityLevel": "Bronze", | |||||
"ephemeralPorts": { | |||||
"endPort": "[parameters('nt0ephemeralEndPort')]", | |||||
"startPort": "[parameters('nt0ephemeralStartPort')]" | |||||
}, | |||||
"httpGatewayEndpointPort": "[parameters('nt0fabricHttpGatewayPort')]", | |||||
"isPrimary": true, | |||||
"vmInstanceCount": "[parameters('nt0InstanceCount')]" | |||||
} | |||||
], | |||||
"provisioningState": "Default", | |||||
"reliabilityLevel": "Silver", | |||||
"upgradeMode": "Manual", | |||||
"vmImage": "Linux" | |||||
}, | |||||
"tags": { | |||||
"resourceType": "Service Fabric", | |||||
"clusterName": "[parameters('clusterName')]" | |||||
} | |||||
} | |||||
], | |||||
"outputs": { | |||||
"clusterProperties": { | |||||
"value": "[reference(parameters('clusterName'))]", | |||||
"type": "object" | |||||
} | |||||
} | |||||
} |
@ -0,0 +1,102 @@ | |||||
{ | |||||
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#", | |||||
"contentVersion": "1.0.0.0", | |||||
"parameters": { | |||||
"clusterName": { | |||||
"value": "your_sf_name" | |||||
}, | |||||
"clusterLocation": { | |||||
"value": "westeurope" | |||||
}, | |||||
"computeLocation": { | |||||
"value": "westeurope" | |||||
}, | |||||
"adminUserName": { | |||||
"value": "eshop" | |||||
}, | |||||
"adminPassword": { | |||||
"value": "your_admin_password" | |||||
}, | |||||
"nicName": { | |||||
"value": "NIC-eshopsflinsec" | |||||
}, | |||||
"publicIPAddressName": { | |||||
"value": "eshopsflinsec-PubIP" | |||||
}, | |||||
"dnsName": { | |||||
"value": "your_sf_dns" | |||||
}, | |||||
"virtualNetworkName": { | |||||
"value": "VNet-eshopsflinsec" | |||||
}, | |||||
"lbName": { | |||||
"value": "LB-eshopsflinsec" | |||||
}, | |||||
"lbIPName": { | |||||
"value": "LBIP-eshopsflinsec" | |||||
}, | |||||
"sourceVaultValue": { | |||||
"value": "" | |||||
}, | |||||
"certificateUrlValue": { | |||||
"value": "" | |||||
}, | |||||
"certificateThumbprint": { | |||||
"value": "" | |||||
}, | |||||
"vmImageSku": { | |||||
"value": "16.04-LTS" | |||||
}, | |||||
"vmImageVersion": { | |||||
"value": "latest" | |||||
}, | |||||
"vmImagePublisher": { | |||||
"value": "Canonical" | |||||
}, | |||||
"nt0ephemeralStartPort": { | |||||
"value": 49152 | |||||
}, | |||||
"nt0ephemeralEndPort": { | |||||
"value": 65534 | |||||
}, | |||||
"nt0applicationStartPort": { | |||||
"value": 20000 | |||||
}, | |||||
"nt0applicationEndPort": { | |||||
"value": 30000 | |||||
}, | |||||
"nt0fabricTcpGatewayPort": { | |||||
"value": 19000 | |||||
}, | |||||
"nt0fabricHttpGatewayPort": { | |||||
"value": 19080 | |||||
}, | |||||
"webMvcHttpPort": { | |||||
"value": 5100 | |||||
}, | |||||
"webSpaHttpPort": { | |||||
"value": 5104 | |||||
}, | |||||
"webStatusHttpPort": { | |||||
"value": 5107 | |||||
}, | |||||
"IdSrvHttpRule": { | |||||
"value": 5105 | |||||
}, | |||||
"BasketApiHttpRule": { | |||||
"value": 5103 | |||||
}, | |||||
"CatalogApiHttpRule": { | |||||
"value": 5101 | |||||
}, | |||||
"OrderingApiHttpRule": { | |||||
"value": 5102 | |||||
}, | |||||
"MarketingApiHttpRule": { | |||||
"value": 5110 | |||||
}, | |||||
"LocationsApiHttpRule": { | |||||
"value": 5109 | |||||
} | |||||
} | |||||
} |