private InputMap <string> combineAppSettings(Blob zipBlob, Account account, ArchiveFunctionAppArgs args) { var codeBlobUrl = SharedAccessSignature.SignedBlobReadUrl(zipBlob, account); var settings = args.AppSettings; if (settings == null) { settings = new InputMap <string>(); } settings.Add("WEBSITE_RUN_FROM_PACKAGE", codeBlobUrl); settings.Add("WEBSITE_NODE_DEFAULT_VERSION", "~10"); return(settings); }
public PackagedFunctionApp(string type, string name, ArchiveFunctionAppArgs args, ComponentResourceOptions?opts) : base(type, name, opts) { StorageAccountNameCleanerRegex = new Regex(@"[^a-zA-Z0-9]"); StorageContainerNameCleanerRegex = new Regex(@"[^a-zA-Z0-9-]"); var parentOpts = new CustomResourceOptions { Parent = this }; var parts = createFunctionAppParts(name, args, parentOpts); this.Account = parts.Account; this.Container = parts.Container; this.Blob = parts.Blob; this.Plan = parts.Plan; this.FunctionApp = new FunctionApp(name, parts.FunctionAppArgs, parentOpts); this.Endpoint = getEndpoint(this.FunctionApp, parts.RootPath); this.RegisterOutputs(); }
public ArchiveFunctionApp(string name, ArchiveFunctionAppArgs args, ComponentResourceOptions?opts = null) : base("azure:appservice:ArchiveFunctionApp", name, args, opts) { }
private FunctionAppParts createFunctionAppParts(string name, ArchiveFunctionAppArgs args, CustomResourceOptions?opts = null) { if (args.Archive == null) { throw new ArgumentNullException("Deployment [archive] must be provided."); } var resourceGroupName = getResourceGroupName(args.ResourceGroup, args.ResourceGroupName); var plan = createIfUndefined(args.Plan, () => { return(new Plan(name, new PlanArgs { ResourceGroupName = resourceGroupName, Location = args.Location, Kind = "FunctionApp", Sku = new PlanSkuArgs { Tier = "Dynamic", Size = "Y1", }, }, opts)); }); var account = createIfUndefined(args.Account, () => { return(new Account(makeSafeName(StorageAccountNameCleanerRegex, name, 24 - 8), new AccountArgs { ResourceGroupName = resourceGroupName, Location = args.Location, AccountKind = "StorageV2", AccountTier = "Standard", AccountReplicationType = "LRS", }, opts)); }); var container = createIfUndefined(args.Container, () => { return(new Container(makeSafeName(StorageContainerNameCleanerRegex, name, 63 - 8), new ContainerArgs { StorageAccountName = account.Name, ContainerAccessType = "private", }, opts)); }); var zipBlob = new Blob(name, new BlobArgs { StorageAccountName = account.Name, StorageContainerName = container.Name, Type = "Block", Source = args.Archive }, opts); var functionArgs = new FunctionAppArgs { ResourceGroupName = resourceGroupName, Location = args.Location, ClientAffinityEnabled = args.ClientAffinityEnabled, EnableBuiltinLogging = args.EnableBuiltinLogging, Enabled = args.Enabled, SiteConfig = args.SiteConfig, Identity = args.Identity, Name = args.Name, //AuthSettings = args.AuthSettings, HttpsOnly = args.HttpsOnly, AppServicePlanId = plan.Id, StorageConnectionString = account.PrimaryConnectionString, Version = getOrDefault(args.Version, FUNCTION_APP_STABLE_RUNTIME_VERSION), AppSettings = combineAppSettings(zipBlob, account, args), }; if (args.ConnectionStrings != null) { functionArgs.ConnectionStrings = args.ConnectionStrings; } if (args.Tags != null) { functionArgs.Tags = args.Tags; } var routePrefix = args.HostSettings?.Extensions?.Http?.RoutePrefix; var rootPath = Output.Format($"{ routePrefix ?? "api" }/"); return(new FunctionAppParts(account, container, zipBlob, plan, functionArgs, rootPath)); }