/// import * as pulumi from "@pulumi/pulumi"; import * as azurefunctions from "@azure/functions"; import { FunctionApp } from "./functionApp"; import * as appservice from "../appservice"; import * as core from "../core"; import * as eventhubForTypesOnly from "../eventhub"; import * as storageForTypesOnly from "../storage"; import * as inputs from "../types/input"; /** * An object containing output binding data. This value will be passed to JSON.stringify unless it * is a string, Buffer, ArrayBufferView, or number. * * `void` can be specified as the Result type indicating that no value need be provided. */ export type Result = string | Buffer | ArrayBufferView | number | object | void; export interface Context extends azurefunctions.Context { /** * A callback function that signals to the runtime that your code has completed. If your * function is synchronous, you must call context.done at the end of execution. If your function * is asynchronous, you should not use this callback. * * @param err A user-defined error to pass back to the runtime. If present, your function * execution will fail. * @param result An object containing output binding data. `result` will be passed to * JSON.stringify unless it is a string, Buffer, ArrayBufferView, or number. */ done(err?: Error | string | null, result?: R): void; } /** * `Callback` is the signature for an Azure FunctionApp entrypoint. * * [context] Azure uses this parameter to provide details of your FunctionApp's execution. For more * information, see https://docs.microsoft.com/en-us/azure/azure-functions/functions-reference-node * * [event] is the data passed in by specific services calling the FunctionApp (like `eventhub` or * `storage`). The shape of it will be specific to individual services. * * This function can be synchronous or asynchronous function, though async is only supported with an * FunctionApps v2 or higher. On v1 runtimes the function must be synchronous. To signal * completion synchronously, call `context.done()` passing in an optional error or result value as * appropriate. For async functions, `context.done()` does not need to be called, and instead a Promise * containing the result can be returned. */ export type Callback, E, R extends Result> = (context: C, event: E, ...inputs: any[]) => Promise | void; /** * CallbackFactory is the signature for a function that will be called once to produce the function * that Azure FunctionApps will call into. It can be used to initialize expensive state once that * can then be used across all invocations of the FunctionApp (as long as the FunctionApp is using * the same warm node instance). */ export type CallbackFactory, E, R extends Result> = () => Callback; /** Arguments to pass either a callback or a callback factory to be used as an Azure Function body. */ export interface CallbackArgs, E, R extends Result> { /** * The Javascript function instance to use as the entrypoint for the Azure FunctionApp. Either * [callback] or [callbackFactory] must be provided. */ callback?: Callback; /** * The Javascript function instance that will be called to produce the function that is the * entrypoint for the Azure FunctionApp. Either [callback] or [callbackFactory] must be * provided. * * This form is useful when there is expensive initialization work that should only be executed * once. The factory-function will be invoked once when the final Azure FunctionApp module is * loaded. It can run whatever code it needs, and will end by returning the actual function that * the Azure will call into each time the FunctionApp it is is invoked. */ callbackFactory?: CallbackFactory; } interface FunctionAppArgsBase { /** * The storage account to use where the zip-file blob for the FunctionApp will be located. If * not provided, a new storage account will create. It will be a 'Standard', 'LRS', 'StorageV2' * account. */ readonly account?: storageForTypesOnly.Account; /** * A key-value pair of App Settings. */ readonly appSettings?: pulumi.Input<{ [key: string]: any; }>; /** * A `authSettings` block as defined below. */ readonly authSettings?: pulumi.Input; /** * Should the Function App send session affinity cookies, which route client requests in the same session to the same instance? */ readonly clientAffinityEnabled?: pulumi.Input; /** * Options to control which files and packages are included with the serialized FunctionApp code. */ readonly codePathOptions?: pulumi.runtime.CodePathOptions; /** * An `connection_string` block as defined below. */ readonly connectionStrings?: pulumi.Input; type: pulumi.Input; value: pulumi.Input; }>[]>; /** * The container to use where the zip-file blob for the FunctionApp will be located. If not * provided, the root container of the storage account will be used. */ readonly container?: storageForTypesOnly.Container; /** * The amount of memory in gigabyte-seconds that your application is allowed to consume per day. Setting this value only affects function apps under the consumption plan. Defaults to `0`. */ readonly dailyMemoryTimeQuota?: pulumi.Input; /** * Should the built-in logging of this Function App be enabled? Defaults to `true`. */ readonly enableBuiltinLogging?: pulumi.Input; /** * Is the Function App enabled? */ readonly enabled?: pulumi.Input; /** * Host configuration options. */ readonly hostSettings?: HostSettings; /** * Can the Function App only be accessed via HTTPS? Defaults to `false`. */ readonly httpsOnly?: pulumi.Input; /** * An `identity` block as defined below. */ readonly identity?: pulumi.Input; /** * Specifies the supported Azure location where the resource exists. Changing this forces a new resource to be created. */ readonly location?: pulumi.Input; /** * The name of the Function App. */ readonly name?: pulumi.Input; /** * Controls the value of WEBSITE_NODE_DEFAULT_VERSION in `appSettings`. If not provided, * defaults to `~14`. */ readonly nodeVersion?: pulumi.Input; /** * A string indicating the Operating System type for this function app. */ readonly osType?: pulumi.Input; /** * The App Service Plan within which to create this Function App. Changing this forces a new * resource to be created. * * If not provided, a default "Consumption" plan will be created. See: * https://docs.microsoft.com/en-us/azure/azure-functions/functions-scale#consumption-plan for * more details. */ readonly plan?: appservice.Plan; /** * The resource group in which to create the event subscription. [resourceGroup] takes precedence over [resourceGroupName]. */ readonly resourceGroup?: core.ResourceGroup; /** * The name of the resource group in which to create the event subscription. [resourceGroup] takes precedence over [resourceGroupName]. * Either [resourceGroupName] or [resourceGroup] must be supplied. */ readonly resourceGroupName?: pulumi.Input; /** * A `site_config` object as defined below. */ readonly siteConfig?: pulumi.Input; /** * A mapping of tags to assign to the resource. */ readonly tags?: pulumi.Input<{ [key: string]: any; }>; /** * The runtime version associated with the Function App. Defaults to `~4`. */ readonly version?: pulumi.Input; } /** * Base arguments for all Azure Function components that are passed to MultiFunctionCallbackApp. */ export interface CallbackFunctionArgs, E, R extends Result> extends InputOutputsArgs, CallbackArgs { } /** * Base arguments for all single-Function subscription apps. */ export interface CallbackFunctionAppArgs, E, R extends Result> extends CallbackFunctionArgs, FunctionAppArgsBase { } /** * The host.json metadata file contains global configuration options that affect all functions for a * function app. These values can be provided here, or defaults will be used in their place. * * For more details see https://docs.microsoft.com/en-us/azure/azure-functions/functions-host-json */ export interface HostSettings { /** * Specifies how many function invocations are aggregated when calculating metrics for * Application Insights. * * See https://docs.microsoft.com/en-us/azure/azure-functions/functions-host-json#aggregator for * more details. */ aggregator?: { /** Maximum number of requests to aggregate. Defaults to 1000 */ batchSize: number; /** Maximum time period to aggregate. Defaults to "00:00:30" */ flushTimeout: string; }; /** * Indicates the timeout duration for all functions. In a serverless Consumption plan, the valid * range is from 1 second to 10 minutes, and the default value is 5 minutes. In an App Service * plan, there is no overall limit and the default depends on the runtime version. In version * 2.x, the default value for an App Service plan is 30 minutes. */ functionTimeout?: string; /** * Configuration settings for * [host-health-monitor](https://github.com/Azure/azure-webjobs-sdk-script/wiki/Host-Health-Monitor). */ healthMonitor?: { /** Specifies whether the feature is enabled. Defaults to `true` */ enabled: boolean; /** The time interval between the periodic background health checks. Defaults to 10 seconds. */ healthCheckInterval: string; /** * A sliding time window used in conjunction with the `healthCheckThreshold` setting. * Defaults to 2 minutes. */ healthCheckWindow: string; /** * Maximum number of times the health check can fail before a host recycle is initiated. Defaults to `6`. */ healthCheckThreshold: number; /** * The threshold at which a performance counter will be considered unhealthy. Defaults to `0.80`. */ counterThreshold: number; }; /** Controls the logging behaviors of the function app, including Application Insights. */ logging?: { /** Defines what level of file logging is enabled. Defaults to `debugOnly` */ fileLoggingMode: "never" | "only" | "debugOnly"; logLevel: { default: string; }; /** Controls the sampling feature in Application Insights. */ applicationInsights: { samplingSettings: { /** Enables or disables sampling. Defaults to `true` */ isEnabled: boolean; /** The threshold at which sampling begins. Defaults to `5` */ maxTelemetryItemsPerSecond: number; }; }; }; /** * Configuration settings for Singleton lock behavior. For more information, see * [GitHub-issue](https://github.com/Azure/azure-webjobs-sdk-script/issues/912) about singleton * support. */ singleton?: { /** The period that function level locks are taken for. The locks auto-renew. */ lockPeriod: string; /** The period that listener locks are taken for. */ listenerLockPeriod: string; /** The time interval used for listener lock recovery if a listener lock couldn't be * acquired on startup. */ listenerLockRecoveryPollingInterval: string; /** The maximum amount of time the runtime will try to acquire a lock. */ lockAcquisitionTimeout: string; /** The interval between lock acquisition attempts. */ lockAcquisitionPollingInterval: string; }; /** Extension-specific configuration options. */ extensions?: { http?: appservice.HttpHostExtensions; serviceBus?: eventhubForTypesOnly.ServiceBusHostExtensions; queues?: storageForTypesOnly.QueueHostExtensions; }; } /** * Represents a Binding that will be emitted into the function.json config file for the FunctionApp. * Individual services will have more specific information they will define in their own bindings. */ export type BindingDefinition = azurefunctions.BindingDefinition; /** * Base interface for input bindings. */ export interface InputBindingDefinition extends BindingDefinition { /** * The direction of the binding. Must be 'in' for an input binding. */ direction: "in"; } /** * Base interface for output bindings. */ export interface OutputBindingDefinition extends BindingDefinition { /** * The direction of the binding. Must be 'out' for an output binding. */ direction: "out"; } /** * Azure Function Binding with the required corresponding application settings (e.g., a connection string setting). */ export interface BindingSettings { /** * A binding definition. */ readonly binding: pulumi.Input; /** * A dictionary of application settings to be applied to the Function App. */ readonly settings: pulumi.Input<{ [key: string]: any; }>; } export type InputBindingSettings = BindingSettings; export type OutputBindingSettings = BindingSettings; export interface InputOutputsArgs { /** * Input bindings. */ inputs?: InputBindingSettings[]; /** * Output bindings. */ outputs?: OutputBindingSettings[]; } /** * Type alias for a response coming from an Azure Function callback, which applies to most Function types * (HTTP being a notable exception). * 'void' is returned when a Function has no output bindings. * For each output binding, the callback should define a property in the response record with the property * name matching the binding name. For instance, for an output binding called 'myoutput', the response could * be '{ myoutput: "My Value" }'. */ export type FunctionDefaultResponse = void | Record; /** * Azure Function base class. */ export declare abstract class Function, E, R extends Result> { /** * Function name. */ readonly name: string; /** * An array of function binding definitions. */ readonly bindings: pulumi.Input; /** * Function callback. */ readonly callback: CallbackArgs; /** * Application settings required by the function. */ readonly appSettings?: pulumi.Input<{ [key: string]: string; }>; constructor(name: string, trigger: pulumi.Input, args: CallbackFunctionArgs, settings?: pulumi.Input<{ [key: string]: string; }>); } /** * Arguments to create a Function App component with multiple callback functions in it. */ export interface MultiCallbackFunctionAppArgs extends FunctionAppArgsBase { /** * The functions to deploy as parts of this application. At least 1 function is required. */ functions: Function[]; } /** * Arguments to create a Function App component and deploy the specified raw archive package. */ export interface ArchiveFunctionAppArgs extends FunctionAppArgsBase { /** * The deployment package of a Function App to deploy as-is. */ archive: pulumi.Input; } /** * A CallbackFunctionApp is a special type of azure.appservice.FunctionApp that can be created out * of an actual JavaScript function instance. The function instance will be analyzed and packaged * up (including dependencies) into a form that can be used by Azure Functions. See * https://github.com/pulumi/docs/blob/master/reference/serializing-functions.md for additional * details on this process. */ export declare class CallbackFunctionApp, E, R extends Result> extends FunctionApp { /** * Storage account where the FunctionApp's zipBlob is uploaded to. */ readonly account: storageForTypesOnly.Account; /** * Storage container where the FunctionApp's zipBlob is uploaded to. */ readonly container: storageForTypesOnly.Container; /** * The blob containing all the code for this FunctionApp. */ readonly zipBlob: storageForTypesOnly.Blob; /** * The plan this Function App runs under. */ readonly plan: appservice.Plan; /** * Root HTTP endpoint of the Function App. */ readonly endpoint: pulumi.Output; constructor(name: string, bindingsOrFunc: pulumi.Input | Function, args: CallbackFunctionAppArgs, opts?: pulumi.CustomResourceOptions); } /** * A base component for custom Function App components. It is required to provide a common parent * for all resources, so that they are logically grouped under the same root in the Pulumi resource * tree. */ export declare abstract class PackagedFunctionApp extends pulumi.ComponentResource { /** * Storage account where the FunctionApp's zipbBlob is uploaded to. */ readonly account: storageForTypesOnly.Account; /** * Storage container where the FunctionApp's zipbBlob is uploaded to. */ readonly container: storageForTypesOnly.Container; /** * The blob containing all the code for this FunctionApp. */ readonly zipBlob: storageForTypesOnly.Blob; /** * The plan this Function App runs under. */ readonly plan: appservice.Plan; /** * The Function App which contains the functions from the archive. */ readonly functionApp: appservice.FunctionApp; /** * Root HTTP endpoint of the Function App. */ readonly endpoint: pulumi.Output; constructor(type: string, name: string, args: ArchiveFunctionAppArgs, opts?: pulumi.ComponentResourceOptions); } /** * A ArchiveFunctionApp is a component that instantiates a azure.appservice.FunctionApp and all the required * dependencies and deploys the specified archive into it. The archive must contain the full artifact to be deployed * into the Function App. */ export declare class ArchiveFunctionApp extends PackagedFunctionApp { constructor(name: string, args: ArchiveFunctionAppArgs, opts?: pulumi.ComponentResourceOptions); } /** * A MultiCallbackFunctionApp is a component that instantiates a azure.appservice.FunctionApp and all the required * dependencies out of multiple actual JavaScript functions. At least 1 function is required. The function instances * will be analyzed and packaged up (including dependencies) into a form that can be used by Azure Functions. See * https://github.com/pulumi/docs/blob/master/reference/serializing-functions.md for additional * details on this process. */ export declare class MultiCallbackFunctionApp extends PackagedFunctionApp { constructor(name: string, args: MultiCallbackFunctionAppArgs, opts?: pulumi.ComponentResourceOptions); } /** * Base type for all subscription types. An event subscription represents a connection between some * azure resource an an FunctionApp that will be triggered when something happens to that resource. */ export declare abstract class EventSubscription, E, R extends Result> extends pulumi.ComponentResource { readonly functionApp: CallbackFunctionApp; constructor(type: string, name: string, bindingsOrFunc: pulumi.Input | Function, args: CallbackFunctionAppArgs, opts?: pulumi.ComponentResourceOptions); } /** * Keys associated with a Function App. */ export interface FunctionHostKeys { /** Master key. */ masterKey: string; /** A dictionary of system keys, e.g. for Durable Functions or Event Grid. */ systemKeys: { [key: string]: string; }; /** Default function keys. */ functionKeys: FunctionKeys; } /** * Keys associated with a single Function. */ export interface FunctionKeys { default: string; [key: string]: string; } declare module "./functionApp" { interface FunctionApp { /** * Retrieve the keys associated with the Function App. */ getHostKeys(): pulumi.Output; /** * Retrieve the keys associated with the given Function. */ getFunctionKeys(functionName: pulumi.Input): pulumi.Output; } } export {};