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

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

There is a newer version: 1.204.0
Show newest version
/**
 * 

AWS CDK Assets

*

* --- *

* cdk-constructs: Experimental *

*

*

* The APIs of higher level constructs in this module are experimental and under active development. * They are subject to non-backward compatible changes or removal in any future version. These are * not subject to the Semantic Versioning model and breaking changes will be * announced in the release notes. This means that while you may use them, you may need to update * your source code when upgrading to a newer version of this package. *

*

*

*


*

* *

* Assets are local files or directories which are needed by a CDK app. A common * example is a directory which contains the handler code for a Lambda function, * but assets can represent any artifact that is needed for the app's operation. *

* When deploying a CDK app that includes constructs with assets, the CDK toolkit * will first upload all the assets to S3, and only then deploy the stacks. The S3 * locations of the uploaded assets will be passed in as CloudFormation Parameters * to the relevant stacks. *

* The following JavaScript example defines an directory asset which is archived as * a .zip file and uploaded to S3 during deployment. *

*

 * // Example automatically generated. See https://github.com/aws/jsii/issues/826
 * Asset asset = new Asset(this, "SampleAsset", new AssetProps()
 *         .path(path.join(__dirname, "sample-asset-directory")));
 * 
*

* The following JavaScript example defines a file asset, which is uploaded as-is * to an S3 bucket during deployment. *

*

 * // Example automatically generated. See https://github.com/aws/jsii/issues/826
 * Asset asset = new Asset(this, "SampleAsset", new AssetProps()
 *         .path(path.join(__dirname, "file-asset.txt")));
 * 
*

*

Attributes

*

* Asset constructs expose the following deploy-time attributes: *

*

    *
  • s3BucketName - the name of the assets S3 bucket.
  • *
  • s3ObjectKey - the S3 object key of the asset file (whether it's a file or a zip archive)
  • *
  • s3ObjectUrl - the S3 object URL of the asset (i.e. s3://mybucket/mykey.zip)
  • *
  • httpUrl - the S3 HTTP URL of the asset (i.e. https://s3.us-east-1.amazonaws.com/mybucket/mykey.zip)
  • *
*

* In the following example, the various asset attributes are exported as stack outputs: *

*

 * // Example automatically generated. See https://github.com/aws/jsii/issues/826
 * Asset asset = new Asset(this, "SampleAsset", new AssetProps()
 *         .path(path.join(__dirname, "sample-asset-directory")));
 * 
 * new CfnOutput(this, "S3BucketName", new CfnOutputProps().value(asset.getS3BucketName()));
 * new CfnOutput(this, "S3ObjectKey", new CfnOutputProps().value(asset.getS3ObjectKey()));
 * new CfnOutput(this, "S3HttpURL", new CfnOutputProps().value(asset.getHttpUrl()));
 * new CfnOutput(this, "S3ObjectURL", new CfnOutputProps().value(asset.getS3ObjectUrl()));
 * 
*

*

Permissions

*

* IAM roles, users or groups which need to be able to read assets in runtime will should be * granted IAM permissions. To do that use the asset.grantRead(principal) method: *

* The following examples grants an IAM group read permissions on an asset: *

*

 * // Example automatically generated. See https://github.com/aws/jsii/issues/826
 * Group group = new Group(this, "MyUserGroup");
 * asset.grantRead(group);
 * 
*

*

How does it work

*

* When an asset is defined in a construct, a construct metadata entry * aws:cdk:asset is emitted with instructions on where to find the asset and what * type of packaging to perform (zip or file). Furthermore, the synthesized * CloudFormation template will also include two CloudFormation parameters: one for * the asset's bucket and one for the asset S3 key. Those parameters are used to * reference the deploy-time values of the asset (using { Ref: "Param" }). *

* Then, when the stack is deployed, the toolkit will package the asset (i.e. zip * the directory), calculate an MD5 hash of the contents and will render an S3 key * for this asset within the toolkit's asset store. If the file doesn't exist in * the asset store, it is uploaded during deployment. *

*

*

* The toolkit's asset store is an S3 bucket created by the toolkit for each * environment the toolkit operates in (environment = account + region). *

*

*

* Now, when the toolkit deploys the stack, it will set the relevant CloudFormation * Parameters to point to the actual bucket and key for each asset. *

*

Asset Bundling

*

* When defining an asset, you can use the bundling option to specify a command * to run inside a docker container. The command can read the contents of the asset * source from /asset-input and is expected to write files under /asset-output * (directories mapped inside the container). The files under /asset-output will * be zipped and uploaded to S3 as the asset. *

* The following example uses custom asset bundling to convert a markdown file to html: *

*

 * // Example automatically generated. See https://github.com/aws/jsii/issues/826
 * Asset asset = new Asset(this, "BundledAsset", new AssetProps()
 *         .path(path.join(__dirname, "markdown-asset"))// /asset-input and working directory in the container
 *         .bundling(new BundlingOptions()
 *                 .image(BundlingDockerImage.fromAsset(path.join(__dirname, "alpine-markdown")))// Build an image
 *                 .command(asList("sh", "-c", "\n            markdown index.md > /asset-output/index.html\n          "))));
 * 
*

* The bundling docker image (image) can either come from a registry (BundlingDockerImage.fromRegistry) * or it can be built from a Dockerfile located inside your project (BundlingDockerImage.fromAsset). *

* You can set the CDK_DOCKER environment variable in order to provide a custom * docker program to execute. This may sometime be needed when building in * environments where the standard docker cannot be executed (see * https://github.com/aws/aws-cdk/issues/8460 for details). *

* Use local to specify a local bundling provider. The provider implements a * method tryBundle() which should return true if local bundling was performed. * If false is returned, docker bundling will be done: *

*

 * // Example automatically generated without compilation. See https://github.com/aws/jsii/issues/826
 * Asset.Builder.create(this, "BundledAsset")
 *         .path("/path/to/asset")
 *         .bundling(Map.of(
 *                 "local", Map.of(
 *                         public void tryBundle(String outputDir, BundlingOptions options) {
 *                             if (canRunLocally) {return true
 *                             }return false
 *                         }),
 *                 // Docker bundling fallback
 *                 "image", BundlingDockerImage.fromRegistry("alpine"),
 *                 "command", asList("bundle")))
 *         .build();
 * 
*

* Although optional, it's recommended to provide a local bundling method which can * greatly improve performance. *

*

CloudFormation Resource Metadata

*

*

*

* NOTE: This section is relevant for authors of AWS Resource Constructs. *

*

*

* In certain situations, it is desirable for tools to be able to know that a certain CloudFormation * resource is using a local asset. For example, SAM CLI can be used to invoke AWS Lambda functions * locally for debugging purposes. *

* To enable such use cases, external tools will consult a set of metadata entries on AWS CloudFormation * resources: *

*

    *
  • aws:asset:path points to the local path of the asset.
  • *
  • aws:asset:property is the name of the resource property where the asset is used
  • *
*

* Using these two metadata entries, tools will be able to identify that assets are used * by a certain resource, and enable advanced local experiences. *

* To add these metadata entries to a resource, use the * asset.addResourceMetadata(resource, property) method. *

* See https://github.com/aws/aws-cdk/issues/1432 for more details */ @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Experimental) package software.amazon.awscdk.services.s3.assets;





© 2015 - 2025 Weber Informatics LLC | Privacy Policy