import type { Integer } from "../../../common/CustomTypes/Integer";
import type { NonEmptyString } from "../../../common/CustomTypes/NonEmptyString";
import type { SecurityGroupId } from "../../../common/CustomTypes/SecurityGroupId";
import type { SubnetId } from "../../../common/CustomTypes/SubnetId";
import type { Dict } from "../../../common/Types";
import type { Arn } from "../../CustomTypes/Arn";
import type { S3BucketName } from "../../CustomTypes/S3BucketName";
import type { AwsResourceCommon, CloudFormationTags } from "../common";
import type { CloudFormationString, CloudFormationValue } from "../IntrinsicFunctions";
export declare type FunctionType = 'AWS::Lambda::Function';
export interface Function extends AwsResourceCommon {
    Type: FunctionType;
    Properties: FunctionProperties;
}
export interface FunctionProperties {
    Code: Code;
    Description?: string;
    DeadLetterConfig?: object;
    Environment?: Environment;
    FileSystemConfigs?: object;
    FunctionName?: string;
    Handler?: NonEmptyString;
    ImageConfig?: ImageConfig;
    KmsKeyArn?: CloudFormationValue<Arn>;
    Layers?: CloudFormationValue<Arn>[];
    MemorySize?: Integer;
    PackageType?: PackageType;
    ReservedConcurrentExecutions?: Integer;
    Role: CloudFormationValue<Arn>;
    Runtime?: NonEmptyString;
    Tags?: CloudFormationTags;
    Timeout?: Integer;
    TracingConfig?: TracingConfig;
    VpcConfig?: VpcConfig;
    SnapStart?: SnapStart;
}
export declare type Code = ImageCode | S3Code | ZipFileCode;
export interface ImageCode {
    ImageUri: CloudFormationValue<NonEmptyString>;
}
export interface S3Code {
    S3Bucket: S3BucketName;
    S3Key: NonEmptyString;
    S3ObjectVersion?: Integer;
}
export interface ZipFileCode {
    ZipFile: NonEmptyString;
}
export interface Environment {
    Variables: Dict<CloudFormationString>;
}
export interface ImageConfig {
    Command?: string[];
    EntryPoint?: string[];
    WorkingDirectory?: string;
}
export declare type PackageType = 'Image' | 'Zip';
export interface TracingConfig {
    Mode: TracingConfigMode;
}
export declare type TracingConfigMode = 'Active' | 'PassThrough';
export interface VpcConfig {
    SecurityGroupIds: CloudFormationValue<SecurityGroupId>[];
    SubnetIds: CloudFormationValue<SubnetId>[];
}
export interface SnapStart {
    ApplyOn: SnapStartApplication;
}
export declare type SnapStartApplication = 'None' | 'PublishedVersions';
