public async Task Create( string name, FunctionAppLocation location = FunctionAppLocation.WestUs2, FunctionAppSku sku = FunctionAppSku.Consumption, FunctionAppOs os = FunctionAppOs.Windows) { string resourceGroup = GetResourceGroupName(os); Uri uri = new Uri($"{ManagementURL}subscriptions/{SubscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Web/serverfarms/{name}?api-version=2019-08-01"); object payload = new { kind = os.GetServerFarmKindLabel(), location = location.ToRegion(), properties = sku.GetServerFarmProperties(os), sku = sku.GetServerFarmSku(os) }; var response = await ArmClient.HttpInvoke("PUT", uri, AccessToken, payload); if (response.IsSuccessStatusCode) { AddToResources(name, os); } else { string statusCode = response.StatusCode.ToString(); string message = await response.Content.ReadAsStringAsync(); throw new Exception($"Failed to create server farm {name}: ({statusCode}) {message}"); } }
public async Task Create( string name, string storageAccountName, string storageAccountKey, string serverFarmName, FunctionAppLocation location = FunctionAppLocation.WestUs2, FunctionAppSku sku = FunctionAppSku.Consumption, FunctionAppOs os = FunctionAppOs.Windows, FunctionAppRuntime runtime = FunctionAppRuntime.DotNet) { string resourceGroup = GetResourceGroupName(os); Uri uri = new Uri($"{ManagementURL}subscriptions/{SubscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Web/sites/{name}?api-version=2018-11-01"); string storageAccountConnectionString = $"DefaultEndpointsProtocol=https;AccountName={storageAccountName};AccountKey={storageAccountKey};EndpointSuffix=core.windows.net"; List <Dictionary <string, string> > appSettings = new List <Dictionary <string, string> >(); appSettings.Add(new Dictionary <string, string> { { "name", "FUNCTIONS_WORKER_RUNTIME" }, { "value", runtime.ToFunctionWorkerRuntime() } }); appSettings.Add(new Dictionary <string, string> { { "name", "FUNCTIONS_EXTENSION_VERSION" }, { "value", "~2" } }); appSettings.Add(new Dictionary <string, string> { { "name", "AzureWebJobsStorage" }, { "value", storageAccountConnectionString } }); object payload = new { kind = os.GetFunctionAppKindLabel(), location = location.ToRegion(), properties = new { siteConfig = new { appSettings = appSettings }, serverFarmId = $"/subscriptions/{SubscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Web/serverfarms/{serverFarmName}", hostingEnvironment = "", clientAffinityEnable = false } }; var response = await ArmClient.HttpInvoke("PUT", uri, AccessToken, payload); if (response.IsSuccessStatusCode) { AddToResources(name, os); } else { string statusCode = response.StatusCode.ToString(); string message = await response.Content.ReadAsStringAsync(); throw new Exception($"Failed to create function app {name}: ({statusCode}) {message}"); } }
public static ServerFarmPropertiesObject GetServerFarmProperties(this FunctionAppSku sku, FunctionAppOs os) { // Consumption if (sku == FunctionAppSku.Consumption) { return(new ServerFarmPropertiesObject { workerSize = 0, workerSizeId = 0, numberOfWorkers = 1, maximumElasticWorkerCount = 0, hostingEnvironment = string.Empty, reserved = os == FunctionAppOs.Linux }); } // Dedicated if (sku == FunctionAppSku.Dedicated) { return(new ServerFarmPropertiesObject { workerSize = 0, workerSizeId = 0, numberOfWorkers = 1, maximumElasticWorkerCount = 0, hostingEnvironment = string.Empty, reserved = os == FunctionAppOs.Linux }); } // ElasticPremium if (sku == FunctionAppSku.ElasticPremium) { return(new ServerFarmPropertiesObject { workerSize = 3, workerSizeId = 3, numberOfWorkers = 1, maximumElasticWorkerCount = 20, hostingEnvironment = string.Empty, reserved = os == FunctionAppOs.Linux }); } return(null); }
public static ServerFarmSkuObject GetServerFarmSku(this FunctionAppSku sku, FunctionAppOs os) { // Consumption if (sku == FunctionAppSku.Consumption) { return(new ServerFarmSkuObject { Tier = "Dynamic", Name = "Y1" }); } // Dedicated if (sku == FunctionAppSku.Dedicated && os == FunctionAppOs.Windows) { return(new ServerFarmSkuObject { Tier = "Standard", Name = "S1" }); } else if (sku == FunctionAppSku.Dedicated && os == FunctionAppOs.Linux) { return(new ServerFarmSkuObject { Tier = "PremiumV2", Name = "P1v2" }); } // ElasticPremium if (sku == FunctionAppSku.ElasticPremium) { return(new ServerFarmSkuObject { Tier = "ElasticPremium", Name = "EP1" }); } return(null); }