# RemovalPolicy

Possible values for a resource's Removal Policy.

The removal policy controls what happens to the resource if it stops being
managed by CloudFormation. This can happen in one of three situations:

- The resource is removed from the template, so CloudFormation stops managing it;
- A change to the resource is made that requires it to be replaced, so CloudFormation stops
  managing it;
- The stack is deleted, so CloudFormation stops managing all resources in it.

The Removal Policy applies to all above cases.

Many stateful resources in the AWS Construct Library will accept a
`removalPolicy` as a property, typically defaulting it to `RETAIN`.

If the AWS Construct Library resource does not accept a `removalPolicy`
argument, you can always configure it by using the escape hatch mechanism,
as shown in the following example:

```ts
declare const bucket: s3.Bucket;

const cfnBucket = bucket.node.findChild('Resource') as CfnResource;
cfnBucket.applyRemovalPolicy(RemovalPolicy.DESTROY);
```

- Source: [`core/lib/removal-policy.ts`](https://github.com/aws/aws-cdk/blob/v2.275.0/packages/aws-cdk-lib/core/lib/removal-policy.ts#L28)
- Type last changed: v2.90.0 · 4 Aug 2023

## Example

```ts
declare const myRole: iam.Role;
new cr.AwsCustomResource(this, 'Customized', {
  role: myRole, // must be assumable by the `lambda.amazonaws.com` service principal
  timeout: Duration.minutes(10), // defaults to 2 minutes
  memorySize: 1025, // defaults to 512 if installLatestAwsSdk is true
  logGroup: new logs.LogGroup(this, 'AwsCustomResourceLogs', {
    retention: logs.RetentionDays.ONE_DAY,
  }),
  functionName: 'my-custom-name', // defaults to a CloudFormation generated name
  removalPolicy: RemovalPolicy.RETAIN, // defaults to `RemovalPolicy.DESTROY`
  policy: cr.AwsCustomResourcePolicy.fromSdkCalls({
    resources: cr.AwsCustomResourcePolicy.ANY_RESOURCE,
  }),
});
```

## Members

| Member | Description |
| --- | --- |
| `DESTROY` | When this removal policy is applied, the resource will be physically destroyed when it is removed from the stack or when the stack is deleted. |
| `RETAIN` | This uses the 'Retain' DeletionPolicy, which will cause the resource to be retained in the account, but orphaned from the stack. |
| `SNAPSHOT` | This retention policy deletes the resource, but saves a snapshot of its data before deleting, so that it can be re-created later. |
| `RETAIN_ON_UPDATE_OR_DELETE` | Resource will be retained when they are requested to be deleted during a stack delete request or need to be replaced due to a stack update request. |

## Referenced by

- [`AccessEntryProps`](/v2/docs/aws-cdk-lib.aws_eks.AccessEntryProps).removalPolicy
- [`AccessEntryProps`](/v2/docs/aws-cdk-lib.aws_eks_v2.AccessEntryProps).removalPolicy
- [`AddonProps`](/v2/docs/aws-cdk-lib.aws_eks.AddonProps).removalPolicy
- [`AddonProps`](/v2/docs/aws-cdk-lib.aws_eks_v2.AddonProps).removalPolicy
- [`AlbControllerOptions`](/v2/docs/aws-cdk-lib.aws_eks.AlbControllerOptions).removalPolicy
- [`AlbControllerOptions`](/v2/docs/aws-cdk-lib.aws_eks_v2.AlbControllerOptions).removalPolicy
- [`AliasProps`](/v2/docs/aws-cdk-lib.aws_kms.AliasProps).removalPolicy
- [`ApplicationProps`](/v2/docs/@aws-cdk_aws-kinesisanalytics-flink-alpha.ApplicationProps).removalPolicy
- [`AwsCustomResourceProps`](/v2/docs/aws-cdk-lib.custom_resources.AwsCustomResourceProps).removalPolicy
- [`BackupVaultProps`](/v2/docs/aws-cdk-lib.aws_backup.BackupVaultProps).removalPolicy
- [`BucketPolicyProps`](/v2/docs/aws-cdk-lib.aws_s3.BucketPolicyProps).removalPolicy
- [`BucketProps`](/v2/docs/aws-cdk-lib.aws_s3.BucketProps).removalPolicy
- [`ChannelGroupProps`](/v2/docs/@aws-cdk_aws-mediapackagev2-alpha.ChannelGroupProps).removalPolicy
- [`ChannelOptions`](/v2/docs/@aws-cdk_aws-mediapackagev2-alpha.ChannelOptions).removalPolicy
- [`ClusterCommonOptions`](/v2/docs/aws-cdk-lib.aws_eks_v2.ClusterCommonOptions).removalPolicy
- [`ClusterInstanceBindOptions`](/v2/docs/aws-cdk-lib.aws_rds.ClusterInstanceBindOptions).removalPolicy
- [`ClusterOptions`](/v2/docs/aws-cdk-lib.aws_eks.ClusterOptions).removalPolicy
- [`ClusterProps`](/v2/docs/@aws-cdk_aws-dsql-alpha.ClusterProps).removalPolicy
- [`ClusterProps`](/v2/docs/@aws-cdk_aws-msk-alpha.ClusterProps).removalPolicy
- [`ClusterProps`](/v2/docs/@aws-cdk_aws-redshift-alpha.ClusterProps).removalPolicy
- [`ClusterSubnetGroupProps`](/v2/docs/@aws-cdk_aws-redshift-alpha.ClusterSubnetGroupProps).removalPolicy
- [`CrossAccountZoneDelegationRecordProps`](/v2/docs/aws-cdk-lib.aws_route53.CrossAccountZoneDelegationRecordProps).removalPolicy
- [`CustomResourceProps`](/v2/docs/aws-cdk-lib.CustomResourceProps).removalPolicy
- [`DatabaseClusterFromSnapshotProps`](/v2/docs/aws-cdk-lib.aws_rds.DatabaseClusterFromSnapshotProps).removalPolicy
- [`DatabaseClusterProps`](/v2/docs/aws-cdk-lib.aws_docdb.DatabaseClusterProps).instanceRemovalPolicy
- [`DatabaseClusterProps`](/v2/docs/aws-cdk-lib.aws_docdb.DatabaseClusterProps).removalPolicy
- [`DatabaseClusterProps`](/v2/docs/aws-cdk-lib.aws_rds.DatabaseClusterProps).removalPolicy
- [`DatabaseClusterProps`](/v2/docs/@aws-cdk_aws-neptune-alpha.DatabaseClusterProps).removalPolicy
- [`DatabaseClusterProps`](/v2/docs/aws-cdk-lib.aws_docdb.DatabaseClusterProps).securityGroupRemovalPolicy
- [`DatabaseInstanceNewProps`](/v2/docs/aws-cdk-lib.aws_rds.DatabaseInstanceNewProps).removalPolicy
- [`DatabaseInstanceProps`](/v2/docs/aws-cdk-lib.aws_docdb.DatabaseInstanceProps).removalPolicy
- [`DatabaseInstanceProps`](/v2/docs/@aws-cdk_aws-neptune-alpha.DatabaseInstanceProps).removalPolicy
- [`DatabaseProps`](/v2/docs/aws-cdk-lib.aws_glue.DatabaseProps).removalPolicy
- [`DataQualityRulesetProps`](/v2/docs/aws-cdk-lib.aws_glue.DataQualityRulesetProps).removalPolicy
- [`DomainProps`](/v2/docs/aws-cdk-lib.aws_elasticsearch.DomainProps).removalPolicy
- [`DomainProps`](/v2/docs/aws-cdk-lib.aws_opensearchservice.DomainProps).removalPolicy
- [`FargateProfileOptions`](/v2/docs/aws-cdk-lib.aws_eks.FargateProfileOptions).removalPolicy
- [`FargateProfileOptions`](/v2/docs/aws-cdk-lib.aws_eks_v2.FargateProfileOptions).removalPolicy
- [`FileSystemProps`](/v2/docs/aws-cdk-lib.aws_efs.FileSystemProps).removalPolicy
- [`FileSystemProps`](/v2/docs/aws-cdk-lib.aws_fsx.FileSystemProps).removalPolicy
- [`FunctionOptions`](/v2/docs/aws-cdk-lib.aws_lambda.FunctionOptions).logRemovalPolicy
- [`HelmChartOptions`](/v2/docs/aws-cdk-lib.aws_eks.HelmChartOptions).removalPolicy
- [`HelmChartOptions`](/v2/docs/aws-cdk-lib.aws_eks_v2.HelmChartOptions).removalPolicy
- [`KeyProps`](/v2/docs/aws-cdk-lib.aws_kms.KeyProps).removalPolicy
- [`KubectlProviderOptions`](/v2/docs/aws-cdk-lib.aws_eks_v2.KubectlProviderOptions).removalPolicy
- [`KubectlProviderProps`](/v2/docs/aws-cdk-lib.aws_eks.KubectlProviderProps).removalPolicy
- [`KubernetesManifestOptions`](/v2/docs/aws-cdk-lib.aws_eks.KubernetesManifestOptions).removalPolicy
- [`KubernetesManifestOptions`](/v2/docs/aws-cdk-lib.aws_eks_v2.KubernetesManifestOptions).removalPolicy
- [`KubernetesObjectValueProps`](/v2/docs/aws-cdk-lib.aws_eks.KubernetesObjectValueProps).removalPolicy
- [`KubernetesObjectValueProps`](/v2/docs/aws-cdk-lib.aws_eks_v2.KubernetesObjectValueProps).removalPolicy
- [`KubernetesPatchProps`](/v2/docs/aws-cdk-lib.aws_eks.KubernetesPatchProps).removalPolicy
- [`KubernetesPatchProps`](/v2/docs/aws-cdk-lib.aws_eks_v2.KubernetesPatchProps).removalPolicy
- [`LayerVersionOptions`](/v2/docs/aws-cdk-lib.aws_lambda.LayerVersionOptions).removalPolicy
- [`LogGroupProps`](/v2/docs/aws-cdk-lib.aws_logs.LogGroupProps).removalPolicy
- [`LogRetentionProps`](/v2/docs/aws-cdk-lib.aws_logs.LogRetentionProps).removalPolicy
- [`LogStreamProps`](/v2/docs/aws-cdk-lib.aws_logs.LogStreamProps).removalPolicy
- [`NamespaceProps`](/v2/docs/@aws-cdk_aws-s3tables-alpha.NamespaceProps).removalPolicy
- [`NestedStackProps`](/v2/docs/aws-cdk-lib.NestedStackProps).removalPolicy
- [`NodegroupOptions`](/v2/docs/aws-cdk-lib.aws_eks.NodegroupOptions).removalPolicy
- [`NodegroupOptions`](/v2/docs/aws-cdk-lib.aws_eks_v2.NodegroupOptions).removalPolicy
- [`OidcProviderNativeProps`](/v2/docs/aws-cdk-lib.aws_iam.OidcProviderNativeProps).removalPolicy
- [`OpenIdConnectProviderProps`](/v2/docs/aws-cdk-lib.aws_eks.OpenIdConnectProviderProps).removalPolicy
- [`OpenIdConnectProviderProps`](/v2/docs/aws-cdk-lib.aws_eks_v2.OpenIdConnectProviderProps).removalPolicy
- [`OpenIdConnectProviderProps`](/v2/docs/aws-cdk-lib.aws_iam.OpenIdConnectProviderProps).removalPolicy
- [`OriginEndpointOptions`](/v2/docs/@aws-cdk_aws-mediapackagev2-alpha.OriginEndpointOptions).removalPolicy
- [`ParameterGroupProps`](/v2/docs/aws-cdk-lib.aws_rds.ParameterGroupProps).removalPolicy
- [`QueueProps`](/v2/docs/aws-cdk-lib.aws_sqs.QueueProps).removalPolicy
- [`RemovalPolicyOptions`](/v2/docs/aws-cdk-lib.RemovalPolicyOptions).default
- [`ReportGroupProps`](/v2/docs/aws-cdk-lib.aws_codebuild.ReportGroupProps).removalPolicy
- [`RepositoryProps`](/v2/docs/aws-cdk-lib.aws_ecr.RepositoryProps).removalPolicy
- [`RestApiBaseProps`](/v2/docs/aws-cdk-lib.aws_apigateway.RestApiBaseProps).cloudWatchRoleRemovalPolicy
- [`ScheduleGroupProps`](/v2/docs/aws-cdk-lib.aws_scheduler.ScheduleGroupProps).removalPolicy
- [`SecretProps`](/v2/docs/aws-cdk-lib.aws_secretsmanager.SecretProps).removalPolicy
- [`SecurityConfigurationProps`](/v2/docs/aws-cdk-lib.aws_glue.SecurityConfigurationProps).removalPolicy
- [`ServerlessClusterFromSnapshotProps`](/v2/docs/aws-cdk-lib.aws_rds.ServerlessClusterFromSnapshotProps).removalPolicy
- [`ServerlessClusterProps`](/v2/docs/aws-cdk-lib.aws_rds.ServerlessClusterProps).removalPolicy
- [`ServiceAccountOptions`](/v2/docs/aws-cdk-lib.aws_eks.ServiceAccountOptions).removalPolicy
- [`ServiceAccountOptions`](/v2/docs/aws-cdk-lib.aws_eks_v2.ServiceAccountOptions).removalPolicy
- [`StateMachineProps`](/v2/docs/aws-cdk-lib.aws_stepfunctions.StateMachineProps).removalPolicy
- [`StreamProps`](/v2/docs/aws-cdk-lib.aws_kinesis.StreamProps).removalPolicy
- [`SubnetGroupProps`](/v2/docs/aws-cdk-lib.aws_rds.SubnetGroupProps).removalPolicy
- [`SubnetGroupProps`](/v2/docs/@aws-cdk_aws-neptune-alpha.SubnetGroupProps).removalPolicy
- [`TableBucketPolicyProps`](/v2/docs/@aws-cdk_aws-s3tables-alpha.TableBucketPolicyProps).removalPolicy
- [`TableBucketProps`](/v2/docs/@aws-cdk_aws-s3tables-alpha.TableBucketProps).removalPolicy
- [`TableOptions`](/v2/docs/aws-cdk-lib.aws_dynamodb.TableOptions).removalPolicy
- [`TableOptions`](/v2/docs/aws-cdk-lib.aws_dynamodb.TableOptions).replicaRemovalPolicy
- [`TablePolicyProps`](/v2/docs/@aws-cdk_aws-s3tables-alpha.TablePolicyProps).removalPolicy
- [`TableProps`](/v2/docs/@aws-cdk_aws-redshift-alpha.TableProps).removalPolicy
- [`TableProps`](/v2/docs/@aws-cdk_aws-s3tables-alpha.TableProps).removalPolicy
- [`TablePropsV2`](/v2/docs/aws-cdk-lib.aws_dynamodb.TablePropsV2).removalPolicy
- [`TableV2MultiAccountReplicaProps`](/v2/docs/aws-cdk-lib.aws_dynamodb.TableV2MultiAccountReplicaProps).removalPolicy
- [`UserPoolProps`](/v2/docs/aws-cdk-lib.aws_cognito.UserPoolProps).removalPolicy
- [`UserProps`](/v2/docs/@aws-cdk_aws-redshift-alpha.UserProps).removalPolicy
- [`VersionOptions`](/v2/docs/aws-cdk-lib.aws_lambda.VersionOptions).removalPolicy
- [`VolumeProps`](/v2/docs/aws-cdk-lib.aws_ec2.VolumeProps).removalPolicy
