645 lines
22 KiB
TypeScript
645 lines
22 KiB
TypeScript
import type { IConstruct } from 'constructs';
|
|
import { Construct } from 'constructs';
|
|
import type { IApplication } from './application';
|
|
import type { IDeploymentStrategy } from './deployment-strategy';
|
|
import type { IEnvironment } from './environment';
|
|
import type { ActionPoint, IEventDestination, ExtensionOptions, IExtension, IExtensible } from './extension';
|
|
import { ExtensibleBase } from './extension';
|
|
import type { IDeploymentStrategyRef } from '../../interfaces/generated/aws-appconfig-interfaces.generated';
|
|
import type * as cp from '../../aws-codepipeline';
|
|
import * as iam from '../../aws-iam';
|
|
import type * as kms from '../../aws-kms';
|
|
import type * as lambda from '../../aws-lambda';
|
|
import type * as s3 from '../../aws-s3';
|
|
import type * as sm from '../../aws-secretsmanager';
|
|
import type * as ssm from '../../aws-ssm';
|
|
import type { DeletionProtectionCheck } from './util';
|
|
/**
|
|
* Options for the Configuration construct
|
|
*/
|
|
export interface ConfigurationOptions {
|
|
/**
|
|
* The deployment strategy for the configuration.
|
|
*
|
|
* @default - A deployment strategy with the rollout strategy set to
|
|
* RolloutStrategy.CANARY_10_PERCENT_20_MINUTES
|
|
*/
|
|
readonly deploymentStrategy?: IDeploymentStrategyRef;
|
|
/**
|
|
* The name of the configuration.
|
|
*
|
|
* @default - A name is generated.
|
|
*/
|
|
readonly name?: string;
|
|
/**
|
|
* The validators for the configuration.
|
|
*
|
|
* @default - No validators.
|
|
*/
|
|
readonly validators?: IValidator[];
|
|
/**
|
|
* The description of the configuration.
|
|
*
|
|
* @default - No description.
|
|
*/
|
|
readonly description?: string;
|
|
/**
|
|
* The type of configuration.
|
|
*
|
|
* @default ConfigurationType.FREEFORM
|
|
*/
|
|
readonly type?: ConfigurationType;
|
|
/**
|
|
* The list of environments to deploy the configuration to.
|
|
*
|
|
* If this parameter is not specified, then there will be no
|
|
* deployment created alongside this configuration.
|
|
*
|
|
* Deployments can be added later using the `IEnvironment.addDeployment` or
|
|
* `IEnvironment.addDeployments` methods.
|
|
*
|
|
* @default - None.
|
|
*/
|
|
readonly deployTo?: IEnvironment[];
|
|
/**
|
|
* The deployment key of the configuration.
|
|
*
|
|
* @default - None.
|
|
*/
|
|
readonly deploymentKey?: kms.IKey;
|
|
/**
|
|
* A parameter to configure deletion protection.
|
|
* Deletion protection prevents a user from deleting a configuration profile if your application has called
|
|
* either `GetLatestConfiguration` or `GetConfiguration` for the configuration profile during the specified interval.
|
|
*
|
|
* @see https://docs.aws.amazon.com/appconfig/latest/userguide/deletion-protection.html
|
|
*
|
|
* @default DeletionProtectionCheck.ACCOUNT_DEFAULT
|
|
*/
|
|
readonly deletionProtectionCheck?: DeletionProtectionCheck;
|
|
}
|
|
/**
|
|
* Properties for the Configuration construct.
|
|
*/
|
|
export interface ConfigurationProps extends ConfigurationOptions {
|
|
/**
|
|
* The application associated with the configuration.
|
|
*/
|
|
readonly application: IApplication;
|
|
}
|
|
export interface IConfiguration extends IConstruct {
|
|
/**
|
|
* The deployment strategy for the configuration.
|
|
*/
|
|
readonly deploymentStrategy?: IDeploymentStrategy;
|
|
/**
|
|
* The configuration version number.
|
|
*/
|
|
readonly versionNumber?: string;
|
|
/**
|
|
* The application associated with the configuration.
|
|
*/
|
|
readonly application: IApplication;
|
|
/**
|
|
* The name of the configuration.
|
|
*/
|
|
readonly name?: string;
|
|
/**
|
|
* The validators for the configuration.
|
|
*/
|
|
readonly validators?: IValidator[];
|
|
/**
|
|
* The description of the configuration.
|
|
*/
|
|
readonly description?: string;
|
|
/**
|
|
* The configuration type.
|
|
*/
|
|
readonly type?: ConfigurationType;
|
|
/**
|
|
* The environments to deploy to.
|
|
*/
|
|
readonly deployTo?: IEnvironment[];
|
|
/**
|
|
* The deployment key for the configuration.
|
|
*/
|
|
readonly deploymentKey?: kms.IKey;
|
|
/**
|
|
* The ID of the configuration profile.
|
|
*/
|
|
readonly configurationProfileId: string;
|
|
}
|
|
declare abstract class ConfigurationBase extends Construct implements IConfiguration, IExtensible {
|
|
abstract readonly versionNumber?: string;
|
|
abstract readonly configurationProfileId: string;
|
|
/**
|
|
* The application associated with the configuration.
|
|
*/
|
|
readonly application: IApplication;
|
|
/**
|
|
* The environments to deploy to.
|
|
*/
|
|
readonly deployTo?: IEnvironment[];
|
|
/**
|
|
* The name of the configuration.
|
|
*/
|
|
readonly name?: string;
|
|
/**
|
|
* The validators for the configuration.
|
|
*/
|
|
readonly validators?: IValidator[];
|
|
/**
|
|
* The description of the configuration.
|
|
*/
|
|
readonly description?: string;
|
|
/**
|
|
* The configuration type.
|
|
*/
|
|
readonly type?: ConfigurationType;
|
|
/**
|
|
* The deployment key for the configuration.
|
|
*/
|
|
readonly deploymentKey?: kms.IKey;
|
|
private readonly _deploymentStrategy?;
|
|
/**
|
|
* The deployment strategy for the configuration.
|
|
*/
|
|
get deploymentStrategy(): IDeploymentStrategy | undefined;
|
|
protected applicationId: string;
|
|
protected extensible: ExtensibleBase;
|
|
protected deletionProtectionCheck?: DeletionProtectionCheck;
|
|
constructor(scope: Construct, id: string, props: ConfigurationProps);
|
|
/**
|
|
* Adds an extension defined by the action point and event destination
|
|
* and also creates an extension association to the configuration profile.
|
|
*
|
|
* @param actionPoint The action point which triggers the event
|
|
* @param eventDestination The event that occurs during the extension
|
|
* @param options Options for the extension
|
|
*/
|
|
on(actionPoint: ActionPoint, eventDestination: IEventDestination, options?: ExtensionOptions): void;
|
|
/**
|
|
* Adds a PRE_CREATE_HOSTED_CONFIGURATION_VERSION extension with the
|
|
* provided event destination and also creates an extension association to the configuration profile.
|
|
*
|
|
* @param eventDestination The event that occurs during the extension
|
|
* @param options Options for the extension
|
|
*/
|
|
preCreateHostedConfigurationVersion(eventDestination: IEventDestination, options?: ExtensionOptions): void;
|
|
/**
|
|
* Adds a PRE_START_DEPLOYMENT extension with the provided event destination
|
|
* and also creates an extension association to the configuration profile.
|
|
*
|
|
* @param eventDestination The event that occurs during the extension
|
|
* @param options Options for the extension
|
|
*/
|
|
preStartDeployment(eventDestination: IEventDestination, options?: ExtensionOptions): void;
|
|
/**
|
|
* Adds an ON_DEPLOYMENT_START extension with the provided event destination
|
|
* and also creates an extension association to the configuration profile.
|
|
*
|
|
* @param eventDestination The event that occurs during the extension
|
|
* @param options Options for the extension
|
|
*/
|
|
onDeploymentStart(eventDestination: IEventDestination, options?: ExtensionOptions): void;
|
|
/**
|
|
* Adds an ON_DEPLOYMENT_STEP extension with the provided event destination
|
|
* and also creates an extension association to the configuration profile.
|
|
*
|
|
* @param eventDestination The event that occurs during the extension
|
|
* @param options Options for the extension
|
|
*/
|
|
onDeploymentStep(eventDestination: IEventDestination, options?: ExtensionOptions): void;
|
|
/**
|
|
* Adds an ON_DEPLOYMENT_BAKING extension with the provided event destination and
|
|
* also creates an extension association to the configuration profile.
|
|
*
|
|
* @param eventDestination The event that occurs during the extension
|
|
* @param options Options for the extension
|
|
*/
|
|
onDeploymentBaking(eventDestination: IEventDestination, options?: ExtensionOptions): void;
|
|
/**
|
|
* Adds an ON_DEPLOYMENT_COMPLETE extension with the provided event destination
|
|
* and also creates an extension association to the configuration profile.
|
|
*
|
|
* @param eventDestination The event that occurs during the extension
|
|
* @param options Options for the extension
|
|
*/
|
|
onDeploymentComplete(eventDestination: IEventDestination, options?: ExtensionOptions): void;
|
|
/**
|
|
* Adds an ON_DEPLOYMENT_ROLLED_BACK extension with the provided event destination
|
|
* and also creates an extension association to the configuration profile.
|
|
*
|
|
* @param eventDestination The event that occurs during the extension
|
|
* @param options Options for the extension
|
|
*/
|
|
onDeploymentRolledBack(eventDestination: IEventDestination, options?: ExtensionOptions): void;
|
|
/**
|
|
* Adds an AT_DEPLOYMENT_TICK extension with the provided event destination and
|
|
* also creates an extension association to an application.
|
|
*
|
|
* @param eventDestination The event that occurs during the extension
|
|
* @param options Options for the extension
|
|
*/
|
|
atDeploymentTick(eventDestination: IEventDestination, options?: ExtensionOptions): void;
|
|
/**
|
|
* Adds an extension association to the configuration profile.
|
|
*
|
|
* @param extension The extension to create an association for
|
|
*/
|
|
addExtension(extension: IExtension): void;
|
|
protected addExistingEnvironmentsToApplication(): void;
|
|
protected deployConfigToEnvironments(): void;
|
|
}
|
|
/**
|
|
* Options for HostedConfiguration
|
|
*/
|
|
export interface HostedConfigurationOptions extends ConfigurationOptions {
|
|
/**
|
|
* The content of the hosted configuration.
|
|
*/
|
|
readonly content: ConfigurationContent;
|
|
/**
|
|
* The latest version number of the hosted configuration.
|
|
*
|
|
* @default - None.
|
|
*/
|
|
readonly latestVersionNumber?: number;
|
|
/**
|
|
* The version label of the hosted configuration.
|
|
*
|
|
* @default - None.
|
|
*/
|
|
readonly versionLabel?: string;
|
|
}
|
|
/**
|
|
* Properties for HostedConfiguration
|
|
*/
|
|
export interface HostedConfigurationProps extends ConfigurationProps {
|
|
/**
|
|
* The content of the hosted configuration.
|
|
*/
|
|
readonly content: ConfigurationContent;
|
|
/**
|
|
* The latest version number of the hosted configuration.
|
|
*
|
|
* @default - None.
|
|
*/
|
|
readonly latestVersionNumber?: number;
|
|
/**
|
|
* The version label of the hosted configuration.
|
|
*
|
|
* @default - None.
|
|
*/
|
|
readonly versionLabel?: string;
|
|
/**
|
|
* The customer managed key to encrypt hosted configuration.
|
|
*
|
|
* @default None
|
|
*/
|
|
readonly kmsKey?: kms.IKeyRef;
|
|
}
|
|
/**
|
|
* A hosted configuration represents configuration stored in the AWS AppConfig hosted configuration store.
|
|
*/
|
|
export declare class HostedConfiguration extends ConfigurationBase {
|
|
/**
|
|
* The content of the hosted configuration.
|
|
*/
|
|
readonly content: string;
|
|
/**
|
|
* The configuration content type, specified as a standard MIME type.
|
|
* Supported examples include:
|
|
* - `text/plain`
|
|
* - `application/json`
|
|
* - `application/octet-stream`
|
|
* - `application/x-yaml`
|
|
*
|
|
* For an up-to-date list of valid MIME types, see:
|
|
* https://www.iana.org/assignments/media-types/media-types.xhtml
|
|
*/
|
|
readonly contentType?: string;
|
|
/**
|
|
* The latest version number of the hosted configuration.
|
|
*/
|
|
readonly latestVersionNumber?: number;
|
|
/**
|
|
* The version label of the hosted configuration.
|
|
*/
|
|
readonly versionLabel?: string;
|
|
/**
|
|
* The version number of the hosted configuration.
|
|
*/
|
|
readonly versionNumber?: string;
|
|
/**
|
|
* The Amazon Resource Name (ARN) of the hosted configuration version.
|
|
*/
|
|
readonly hostedConfigurationVersionArn: string;
|
|
/**
|
|
* The ID of the configuration profile.
|
|
*/
|
|
readonly configurationProfileId: string;
|
|
/**
|
|
* The Amazon Resource Name (ARN) of the configuration profile.
|
|
*/
|
|
readonly configurationProfileArn: string;
|
|
private readonly _cfnConfigurationProfile;
|
|
private readonly _cfnHostedConfigurationVersion;
|
|
constructor(scope: Construct, id: string, props: HostedConfigurationProps);
|
|
}
|
|
/**
|
|
* Options for SourcedConfiguration
|
|
*/
|
|
export interface SourcedConfigurationOptions extends ConfigurationOptions {
|
|
/**
|
|
* The location where the configuration is stored.
|
|
*/
|
|
readonly location: ConfigurationSource;
|
|
/**
|
|
* The version number of the sourced configuration to deploy. If this is not specified,
|
|
* then there will be no deployment.
|
|
*
|
|
* @default - None.
|
|
*/
|
|
readonly versionNumber?: string;
|
|
/**
|
|
* The IAM role to retrieve the configuration.
|
|
*
|
|
* @default - A role is generated.
|
|
*/
|
|
readonly retrievalRole?: iam.IRoleRef;
|
|
}
|
|
/**
|
|
* Properties for SourcedConfiguration.
|
|
*/
|
|
export interface SourcedConfigurationProps extends ConfigurationProps {
|
|
/**
|
|
* The location where the configuration is stored.
|
|
*/
|
|
readonly location: ConfigurationSource;
|
|
/**
|
|
* The version number of the sourced configuration to deploy. If this is not specified,
|
|
* then there will be no deployment.
|
|
*
|
|
* @default - None.
|
|
*/
|
|
readonly versionNumber?: string;
|
|
/**
|
|
* The IAM role to retrieve the configuration.
|
|
*
|
|
* @default - Auto generated if location type is not ConfigurationSourceType.CODE_PIPELINE otherwise no role specified.
|
|
*/
|
|
readonly retrievalRole?: iam.IRoleRef;
|
|
}
|
|
/**
|
|
* A sourced configuration represents configuration stored in an Amazon S3 bucket, AWS Secrets Manager secret, Systems Manager
|
|
* (SSM) Parameter Store parameter, SSM document, or AWS CodePipeline.
|
|
*/
|
|
export declare class SourcedConfiguration extends ConfigurationBase {
|
|
/**
|
|
* The location where the configuration is stored.
|
|
*/
|
|
readonly location: ConfigurationSource;
|
|
/**
|
|
* The version number of the configuration to deploy.
|
|
*/
|
|
readonly versionNumber?: string;
|
|
/**
|
|
* The key to decrypt the configuration if applicable. This key
|
|
* can be used when storing configuration in AWS Secrets Manager, Systems Manager Parameter Store,
|
|
* or Amazon S3.
|
|
*/
|
|
readonly sourceKey?: kms.IKey;
|
|
/**
|
|
* The ID of the configuration profile.
|
|
*/
|
|
readonly configurationProfileId: string;
|
|
/**
|
|
* The Amazon Resource Name (ARN) of the configuration profile.
|
|
*/
|
|
readonly configurationProfileArn: string;
|
|
private readonly locationUri;
|
|
private readonly _cfnConfigurationProfile;
|
|
private readonly _retrievalRole?;
|
|
constructor(scope: Construct, id: string, props: SourcedConfigurationProps);
|
|
/**
|
|
* The IAM role to retrieve the configuration.
|
|
*/
|
|
get retrievalRole(): iam.IRole | undefined;
|
|
private getRetrievalRole;
|
|
private getPolicyForRole;
|
|
}
|
|
/**
|
|
* The configuration type.
|
|
*/
|
|
export declare enum ConfigurationType {
|
|
/**
|
|
* Freeform configuration profile. Allows you to store your data in the AWS AppConfig
|
|
* hosted configuration store or another Systems Manager capability or AWS service that integrates
|
|
* with AWS AppConfig.
|
|
*
|
|
* @see https://docs.aws.amazon.com/appconfig/latest/userguide/appconfig-free-form-configurations-creating.html
|
|
*/
|
|
FREEFORM = "AWS.Freeform",
|
|
/**
|
|
* Feature flag configuration profile. This configuration stores its data
|
|
* in the AWS AppConfig hosted configuration store and the URI is simply hosted.
|
|
*/
|
|
FEATURE_FLAGS = "AWS.AppConfig.FeatureFlags"
|
|
}
|
|
/**
|
|
* The validator type.
|
|
*/
|
|
export declare enum ValidatorType {
|
|
/**
|
|
* JSON Scema validator.
|
|
*/
|
|
JSON_SCHEMA = "JSON_SCHEMA",
|
|
/**
|
|
* Validate using a Lambda function.
|
|
*/
|
|
LAMBDA = "LAMBDA"
|
|
}
|
|
/**
|
|
* The configuration source type.
|
|
*/
|
|
export declare enum ConfigurationSourceType {
|
|
S3 = "S3",
|
|
SECRETS_MANAGER = "SECRETS_MANAGER",
|
|
SSM_PARAMETER = "SSM_PARAMETER",
|
|
SSM_DOCUMENT = "SSM_DOCUMENT",
|
|
CODE_PIPELINE = "CODE_PIPELINE"
|
|
}
|
|
export interface IValidator {
|
|
/**
|
|
* The content of the validator.
|
|
*/
|
|
readonly content: string;
|
|
/**
|
|
* The type of validator.
|
|
*/
|
|
readonly type: ValidatorType;
|
|
}
|
|
/**
|
|
* Defines a JSON Schema validator.
|
|
*/
|
|
export declare abstract class JsonSchemaValidator implements IValidator {
|
|
/**
|
|
* Defines a JSON Schema validator from a file.
|
|
*
|
|
* @param inputPath The path to the file that defines the validator
|
|
*/
|
|
static fromFile(inputPath: string): JsonSchemaValidator;
|
|
/**
|
|
* Defines a JSON Schema validator from inline code.
|
|
*
|
|
* @param code The inline code that defines the validator
|
|
*/
|
|
static fromInline(code: string): JsonSchemaValidator;
|
|
abstract readonly content: string;
|
|
abstract readonly type: ValidatorType;
|
|
}
|
|
/**
|
|
* Defines an AWS Lambda validator.
|
|
*/
|
|
export declare abstract class LambdaValidator implements IValidator {
|
|
/**
|
|
* Defines an AWS Lambda validator from a Lambda function. This will call
|
|
* `addPermission` to your function to grant AWS AppConfig permissions.
|
|
*
|
|
* @param func The function that defines the validator
|
|
*/
|
|
static fromFunction(func: lambda.Function): LambdaValidator;
|
|
abstract readonly content: string;
|
|
abstract readonly type: ValidatorType;
|
|
}
|
|
/**
|
|
* Defines the hosted configuration content.
|
|
*/
|
|
export declare abstract class ConfigurationContent {
|
|
/**
|
|
* Defines the hosted configuration content from a file.
|
|
*
|
|
* @param inputPath The path to the file that defines configuration content
|
|
* @param contentType The configuration content type, specified as a standard MIME type.
|
|
* Supported examples include:
|
|
* - `text/plain`
|
|
* - `application/json`
|
|
* - `application/octet-stream`
|
|
* - `application/x-yaml`
|
|
*
|
|
* For an up-to-date list of valid MIME types, see:
|
|
* https://www.iana.org/assignments/media-types/media-types.xhtml
|
|
*/
|
|
static fromFile(inputPath: string, contentType?: string): ConfigurationContent;
|
|
/**
|
|
* Defines the hosted configuration content from inline code.
|
|
*
|
|
* @param content The inline code that defines the configuration content
|
|
* @param contentType The configuration content type, specified as a standard MIME type.
|
|
* Supported examples include:
|
|
* - `text/plain`
|
|
* - `application/json`
|
|
* - `application/octet-stream`
|
|
* - `application/x-yaml`
|
|
*
|
|
* For an up-to-date list of valid MIME types, see:
|
|
* https://www.iana.org/assignments/media-types/media-types.xhtml
|
|
*/
|
|
static fromInline(content: string, contentType?: string): ConfigurationContent;
|
|
/**
|
|
* Defines the hosted configuration content as JSON from inline code.
|
|
*
|
|
* @param content The inline code that defines the configuration content
|
|
* @param contentType The configuration content type, specified as a standard MIME type.
|
|
* Supported examples include:
|
|
* - `text/plain`
|
|
* - `application/json`
|
|
* - `application/octet-stream`
|
|
* - `application/x-yaml`
|
|
*
|
|
* For an up-to-date list of valid MIME types, see:
|
|
* https://www.iana.org/assignments/media-types/media-types.xhtml
|
|
*/
|
|
static fromInlineJson(content: string, contentType?: string): ConfigurationContent;
|
|
/**
|
|
* Defines the hosted configuration content as text from inline code.
|
|
*
|
|
* @param content The inline code that defines the configuration content
|
|
*/
|
|
static fromInlineText(content: string): ConfigurationContent;
|
|
/**
|
|
* Defines the hosted configuration content as YAML from inline code.
|
|
*
|
|
* @param content The inline code that defines the configuration content
|
|
*/
|
|
static fromInlineYaml(content: string): ConfigurationContent;
|
|
/**
|
|
* The configuration content.
|
|
*/
|
|
abstract readonly content: string;
|
|
/**
|
|
* The configuration content type, specified as a standard MIME type.
|
|
* Supported examples include:
|
|
* - `text/plain`
|
|
* - `application/json`
|
|
* - `application/octet-stream`
|
|
* - `application/x-yaml`
|
|
*
|
|
* For an up-to-date list of valid MIME types, see:
|
|
* https://www.iana.org/assignments/media-types/media-types.xhtml
|
|
*/
|
|
abstract readonly contentType: string;
|
|
}
|
|
/**
|
|
* Defines the integrated configuration sources.
|
|
*/
|
|
export declare abstract class ConfigurationSource {
|
|
/**
|
|
* Defines configuration content from an Amazon S3 bucket.
|
|
*
|
|
* @param bucket The S3 bucket where the configuration is stored
|
|
* @param objectKey The path to the configuration
|
|
* @param key The KMS Key that the bucket is encrypted with
|
|
*/
|
|
static fromBucket(bucket: s3.IBucket, objectKey: string, key?: kms.IKey): ConfigurationSource;
|
|
/**
|
|
* Defines configuration content from an AWS Secrets Manager secret.
|
|
*
|
|
* @param secret The secret where the configuration is stored
|
|
*/
|
|
static fromSecret(secret: sm.ISecret): ConfigurationSource;
|
|
/**
|
|
* Defines configuration content from a Systems Manager (SSM) Parameter Store parameter.
|
|
*
|
|
* @param parameter The parameter where the configuration is stored
|
|
* @param key The KMS Key that the secure string is encrypted with
|
|
*/
|
|
static fromParameter(parameter: ssm.IParameter, key?: kms.IKey): ConfigurationSource;
|
|
/**
|
|
* Defines configuration content from a Systems Manager (SSM) document.
|
|
*
|
|
* @param document The SSM document where the configuration is stored
|
|
*/
|
|
static fromCfnDocument(document: ssm.CfnDocument): ConfigurationSource;
|
|
/**
|
|
* Defines configuration content from AWS CodePipeline.
|
|
*
|
|
* @param pipeline The pipeline where the configuration is stored
|
|
*/
|
|
static fromPipeline(pipeline: cp.IPipelineRef): ConfigurationSource;
|
|
/**
|
|
* The URI of the configuration source.
|
|
*/
|
|
abstract readonly locationUri: string;
|
|
/**
|
|
* The type of the configuration source.
|
|
*/
|
|
abstract readonly type: ConfigurationSourceType;
|
|
/**
|
|
* The KMS Key that encrypts the configuration.
|
|
*/
|
|
abstract readonly key?: kms.IKey;
|
|
}
|
|
export {};
|