aws-cdk-lib
Version:
Version 2 of the AWS Cloud Development Kit library
325 lines (324 loc) • 12.7 kB
TypeScript
import { Construct } from 'constructs';
import * as ecr from '../../aws-ecr';
import * as ecr_assets from '../../aws-ecr-assets';
import * as s3 from '../../aws-s3';
import * as s3_assets from '../../aws-s3-assets';
import * as cdk from '../../core';
/**
* Represents the Lambda Handler Code.
*/
export declare abstract class Code {
/**
* Lambda handler code as an S3 object.
* @param bucket The S3 bucket
* @param key The object key
* @param objectVersion Optional S3 object version
*/
static fromBucket(bucket: s3.IBucket, key: string, objectVersion?: string): S3Code;
/**
* Inline code for Lambda handler
* @returns `LambdaInlineCode` with inline code.
* @param code The actual handler code (limited to 4KiB)
*/
static fromInline(code: string): InlineCode;
/**
* Loads the function code from a local disk path.
*
* @param path Either a directory with the Lambda code bundle or a .zip file
*/
static fromAsset(path: string, options?: s3_assets.AssetOptions): AssetCode;
/**
* Loads the function code from an asset created by a Docker build.
*
* By default, the asset is expected to be located at `/asset` in the
* image.
*
* @param path The path to the directory containing the Docker file
* @param options Docker build options
*/
static fromDockerBuild(path: string, options?: DockerBuildAssetOptions): AssetCode;
/**
* Creates a new Lambda source defined using CloudFormation parameters.
*
* @returns a new instance of `CfnParametersCode`
* @param props optional construction properties of `CfnParametersCode`
*/
static fromCfnParameters(props?: CfnParametersCodeProps): CfnParametersCode;
/**
* Use an existing ECR image as the Lambda code.
* @param repository the ECR repository that the image is in
* @param props properties to further configure the selected image
*/
static fromEcrImage(repository: ecr.IRepository, props?: EcrImageCodeProps): EcrImageCode;
/**
* Create an ECR image from the specified asset and bind it as the Lambda code.
* @param directory the directory from which the asset must be created
* @param props properties to further configure the selected image
*/
static fromAssetImage(directory: string, props?: AssetImageCodeProps): AssetImageCode;
/**
* Called when the lambda or layer is initialized to allow this object to bind
* to the stack, add resources and have fun.
*
* @param scope The binding scope. Don't be smart about trying to down-cast or
* assume it's initialized. You may just use it as a construct scope.
*/
abstract bind(scope: Construct): CodeConfig;
/**
* Called after the CFN function resource has been created to allow the code
* class to bind to it. Specifically it's required to allow assets to add
* metadata for tooling like SAM CLI to be able to find their origins.
*/
bindToResource(_resource: cdk.CfnResource, _options?: ResourceBindOptions): void;
}
/**
* Result of binding `Code` into a `Function`.
*/
export interface CodeConfig {
/**
* The location of the code in S3 (mutually exclusive with `inlineCode` and `image`).
* @default - code is not an s3 location
*/
readonly s3Location?: s3.Location;
/**
* Inline code (mutually exclusive with `s3Location` and `image`).
* @default - code is not inline code
*/
readonly inlineCode?: string;
/**
* Docker image configuration (mutually exclusive with `s3Location` and `inlineCode`).
* @default - code is not an ECR container image
*/
readonly image?: CodeImageConfig;
}
/**
* Result of the bind when an ECR image is used.
*/
export interface CodeImageConfig {
/**
* URI to the Docker image.
*/
readonly imageUri: string;
/**
* Specify or override the CMD on the specified Docker image or Dockerfile.
* This needs to be in the 'exec form', viz., `[ 'executable', 'param1', 'param2' ]`.
* @see https://docs.docker.com/engine/reference/builder/#cmd
* @default - use the CMD specified in the docker image or Dockerfile.
*/
readonly cmd?: string[];
/**
* Specify or override the ENTRYPOINT on the specified Docker image or Dockerfile.
* An ENTRYPOINT allows you to configure a container that will run as an executable.
* This needs to be in the 'exec form', viz., `[ 'executable', 'param1', 'param2' ]`.
* @see https://docs.docker.com/engine/reference/builder/#entrypoint
* @default - use the ENTRYPOINT in the docker image or Dockerfile.
*/
readonly entrypoint?: string[];
/**
* Specify or override the WORKDIR on the specified Docker image or Dockerfile.
* A WORKDIR allows you to configure the working directory the container will use.
* @see https://docs.docker.com/engine/reference/builder/#workdir
* @default - use the WORKDIR in the docker image or Dockerfile.
*/
readonly workingDirectory?: string;
}
/**
* Lambda code from an S3 archive.
*/
export declare class S3Code extends Code {
private key;
private objectVersion?;
readonly isInline = false;
private bucketName;
constructor(bucket: s3.IBucket, key: string, objectVersion?: string | undefined);
bind(_scope: Construct): CodeConfig;
}
/**
* Lambda code from an inline string.
*/
export declare class InlineCode extends Code {
private code;
readonly isInline = true;
constructor(code: string);
bind(_scope: Construct): CodeConfig;
}
/**
* Lambda code from a local directory.
*/
export declare class AssetCode extends Code {
readonly path: string;
private readonly options;
readonly isInline = false;
private asset?;
/**
* @param path The path to the asset file or directory.
*/
constructor(path: string, options?: s3_assets.AssetOptions);
bind(scope: Construct): CodeConfig;
bindToResource(resource: cdk.CfnResource, options?: ResourceBindOptions): void;
}
export interface ResourceBindOptions {
/**
* The name of the CloudFormation property to annotate with asset metadata.
* @see https://github.com/aws/aws-cdk/issues/1432
* @default Code
*/
readonly resourceProperty?: string;
}
/**
* Construction properties for `CfnParametersCode`.
*/
export interface CfnParametersCodeProps {
/**
* The CloudFormation parameter that represents the name of the S3 Bucket
* where the Lambda code will be located in.
* Must be of type 'String'.
*
* @default a new parameter will be created
*/
readonly bucketNameParam?: cdk.CfnParameter;
/**
* The CloudFormation parameter that represents the path inside the S3 Bucket
* where the Lambda code will be located at.
* Must be of type 'String'.
*
* @default a new parameter will be created
*/
readonly objectKeyParam?: cdk.CfnParameter;
}
/**
* Lambda code defined using 2 CloudFormation parameters.
* Useful when you don't have access to the code of your Lambda from your CDK code, so you can't use Assets,
* and you want to deploy the Lambda in a CodePipeline, using CloudFormation Actions -
* you can fill the parameters using the `#assign` method.
*/
export declare class CfnParametersCode extends Code {
readonly isInline = false;
private _bucketNameParam?;
private _objectKeyParam?;
constructor(props?: CfnParametersCodeProps);
bind(scope: Construct): CodeConfig;
/**
* Create a parameters map from this instance's CloudFormation parameters.
*
* It returns a map with 2 keys that correspond to the names of the parameters defined in this Lambda code,
* and as values it contains the appropriate expressions pointing at the provided S3 location
* (most likely, obtained from a CodePipeline Artifact by calling the `artifact.s3Location` method).
* The result should be provided to the CloudFormation Action
* that is deploying the Stack that the Lambda with this code is part of,
* in the `parameterOverrides` property.
*
* @param location the location of the object in S3 that represents the Lambda code
*/
assign(location: s3.Location): {
[name: string]: any;
};
get bucketNameParam(): string;
get objectKeyParam(): string;
}
/**
* Properties to initialize a new EcrImageCode
*/
export interface EcrImageCodeProps {
/**
* Specify or override the CMD on the specified Docker image or Dockerfile.
* This needs to be in the 'exec form', viz., `[ 'executable', 'param1', 'param2' ]`.
* @see https://docs.docker.com/engine/reference/builder/#cmd
* @default - use the CMD specified in the docker image or Dockerfile.
*/
readonly cmd?: string[];
/**
* Specify or override the ENTRYPOINT on the specified Docker image or Dockerfile.
* An ENTRYPOINT allows you to configure a container that will run as an executable.
* This needs to be in the 'exec form', viz., `[ 'executable', 'param1', 'param2' ]`.
* @see https://docs.docker.com/engine/reference/builder/#entrypoint
* @default - use the ENTRYPOINT in the docker image or Dockerfile.
*/
readonly entrypoint?: string[];
/**
* Specify or override the WORKDIR on the specified Docker image or Dockerfile.
* A WORKDIR allows you to configure the working directory the container will use.
* @see https://docs.docker.com/engine/reference/builder/#workdir
* @default - use the WORKDIR in the docker image or Dockerfile.
*/
readonly workingDirectory?: string;
/**
* The image tag to use when pulling the image from ECR.
* @default 'latest'
* @deprecated use `tagOrDigest`
*/
readonly tag?: string;
/**
* The image tag or digest to use when pulling the image from ECR (digests must start with `sha256:`).
* @default 'latest'
*/
readonly tagOrDigest?: string;
}
/**
* Represents a Docker image in ECR that can be bound as Lambda Code.
*/
export declare class EcrImageCode extends Code {
private readonly repository;
private readonly props;
readonly isInline: boolean;
constructor(repository: ecr.IRepository, props?: EcrImageCodeProps);
bind(_scope: Construct): CodeConfig;
}
/**
* Properties to initialize a new AssetImage
*/
export interface AssetImageCodeProps extends ecr_assets.DockerImageAssetOptions {
/**
* Specify or override the CMD on the specified Docker image or Dockerfile.
* This needs to be in the 'exec form', viz., `[ 'executable', 'param1', 'param2' ]`.
* @see https://docs.docker.com/engine/reference/builder/#cmd
* @default - use the CMD specified in the docker image or Dockerfile.
*/
readonly cmd?: string[];
/**
* Specify or override the ENTRYPOINT on the specified Docker image or Dockerfile.
* An ENTRYPOINT allows you to configure a container that will run as an executable.
* This needs to be in the 'exec form', viz., `[ 'executable', 'param1', 'param2' ]`.
* @see https://docs.docker.com/engine/reference/builder/#entrypoint
* @default - use the ENTRYPOINT in the docker image or Dockerfile.
*/
readonly entrypoint?: string[];
/**
* Specify or override the WORKDIR on the specified Docker image or Dockerfile.
* A WORKDIR allows you to configure the working directory the container will use.
* @see https://docs.docker.com/engine/reference/builder/#workdir
* @default - use the WORKDIR in the docker image or Dockerfile.
*/
readonly workingDirectory?: string;
}
/**
* Represents an ECR image that will be constructed from the specified asset and can be bound as Lambda code.
*/
export declare class AssetImageCode extends Code {
private readonly directory;
private readonly props;
readonly isInline: boolean;
private asset?;
constructor(directory: string, props: AssetImageCodeProps);
bind(scope: Construct): CodeConfig;
bindToResource(resource: cdk.CfnResource, options?: ResourceBindOptions): void;
}
/**
* Options when creating an asset from a Docker build.
*/
export interface DockerBuildAssetOptions extends cdk.DockerBuildOptions {
/**
* The path in the Docker image where the asset is located after the build
* operation.
*
* @default /asset
*/
readonly imagePath?: string;
/**
* The path on the local filesystem where the asset will be copied
* using `docker cp`.
*
* @default - a unique temporary directory in the system temp directory
*/
readonly outputPath?: string;
}