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}");
            }
        }
Example #2
0
        public async Task Create(
            string name,
            FunctionAppLocation location = FunctionAppLocation.WestUs2,
            FunctionAppOs os             = FunctionAppOs.Windows)
        {
            string resourceGroup = GetResourceGroupName(os);
            Uri    uri           = new Uri($"{ManagementURL}subscriptions/{SubscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Storage/storageAccounts/{name}?api-version=2019-06-01");
            object payload       = new
            {
                kind     = "StorageV2",
                location = location.ToRegion(),
                sku      = new
                {
                    name = "Standard_LRS"
                }
            };
            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 storage account {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}");
            }
        }
Example #4
0
 public static string ToRegion(this FunctionAppLocation location)
 {
     return(location.ToString().ToLower());
 }