AssetStaging
Stages a file or directory from a location on the file system into a staging directory.
This is controlled by the context key 'aws:cdk:asset-staging' and enabled by the CLI by default in order to ensure that when the CDK app exists, all assets are available for deployment. Otherwise, if an app references assets in temporary locations, those will not be available when it exists (see https://github.com/aws/aws-cdk/issues/1716).
The stagedPath property is a stringified token that represents the location of the file or directory after staging. It will be resolved only during the "prepare" stage and may be either the original path or the staged path depending on the context setting.
The file/directory are staged based on their content hash (fingerprint). This means that only if content was changed, copy will happen.
Example
// The code below shows an example of how to instantiate this type.
// The values are placeholders you should change.
import * as cdk from 'aws-cdk-lib';
declare const dockerImage: cdk.DockerImage;
declare const localBundling: cdk.ILocalBundling;
const assetStaging = new cdk.AssetStaging(this, 'MyAssetStaging', {
sourcePath: 'sourcePath',
// the properties below are optional
assetHash: 'assetHash',
assetHashType: cdk.AssetHashType.SOURCE,
bundling: {
image: dockerImage,
// the properties below are optional
bundlingFileAccess: cdk.BundlingFileAccess.VOLUME_COPY,
command: ['command'],
entrypoint: ['entrypoint'],
environment: {
environmentKey: 'environment',
},
local: localBundling,
network: 'network',
outputType: cdk.BundlingOutput.ARCHIVED,
platform: 'platform',
securityOpt: 'securityOpt',
user: 'user',
volumes: [{
containerPath: 'containerPath',
hostPath: 'hostPath',
// the properties below are optional
consistency: cdk.DockerVolumeConsistency.CONSISTENT,
}],
volumesFrom: ['volumesFrom'],
workingDirectory: 'workingDirectory',
},
exclude: ['exclude'],
extraHash: 'extraHash',
follow: cdk.SymlinkFollowMode.NEVER,
ignoreMode: cdk.IgnoreMode.GLOB,
});
# The code below shows an example of how to instantiate this type.
# The values are placeholders you should change.
import aws_cdk as cdk
# docker_image: cdk.DockerImage
# local_bundling: cdk.ILocalBundling
asset_staging = cdk.AssetStaging(self, "MyAssetStaging",
source_path="sourcePath",
# the properties below are optional
asset_hash="assetHash",
asset_hash_type=cdk.AssetHashType.SOURCE,
bundling=cdk.BundlingOptions(
image=docker_image,
# the properties below are optional
bundling_file_access=cdk.BundlingFileAccess.VOLUME_COPY,
command=["command"],
entrypoint=["entrypoint"],
environment={
"environment_key": "environment"
},
local=local_bundling,
network="network",
output_type=cdk.BundlingOutput.ARCHIVED,
platform="platform",
security_opt="securityOpt",
user="user",
volumes=[cdk.DockerVolume(
container_path="containerPath",
host_path="hostPath",
# the properties below are optional
consistency=cdk.DockerVolumeConsistency.CONSISTENT
)],
volumes_from=["volumesFrom"],
working_directory="workingDirectory"
),
exclude=["exclude"],
extra_hash="extraHash",
follow=cdk.SymlinkFollowMode.NEVER,
ignore_mode=cdk.IgnoreMode.GLOB
)
// The code below shows an example of how to instantiate this type.
// The values are placeholders you should change.
import software.amazon.awscdk.*;
DockerImage dockerImage;
ILocalBundling localBundling;
AssetStaging assetStaging = AssetStaging.Builder.create(this, "MyAssetStaging")
.sourcePath("sourcePath")
// the properties below are optional
.assetHash("assetHash")
.assetHashType(AssetHashType.SOURCE)
.bundling(BundlingOptions.builder()
.image(dockerImage)
// the properties below are optional
.bundlingFileAccess(BundlingFileAccess.VOLUME_COPY)
.command(List.of("command"))
.entrypoint(List.of("entrypoint"))
.environment(Map.of(
"environmentKey", "environment"))
.local(localBundling)
.network("network")
.outputType(BundlingOutput.ARCHIVED)
.platform("platform")
.securityOpt("securityOpt")
.user("user")
.volumes(List.of(DockerVolume.builder()
.containerPath("containerPath")
.hostPath("hostPath")
// the properties below are optional
.consistency(DockerVolumeConsistency.CONSISTENT)
.build()))
.volumesFrom(List.of("volumesFrom"))
.workingDirectory("workingDirectory")
.build())
.exclude(List.of("exclude"))
.extraHash("extraHash")
.follow(SymlinkFollowMode.NEVER)
.ignoreMode(IgnoreMode.GLOB)
.build();
// Install: dotnet add package Amazon.CDK.Lib
// The code below shows an example of how to instantiate this type.
// The values are placeholders you should change.
using Amazon.CDK;
DockerImage dockerImage;
ILocalBundling localBundling;
var assetStaging = new AssetStaging(this, "MyAssetStaging", new AssetStagingProps {
SourcePath = "sourcePath",
// the properties below are optional
AssetHash = "assetHash",
AssetHashType = AssetHashType.SOURCE,
Bundling = new BundlingOptions {
Image = dockerImage,
// the properties below are optional
BundlingFileAccess = BundlingFileAccess.VOLUME_COPY,
Command = new [] { "command" },
Entrypoint = new [] { "entrypoint" },
Environment = new Dictionary<string, string> {
{ "environmentKey", "environment" }
},
Local = localBundling,
Network = "network",
OutputType = BundlingOutput.ARCHIVED,
Platform = "platform",
SecurityOpt = "securityOpt",
User = "user",
Volumes = new [] { new DockerVolume {
ContainerPath = "containerPath",
HostPath = "hostPath",
// the properties below are optional
Consistency = DockerVolumeConsistency.CONSISTENT
} },
VolumesFrom = new [] { "volumesFrom" },
WorkingDirectory = "workingDirectory"
},
Exclude = new [] { "exclude" },
ExtraHash = "extraHash",
Follow = SymlinkFollowMode.NEVER,
IgnoreMode = IgnoreMode.GLOB
});
// Install: go get github.com/aws/aws-cdk-go/awscdk/v2
// The code below shows an example of how to instantiate this type.
// The values are placeholders you should change.
import "github.com/aws/aws-cdk-go/awscdk"
var dockerImage DockerImage
var localBundling ILocalBundling
assetStaging := cdk.NewAssetStaging(this, jsii.String("MyAssetStaging"), &AssetStagingProps{
SourcePath: jsii.String("sourcePath"),
// the properties below are optional
AssetHash: jsii.String("assetHash"),
AssetHashType: cdk.AssetHashType_SOURCE,
Bundling: &BundlingOptions{
Image: dockerImage,
// the properties below are optional
BundlingFileAccess: cdk.BundlingFileAccess_VOLUME_COPY,
Command: []*string{
jsii.String("command"),
},
Entrypoint: []*string{
jsii.String("entrypoint"),
},
Environment: map[string]*string{
"environmentKey": jsii.String("environment"),
},
Local: localBundling,
Network: jsii.String("network"),
OutputType: cdk.BundlingOutput_ARCHIVED,
Platform: jsii.String("platform"),
SecurityOpt: jsii.String("securityOpt"),
User: jsii.String("user"),
Volumes: []DockerVolume{
&DockerVolume{
ContainerPath: jsii.String("containerPath"),
HostPath: jsii.String("hostPath"),
// the properties below are optional
Consistency: cdk.DockerVolumeConsistency_CONSISTENT,
},
},
VolumesFrom: []*string{
jsii.String("volumesFrom"),
},
WorkingDirectory: jsii.String("workingDirectory"),
},
Exclude: []*string{
jsii.String("exclude"),
},
ExtraHash: jsii.String("extraHash"),
Follow: cdk.SymlinkFollowMode_NEVER,
IgnoreMode: cdk.IgnoreMode_GLOB,
})
Initializer
new AssetStaging(scope: Construct, id: string, props: AssetStagingProps)
AssetStaging(scope: Construct, id: str, props: AssetStagingProps)
new AssetStaging(Construct scope, String id, AssetStagingProps props)
new AssetStaging(Construct scope, string id, AssetStagingProps props)
NewAssetStaging(Scope Construct, Id *string, Props AssetStagingProps)
Construct Props
assetHashoptionalstringasset_hashoptionalstrassetHashoptionalStringAssetHashoptionalstringAssetHashoptional*string#Default: based on assetHashType
notes
If assetHashType is set it must be set to AssetHashType.CUSTOM. For consistency, this custom hash will be SHA256 hashed and encoded as hex. The resulting hash will be the asset hash.
NOTE: the hash is used in order to identify a specific revision of the asset, and used for optimizing and caching deployment activities related to this asset such as packaging, uploading to Amazon S3, etc. If you chose to customize the hash, you will need to make sure it is updated every time the asset changes, or otherwise it is possible that some deployments will not be invalidated.
assetHashTypeoptionalAssetHashTypeasset_hash_typeoptionalAssetHashTypeassetHashTypeoptionalAssetHashTypeAssetHashTypeoptionalAssetHashTypeAssetHashTypeoptionalAssetHashType#Default: the default is AssetHashType.SOURCE, but if assetHash is explicitly specified this value defaults to AssetHashType.CUSTOM.
If assetHash is configured, this option must be undefined or AssetHashType.CUSTOM.
bundlingoptionalBundlingOptionsbundlingoptionalBundlingOptionsbundlingoptionalBundlingOptionsBundlingoptionalBundlingOptionsBundlingoptionalBundlingOptions#Default: uploaded as-is to S3 if the asset is a regular file or a .zip file, archived into a .zip file and uploaded to S3 otherwise
The asset path will be mounted at /asset-input. The Docker container is responsible for putting content at /asset-output. The content at /asset-output will be zipped and used as the final asset.
excludeoptionalstring[]excludeoptionaltyping.List[str]excludeoptionalList<String>Excludeoptionalstring[]Excludeoptional*[]*string#Default: nothing is excluded
See ignoreMode to set the matching behavior. Has no effect on Assets bundled using the bundling property.
extraHashoptionalstringextra_hashoptionalstrextraHashoptionalStringExtraHashoptionalstringExtraHashoptional*string#Default: hash is only based on source content
followoptionalSymlinkFollowModefollowoptionalSymlinkFollowModefollowoptionalSymlinkFollowModeFollowoptionalSymlinkFollowModeFollowoptionalSymlinkFollowMode= SymlinkFollowMode.NEVER#ignoreModeoptionalIgnoreModeignore_modeoptionalIgnoreModeignoreModeoptionalIgnoreModeIgnoreModeoptionalIgnoreModeIgnoreModeoptionalIgnoreMode= IgnoreMode.GLOB#Properties
absoluteStagedPathstringabsolute_staged_pathstrabsoluteStagedPathStringAbsoluteStagedPathstringAbsoluteStagedPath*stringrequired#notes
If asset staging is disabled, this will just be the source path or a temporary directory used for bundling.
If asset staging is enabled it will be the staged path.
IMPORTANT: If you are going to call addFileAsset(), use relativeStagedPath() instead.
BUNDLING_INPUT_DIRstringbundling_input_dirstrBUNDLING_INPUT_DIRStringBUNDLING_INPUT_DIRstringBUNDLING_INPUT_DIR*stringrequiredstatic#BUNDLING_OUTPUT_DIRstringbundling_output_dirstrBUNDLING_OUTPUT_DIRStringBUNDLING_OUTPUT_DIRstringBUNDLING_OUTPUT_DIR*stringrequiredstatic#packagingFileAssetPackagingpackagingFileAssetPackagingpackagingFileAssetPackagingPackagingFileAssetPackagingPackagingFileAssetPackagingrequired#Methods
clearAssetHashCache(): void@staticmethod def clear_asset_hash_cache() -> Nonepublic static void clearAssetHashCache()public static void ClearAssetHashCache()func ClearAssetHashCache()static#isConstruct(x: any): boolean@staticmethod def is_construct(x: Any) -> boolpublic static Boolean isConstruct(Object x)public static bool IsConstruct(object x)func IsConstruct(X interface{}) *boolstatic#notes · 1 parameter · returns
Use this method instead of instanceof to properly detect Construct instances, even when the construct library is symlinked.
Explanation: in JavaScript, multiple copies of the constructs library on disk are seen as independent, completely different libraries. As a consequence, the class Construct in each copy of the constructs library is seen as a different class, and an instance of one class will not test as instanceof the other class. npm install will not create installations like this, but users may manually symlink construct libraries together or use a monorepo tool: in those cases, multiple copies of the constructs library can be accidentally installed, and instanceof will behave unpredictably. It is safest to avoid using instanceof, and using this type-testing method instead.
Parameters
xxxxX— Any object.
Returns: true if x is an object created from a class which extends Construct.
relativeStagedPath(stack: Stack): stringdef relative_staged_path(self, stack: Stack) -> strpublic String relativeStagedPath(Stack stack)public string RelativeStagedPath(Stack stack)func RelativeStagedPath(Stack Stack) *string#notes
Only returns a relative path if the asset was staged, returns an absolute path if it was not staged.
A bundled asset might end up in the outDir and still not count as "staged"; if asset staging is disabled we're technically expected to reference source directories, but we don't have a source directory for the bundled outputs (as the bundle output is written to a temporary directory). Nevertheless, we will still return an absolute path.
A non-obvious directory layout may look like this:
CLOUD ASSEMBLY ROOT
+-- asset.12345abcdef/
+-- assembly-Stage
+-- MyStack.template.json
+-- MyStack.assets.json <- will contain { "path": "../asset.12345abcdef" }
toString(): stringdef to_string(self, ) -> strpublic String toString()public string ToString()func ToString() *string#with(...mixins: IMixin[]): IConstructdef with(self, mixins: IMixin) -> IConstructpublic IConstruct with(IMixin mixins)public IConstruct With(IMixin mixins)func With(Mixins IMixin) IConstruct#Mixins are applied in order. The list of constructs is captured at the start of the call, so constructs added by a mixin will not be visited. Use multiple with() calls if subsequent mixins should apply to added constructs.
1 parameter · returns
Parameters
mixinsmixinsmixinsmixinsMixins— The mixins to apply.
Returns: This construct for chaining