UNPKG

aws-cdk-lib

Version:

Version 2 of the AWS Cloud Development Kit library

180 lines (179 loc) 7.38 kB
import { ArnComponents } from './arn'; import { RemovalPolicy } from './removal-policy'; import { Stack } from './stack'; import { Construct, IConstruct } from 'constructs'; /** * Represents the environment a given resource lives in. * Used as the return value for the `IResource.env` property. */ export interface ResourceEnvironment { /** * The AWS account ID that this resource belongs to. * Since this can be a Token * (for example, when the account is CloudFormation's AWS::AccountId intrinsic), * make sure to use Token.compareStrings() * instead of just comparing the values for equality. */ readonly account: string; /** * The AWS region that this resource belongs to. * Since this can be a Token * (for example, when the region is CloudFormation's AWS::Region intrinsic), * make sure to use Token.compareStrings() * instead of just comparing the values for equality. */ readonly region: string; } /** * Interface for the Resource construct. */ export interface IResource extends IConstruct { /** * The stack in which this resource is defined. */ readonly stack: Stack; /** * The environment this resource belongs to. * For resources that are created and managed by the CDK * (generally, those created by creating new class instances like Role, Bucket, etc.), * this is always the same as the environment of the stack they belong to; * however, for imported resources * (those obtained from static methods like fromRoleArn, fromBucketName, etc.), * that might be different than the stack they were imported into. */ readonly env: ResourceEnvironment; /** * Apply the given removal policy to this resource * * The Removal Policy controls what happens to this resource when it stops * being managed by CloudFormation, either because you've removed it from the * CDK application or because you've made a change that requires the resource * to be replaced. * * The resource can be deleted (`RemovalPolicy.DESTROY`), or left in your AWS * account for data recovery and cleanup later (`RemovalPolicy.RETAIN`). */ applyRemovalPolicy(policy: RemovalPolicy): void; } /** * Construction properties for `Resource`. */ export interface ResourceProps { /** * The value passed in by users to the physical name prop of the resource. * * - `undefined` implies that a physical name will be allocated by * CloudFormation during deployment. * - a concrete value implies a specific physical name * - `PhysicalName.GENERATE_IF_NEEDED` is a marker that indicates that a physical will only be generated * by the CDK if it is needed for cross-environment references. Otherwise, it will be allocated by CloudFormation. * * @default - The physical name will be allocated by CloudFormation at deployment time */ readonly physicalName?: string; /** * The AWS account ID this resource belongs to. * * @default - the resource is in the same account as the stack it belongs to */ readonly account?: string; /** * The AWS region this resource belongs to. * * @default - the resource is in the same region as the stack it belongs to */ readonly region?: string; /** * ARN to deduce region and account from * * The ARN is parsed and the account and region are taken from the ARN. * This should be used for imported resources. * * Cannot be supplied together with either `account` or `region`. * * @default - take environment from `account`, `region` parameters, or use Stack environment. */ readonly environmentFromArn?: string; } /** * A construct which represents an AWS resource. */ export declare abstract class Resource extends Construct implements IResource { /** * Check whether the given construct is a Resource */ static isResource(construct: IConstruct): construct is Resource; /** * Returns true if the construct was created by CDK, and false otherwise */ static isOwnedResource(construct: IConstruct): boolean; readonly stack: Stack; readonly env: ResourceEnvironment; /** * Returns a string-encoded token that resolves to the physical name that * should be passed to the CloudFormation resource. * * This value will resolve to one of the following: * - a concrete value (e.g. `"my-awesome-bucket"`) * - `undefined`, when a name should be generated by CloudFormation * - a concrete name generated automatically during synthesis, in * cross-environment scenarios. * */ protected readonly physicalName: string; private _physicalName; private readonly _allowCrossEnvironment; constructor(scope: Construct, id: string, props?: ResourceProps); /** * Called when this resource is referenced across environments * (account/region) to order to request that a physical name will be generated * for this resource during synthesis, so the resource can be referenced * through its absolute name/arn. * * @internal */ _enableCrossEnvironment(): void; /** * Apply the given removal policy to this resource * * The Removal Policy controls what happens to this resource when it stops * being managed by CloudFormation, either because you've removed it from the * CDK application or because you've made a change that requires the resource * to be replaced. * * The resource can be deleted (`RemovalPolicy.DESTROY`), or left in your AWS * account for data recovery and cleanup later (`RemovalPolicy.RETAIN`). */ applyRemovalPolicy(policy: RemovalPolicy): void; protected generatePhysicalName(): string; /** * Returns an environment-sensitive token that should be used for the * resource's "name" attribute (e.g. `bucket.bucketName`). * * Normally, this token will resolve to `nameAttr`, but if the resource is * referenced across environments, it will be resolved to `this.physicalName`, * which will be a concrete name. * * @param nameAttr The CFN attribute which resolves to the resource's name. * Commonly this is the resource's `ref`. */ protected getResourceNameAttribute(nameAttr: string): string; /** * Returns an environment-sensitive token that should be used for the * resource's "ARN" attribute (e.g. `bucket.bucketArn`). * * Normally, this token will resolve to `arnAttr`, but if the resource is * referenced across environments, `arnComponents` will be used to synthesize * a concrete ARN with the resource's physical name. Make sure to reference * `this.physicalName` in `arnComponents`. * * @param arnAttr The CFN attribute which resolves to the ARN of the resource. * Commonly it will be called "Arn" (e.g. `resource.attrArn`), but sometimes * it's the CFN resource's `ref`. * @param arnComponents The format of the ARN of this resource. You must * reference `this.physicalName` somewhere within the ARN in order for * cross-environment references to work. * */ protected getResourceArnAttribute(arnAttr: string, arnComponents: ArnComponents): string; }