Docker image assets deployed to ECR for AWS CDK applications
npx @tessl/cli install tessl/npm-aws-cdk--aws-ecr-assets@1.204.0AWS CDK ECR Assets provides constructs for bundling Docker images as assets within AWS CDK applications. It enables developers to build Docker images from local contexts or load them from tarballs, automatically upload them to Amazon Elastic Container Registry (ECR), and seamlessly reference them in CDK stacks. The package handles ECR repository lifecycle management, IAM permissions, and integrates with CDK's asset management system for consistent deployments across environments.
npm install @aws-cdk/aws-ecr-assetsimport { DockerImageAsset, TarballImageAsset, NetworkMode, Platform } from "@aws-cdk/aws-ecr-assets";
import { Construct } from "constructs";
import { Construct as CoreConstruct } from "@aws-cdk/core";For CommonJS:
const { DockerImageAsset, TarballImageAsset, NetworkMode, Platform } = require("@aws-cdk/aws-ecr-assets");
const { Construct } = require("constructs");
const { Construct: CoreConstruct } = require("@aws-cdk/core");import { DockerImageAsset } from "@aws-cdk/aws-ecr-assets";
import { Stack, Construct } from "@aws-cdk/core";
import * as path from "path";
export class MyStack extends Stack {
constructor(scope: Construct, id: string) {
super(scope, id);
// Build and deploy Docker image from local directory
const imageAsset = new DockerImageAsset(this, "MyDockerImage", {
directory: path.join(__dirname, "my-docker-app")
});
// Use the image URI in other resources
console.log("Image URI:", imageAsset.imageUri);
// Repository is automatically created and managed
console.log("Repository:", imageAsset.repository.repositoryName);
}
}AWS CDK ECR Assets is built around several key components:
Build and deploy Docker images from local directories containing Dockerfiles. Supports advanced Docker features including build arguments, multi-stage builds, custom networking modes, and cross-platform compilation.
class DockerImageAsset extends CoreConstruct implements IAsset {
constructor(scope: Construct, id: string, props: DockerImageAssetProps);
readonly imageUri: string;
readonly repository: ecr.IRepository;
readonly assetHash: string;
readonly sourceHash: string;
addResourceMetadata(resource: CfnResource, resourceProperty: string): void;
}
interface DockerImageAssetOptions extends FingerprintOptions, FileFingerprintOptions {
readonly repositoryName?: string;
readonly buildArgs?: { [key: string]: string };
readonly target?: string;
readonly file?: string;
readonly networkMode?: NetworkMode;
readonly platform?: Platform;
readonly invalidation?: DockerImageAssetInvalidationOptions;
}
interface DockerImageAssetProps extends DockerImageAssetOptions {
readonly directory: string;
}Deploy Docker images from pre-built tarball files. Ideal for scenarios where images are built externally or need to be packaged as binary assets.
class TarballImageAsset extends CoreConstruct implements IAsset {
constructor(scope: Construct, id: string, props: TarballImageAssetProps);
readonly imageUri: string;
readonly repository: ecr.IRepository;
readonly assetHash: string;
readonly sourceHash: string;
}
interface TarballImageAssetProps {
readonly tarballFile: string;
}import { Construct } from "constructs";
import { Construct as CoreConstruct, CfnResource } from "@aws-cdk/core";
import * as ecr from "@aws-cdk/aws-ecr";
interface IAsset {
readonly assetHash: string;
}
interface FingerprintOptions {
readonly follow?: FollowMode;
readonly exclude?: string[];
readonly ignoreMode?: IgnoreMode;
readonly extraHash?: string;
}
interface FileFingerprintOptions {
readonly followSymlinks?: SymlinkFollowMode;
readonly exclude?: string[];
readonly ignoreMode?: IgnoreMode;
readonly extraHash?: string;
}
enum IgnoreMode {
GLOB = "glob",
GIT = "git",
DOCKER = "docker"
}
enum SymlinkFollowMode {
NEVER = "never",
ALWAYS = "always",
EXTERNAL = "external",
BLOCK_EXTERNAL = "block-external"
}
enum FollowMode {
NEVER = "never",
ALWAYS = "always",
EXTERNAL = "external",
BLOCK_EXTERNAL = "block-external"
}
class NetworkMode {
static readonly DEFAULT: NetworkMode;
static readonly HOST: NetworkMode;
static readonly NONE: NetworkMode;
static fromContainer(containerId: string): NetworkMode;
static custom(mode: string): NetworkMode;
readonly mode: string;
}
class Platform {
static readonly LINUX_AMD64: Platform;
static readonly LINUX_ARM64: Platform;
static custom(platform: string): Platform;
readonly platform: string;
}
interface DockerImageAssetInvalidationOptions {
readonly extraHash?: boolean;
readonly buildArgs?: boolean;
readonly target?: boolean;
readonly file?: boolean;
readonly repositoryName?: boolean;
readonly networkMode?: boolean;
readonly platform?: boolean;
}