All Downloads are FREE. Search and download functionalities are using the official Maven repository.

software.amazon.awscdk.services.ecr.assets.package-info Maven / Gradle / Ivy

/**
 * 

AWS CDK Docker Image Assets

*

* --- *

* cdk-constructs: Stable *

*


*

* *

* This module allows bundling Docker images as assets. *

*

Images from Dockerfile

*

* Images are built from a local Docker context directory (with a Dockerfile), * uploaded to Amazon Elastic Container Registry (ECR) by the CDK toolkit * and/or your app's CI/CD pipeline, and can be naturally referenced in your CDK app. *

*

 * import software.amazon.awscdk.services.ecr.assets.DockerImageAsset;
 * 
 * 
 * DockerImageAsset asset = DockerImageAsset.Builder.create(this, "MyBuildImage")
 *         .directory(join(__dirname, "my-image"))
 *         .build();
 * 
*

* The directory my-image must include a Dockerfile. *

* This will instruct the toolkit to build a Docker image from my-image, push it * to an Amazon ECR repository and wire the name of the repository as CloudFormation * parameters to your stack. *

* By default, all files in the given directory will be copied into the docker * build context. If there is a large directory that you know you definitely * don't need in the build context you can improve the performance by adding the * names of files and directories to ignore to a file called .dockerignore, or * pass them via the exclude property. If both are available, the patterns * found in exclude are appended to the patterns found in .dockerignore. *

* The ignoreMode property controls how the set of ignore patterns is * interpreted. The recommended setting for Docker image assets is * IgnoreMode.DOCKER. If the context flag * @aws-cdk/aws-ecr-assets:dockerIgnoreSupport is set to true in your * cdk.json (this is by default for new projects, but must be set manually for * old projects) then IgnoreMode.DOCKER is the default and you don't need to * configure it on the asset itself. *

* Use asset.imageUri to reference the image. It includes both the ECR image URL * and tag. *

* You can optionally pass build args to the docker build command by specifying * the buildArgs property. It is recommended to skip hashing of buildArgs for * values that can change between different machines to maintain a consistent * asset hash. *

*

 * import software.amazon.awscdk.services.ecr.assets.DockerImageAsset;
 * 
 * 
 * DockerImageAsset asset = DockerImageAsset.Builder.create(this, "MyBuildImage")
 *         .directory(join(__dirname, "my-image"))
 *         .buildArgs(Map.of(
 *                 "HTTP_PROXY", "http://10.20.30.2:1234"))
 *         .invalidation(DockerImageAssetInvalidationOptions.builder()
 *                 .buildArgs(false)
 *                 .build())
 *         .build();
 * 
*

* You can optionally pass a target to the docker build command by specifying * the target property: *

*

 * import software.amazon.awscdk.services.ecr.assets.DockerImageAsset;
 * 
 * 
 * DockerImageAsset asset = DockerImageAsset.Builder.create(this, "MyBuildImage")
 *         .directory(join(__dirname, "my-image"))
 *         .target("a-target")
 *         .build();
 * 
*

* You can optionally pass networking mode to the docker build command by specifying * the networkMode property: *

*

 * import software.amazon.awscdk.services.ecr.assets.DockerImageAsset;
 * import software.amazon.awscdk.services.ecr.assets.NetworkMode;
 * 
 * 
 * DockerImageAsset asset = DockerImageAsset.Builder.create(this, "MyBuildImage")
 *         .directory(join(__dirname, "my-image"))
 *         .networkMode(NetworkMode.HOST)
 *         .build();
 * 
*

* You can optionally pass an alternate platform to the docker build command by specifying * the platform property: *

*

 * import software.amazon.awscdk.services.ecr.assets.DockerImageAsset;
 * import software.amazon.awscdk.services.ecr.assets.Platform;
 * 
 * 
 * DockerImageAsset asset = DockerImageAsset.Builder.create(this, "MyBuildImage")
 *         .directory(join(__dirname, "my-image"))
 *         .platform(Platform.LINUX_ARM64)
 *         .build();
 * 
*

*

Images from Tarball

*

* Images are loaded from a local tarball, uploaded to ECR by the CDK toolkit and/or your app's CI-CD pipeline, and can be * naturally referenced in your CDK app. *

*

 * import software.amazon.awscdk.services.ecr.assets.TarballImageAsset;
 * 
 * 
 * TarballImageAsset asset = TarballImageAsset.Builder.create(this, "MyBuildImage")
 *         .tarballFile("local-image.tar")
 *         .build();
 * 
*

* This will instruct the toolkit to add the tarball as a file asset. During deployment it will load the container image * from local-image.tar, push it to an Amazon ECR repository and wire the name of the repository as CloudFormation parameters * to your stack. *

*

Publishing images to ECR repositories

*

* DockerImageAsset is designed for seamless build & consumption of image assets by CDK code deployed to multiple environments * through the CDK CLI or through CI/CD workflows. To that end, the ECR repository behind this construct is controlled by the AWS CDK. * The mechanics of where these images are published and how are intentionally kept as an implementation detail, and the construct * does not support customizations such as specifying the ECR repository name or tags. *

* If you are looking for a way to publish image assets to an ECR repository in your control, you should consider using * cdklabs/cdk-ecr-deployment, which is able to replicate an image asset from the CDK-controlled ECR repository to a repository of * your choice. *

* Here an example from the cdklabs/cdk-ecr-deployment project: *

*

 * // This example available in TypeScript only
 * 
 * import { DockerImageAsset } from '@aws-cdk/aws-ecr-assets';
 * import * as ecrdeploy from 'cdk-ecr-deployment';
 * 
 * const image = new DockerImageAsset(this, 'CDKDockerImage', {
 *   directory: path.join(__dirname, 'docker'),
 * });
 * 
 * new ecrdeploy.ECRDeployment(this, 'DeployDockerImage', {
 *   src: new ecrdeploy.DockerImageName(image.imageUri),
 *   dest: new ecrdeploy.DockerImageName(`${cdk.Aws.ACCOUNT_ID}.dkr.ecr.us-west-2.amazonaws.com/test:nginx`),
 * });
 * 
*

* ⚠️ Please note that this is a 3rd-party construct library and is not officially supported by AWS. * You are welcome to +1 this GitHub issue if you would like to see * native support for this use-case in the AWS CDK. *

*

Pull Permissions

*

* Depending on the consumer of your image asset, you will need to make sure * the principal has permissions to pull the image. *

* In most cases, you should use the asset.repository.grantPull(principal) * method. This will modify the IAM policy of the principal to allow it to * pull images from this repository. *

* If the pulling principal is not in the same account or is an AWS service that * doesn't assume a role in your account (e.g. AWS CodeBuild), pull permissions * must be granted on the resource policy (and not on the principal's policy). * To do that, you can use asset.repository.addToResourcePolicy(statement) to * grant the desired principal the following permissions: "ecr:GetDownloadUrlForLayer", * "ecr:BatchGetImage" and "ecr:BatchCheckLayerAvailability". */ @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable) package software.amazon.awscdk.services.ecr.assets;





© 2015 - 2025 Weber Informatics LLC | Privacy Policy