# InitFileAssetOptions

Additional options for creating an InitFile from an asset.

Extends: InitFileAssetOptions
Extends: InitFileOptions, AssetOptions

- Source: [`aws-ec2/lib/cfn-init-elements.ts`](https://github.com/aws/aws-cdk/blob/v2.275.0/packages/aws-cdk-lib/aws-ec2/lib/cfn-init-elements.ts#L318)

## Example

```ts
// 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';
import { aws_ec2 as ec2 } from 'aws-cdk-lib';
import { aws_iam as iam } from 'aws-cdk-lib';
import { aws_kms as interfaces_kms } from 'aws-cdk-lib/interfaces';

declare const dockerImage: cdk.DockerImage;
declare const grantable: iam.IGrantable;
declare const initServiceRestartHandle: ec2.InitServiceRestartHandle;
declare const keyRef: interfaces_kms.IKeyRef;
declare const localBundling: cdk.ILocalBundling;
const initFileAssetOptions: ec2.InitFileAssetOptions = {
  assetHash: 'assetHash',
  assetHashType: cdk.AssetHashType.SOURCE,
  base64Encoded: false,
  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',
  },
  deployTime: false,
  displayName: 'displayName',
  exclude: ['exclude'],
  followSymlinks: cdk.SymlinkFollowMode.NEVER,
  group: 'group',
  ignoreMode: cdk.IgnoreMode.GLOB,
  mode: 'mode',
  owner: 'owner',
  readers: [grantable],
  serviceRestartHandles: [initServiceRestartHandle],
  sourceKMSKey: keyRef,
};
```

## Properties

- `assetHash`: string — Specify a custom hash for this asset.

  **Default:** based on `assetHashType`

  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.

- `assetHashType`: [AssetHashType](/cdk/api/v2/docs/aws-cdk-lib.AssetHashType.html) — Specifies the type of hash to calculate for this asset.

  **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`.

- `base64Encoded`: boolean = false — True if the inlined content (from a string or file) should be treated as base64 encoded.

  Only applicable for inlined string and file content.

- `bundling`: [BundlingOptions](/cdk/api/v2/docs/aws-cdk-lib.BundlingOptions.html) — Bundle the asset by executing a command in a Docker container or a custom bundling provider.

  **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.

- `deployTime`: boolean = false — Whether or not the asset needs to exist beyond deployment time;

  i.e.
  are copied over to a different location and not needed afterwards.
  Setting this property to true has an impact on the lifecycle of the asset,
  because we will assume that it is safe to delete after the CloudFormation
  deployment succeeds.

  For example, Lambda Function assets are copied over to Lambda during
  deployment. Therefore, it is not necessary to store the asset in S3, so
  we consider those deployTime assets.

- `displayName`: string — A display name for this asset.

  **Default:** Stack-relative construct path

  If supplied, the display name will be used in locations where the asset
  identifier is printed, like in the CLI progress information. If the same
  asset is added multiple times, the display name of the first occurrence is
  used.

  The default is the construct path of the Asset construct, with respect to
  the enclosing stack. If the asset is produced by a construct helper
  function (such as `lambda.Code.fromAsset()`), this will look like
  `MyFunction/Code`.

  We use the stack-relative construct path so that in the common case where
  you have multiple stacks with the same asset, we won't show something like
  `/MyBetaStack/MyFunction/Code` when you are actually deploying to
  production.

- `exclude`: string[] — File paths matching the patterns will be excluded.

  **Default:** nothing is excluded

  See `ignoreMode` to set the matching behavior.
  Has no effect on Assets bundled using the `bundling` property.

- `followSymlinks`: [SymlinkFollowMode](/cdk/api/v2/docs/aws-cdk-lib.SymlinkFollowMode.html) = SymlinkFollowMode.NEVER — A strategy for how to handle symlinks.

- `group`: string = 'root' — The name of the owning group for this file.

  Not supported for Windows systems.

- `ignoreMode`: [IgnoreMode](/cdk/api/v2/docs/aws-cdk-lib.IgnoreMode.html) = IgnoreMode.GLOB — The ignore behavior to use for `exclude` patterns.

- `mode`: string = '000644' — A six-digit octal value representing the mode for this file.

  Use the first three digits for symlinks and the last three digits for
  setting permissions. To create a symlink, specify 120xxx, where xxx
  defines the permissions of the target file. To specify permissions for a
  file, use the last three digits, such as 000644.

  Not supported for Windows systems.

- `owner`: string = 'root' — The name of the owning user for this file.

  Not supported for Windows systems.

- `readers`: [IGrantable](/cdk/api/v2/docs/aws-cdk-lib.aws_iam.IGrantable.html)[] — A list of principals that should be able to read this asset from S3.

  **Default:** No principals that can read file asset.

  You can use `asset.grantRead(principal)` to grant read permissions later.

- `serviceRestartHandles`: [InitServiceRestartHandle](/cdk/api/v2/docs/aws-cdk-lib.aws_ec2.InitServiceRestartHandle.html)[] — Restart the given service after this file has been written.

  **Default:** Do not restart any service

- `sourceKMSKey`: [IKeyRef](/cdk/api/v2/docs/aws-cdk-lib.interfaces.aws_kms.IKeyRef.html) — The ARN of the KMS key used to encrypt the handler code.

  **Default:** the default server-side encryption with Amazon S3 managed keys(SSE-S3) key will be used.
