UNPKG

@aws-cdk/aws-amplify-alpha

Version:

The CDK Construct Library for AWS::Amplify

451 lines (450 loc) 13.3 kB
import * as codebuild from 'aws-cdk-lib/aws-codebuild'; import * as iam from 'aws-cdk-lib/aws-iam'; import { IResource, Resource, SecretValue } from 'aws-cdk-lib/core'; import { Construct } from 'constructs'; import { BasicAuth } from './basic-auth'; import { Branch, BranchOptions } from './branch'; import { Domain, DomainOptions } from './domain'; /** * An Amplify Console application */ export interface IApp extends IResource { /** * The application id * * @attribute */ readonly appId: string; } /** * Configuration for the source code provider */ export interface SourceCodeProviderConfig { /** * The repository for the application. Must use the `HTTPS` protocol. * * For example, `https://github.com/aws/aws-cdk`. */ readonly repository: string; /** * OAuth token for 3rd party source control system for an Amplify App, used * to create webhook and read-only deploy key. OAuth token is not stored. * * Either `accessToken` or `oauthToken` must be specified if `repository` * is specified. * * @default - do not use a token */ readonly oauthToken?: SecretValue; /** * Personal Access token for 3rd party source control system for an Amplify * App, used to create webhook and read-only deploy key. Token is not stored. * * Either `accessToken` or `oauthToken` must be specified if `repository` * is sepcified. * * @default - do not use a token */ readonly accessToken?: SecretValue; } /** * A source code provider */ export interface ISourceCodeProvider { /** * Binds the source code provider to an app * * @param app The app [disable-awslint:ref-via-interface] */ bind(app: App): SourceCodeProviderConfig; } /** * Properties for an App */ export interface AppProps { /** * The name for the application * * @default - a CDK generated name */ readonly appName?: string; /** * The source code provider for this application * * @default - not connected to a source code provider */ readonly sourceCodeProvider?: ISourceCodeProvider; /** * The auto branch creation configuration. Use this to automatically create * branches that match a certain pattern. * * @default - no auto branch creation */ readonly autoBranchCreation?: AutoBranchCreation; /** * Automatically disconnect a branch in the Amplify Console when you delete a * branch from your Git repository. * * @default false */ readonly autoBranchDeletion?: boolean; /** * The Basic Auth configuration. Use this to set password protection at an * app level to all your branches. * * @default - no password protection */ readonly basicAuth?: BasicAuth; /** * BuildSpec for the application. Alternatively, add a `amplify.yml` * file to the repository. * * @see https://docs.aws.amazon.com/amplify/latest/userguide/build-settings.html * * @default - no build spec */ readonly buildSpec?: codebuild.BuildSpec; /** * The custom HTTP response headers for an Amplify app. * * @see https://docs.aws.amazon.com/amplify/latest/userguide/custom-headers.html * * @default - no custom response headers */ readonly customResponseHeaders?: CustomResponseHeader[]; /** * Custom rewrite/redirect rules for the application * * @default - no custom rewrite/redirect rules */ readonly customRules?: CustomRule[]; /** * A description for the application * * @default - no description */ readonly description?: string; /** * Environment variables for the application. * * All environment variables that you add are encrypted to prevent rogue * access so you can use them to store secret information. * * @default - no environment variables */ readonly environmentVariables?: { [name: string]: string; }; /** * The IAM service role to associate with the application. The App * implements IGrantable. * * @default - a new role is created */ readonly role?: iam.IRole; /** * Indicates the hosting platform to use. Set to WEB for static site * generated (SSG) apps (i.e. a Create React App or Gatsby) and WEB_COMPUTE * for server side rendered (SSR) apps (i.e. NextJS). * * @default Platform.WEB */ readonly platform?: Platform; /** * The type of cache configuration to use for an Amplify app. * * @default CacheConfigType.AMPLIFY_MANAGED */ readonly cacheConfigType?: CacheConfigType; /** * The IAM role for an SSR app. * The Compute role allows the Amplify Hosting compute service to securely access specific AWS resources based on the role's permissions. * * @default undefined - a new role is created when `platform` is `Platform.WEB_COMPUTE` or `Platform.WEB_DYNAMIC`, otherwise no compute role */ readonly computeRole?: iam.IRole; } /** * An Amplify Console application */ export declare class App extends Resource implements IApp, iam.IGrantable { /** Uniquely identifies this class. */ static readonly PROPERTY_INJECTION_ID: string; /** * Import an existing application */ static fromAppId(scope: Construct, id: string, appId: string): IApp; readonly appId: string; /** * The name of the application * * @attribute */ readonly appName: string; /** * The ARN of the application * * @attribute */ readonly arn: string; /** * The default domain of the application * * @attribute */ readonly defaultDomain: string; /** * The principal to grant permissions to */ readonly grantPrincipal: iam.IPrincipal; /** * The IAM role for an SSR app. */ readonly computeRole?: iam.IRole; /** * The platform of the app */ readonly platform?: Platform; private readonly customRules; private readonly environmentVariables; private readonly autoBranchEnvironmentVariables; constructor(scope: Construct, id: string, props: AppProps); /** * Adds a custom rewrite/redirect rule to this application */ addCustomRule(rule: CustomRule): this; /** * Adds an environment variable to this application. * * All environment variables that you add are encrypted to prevent rogue * access so you can use them to store secret information. */ addEnvironment(name: string, value: string): this; /** * Adds an environment variable to the auto created branch. * * All environment variables that you add are encrypted to prevent rogue * access so you can use them to store secret information. */ addAutoBranchEnvironment(name: string, value: string): this; /** * Adds a branch to this application */ addBranch(id: string, options?: BranchOptions): Branch; /** * Adds a domain to this application */ addDomain(id: string, options?: DomainOptions): Domain; } /** * Auto branch creation configuration */ export interface AutoBranchCreation { /** * Automated branch creation glob patterns * * @default - all repository branches */ readonly patterns?: string[]; /** * The Basic Auth configuration. Use this to set password protection for * the auto created branch. * * @default - no password protection */ readonly basicAuth?: BasicAuth; /** * Build spec for the auto created branch. * * @default - application build spec */ readonly buildSpec?: codebuild.BuildSpec; /** * Whether to enable auto building for the auto created branch * * @default true */ readonly autoBuild?: boolean; /** * Whether to enable pull request preview for the auto created branch. * * @default true */ readonly pullRequestPreview?: boolean; /** * Environment variables for the auto created branch. * * All environment variables that you add are encrypted to prevent rogue * access so you can use them to store secret information. * * @default - application environment variables */ readonly environmentVariables?: { [name: string]: string; }; /** * The dedicated backend environment for the pull request previews of * the auto created branch. * * @default - automatically provision a temporary backend */ readonly pullRequestEnvironmentName?: string; /** * Stage for the auto created branch * * @default - no stage */ readonly stage?: string; } /** * The status code for a URL rewrite or redirect rule. */ export declare enum RedirectStatus { /** * Rewrite (200) */ REWRITE = "200", /** * Permanent redirect (301) */ PERMANENT_REDIRECT = "301", /** * Temporary redirect (302) */ TEMPORARY_REDIRECT = "302", /** * Not found (404) */ NOT_FOUND = "404", /** * Not found rewrite (404) */ NOT_FOUND_REWRITE = "404-200" } /** * Options for a custom rewrite/redirect rule for an Amplify App. */ export interface CustomRuleOptions { /** * The source pattern for a URL rewrite or redirect rule. * * @see https://docs.aws.amazon.com/amplify/latest/userguide/redirects.html */ readonly source: string; /** * The target pattern for a URL rewrite or redirect rule. * * @see https://docs.aws.amazon.com/amplify/latest/userguide/redirects.html */ readonly target: string; /** * The status code for a URL rewrite or redirect rule. * * @see https://docs.aws.amazon.com/amplify/latest/userguide/redirects.html * * @default PERMANENT_REDIRECT */ readonly status?: RedirectStatus; /** * The condition for a URL rewrite or redirect rule, e.g. country code. * * @see https://docs.aws.amazon.com/amplify/latest/userguide/redirects.html * * @default - no condition */ readonly condition?: string; } /** * Custom rewrite/redirect rule for an Amplify App. * * @see https://docs.aws.amazon.com/amplify/latest/userguide/redirects.html */ export declare class CustomRule { /** * Sets up a 200 rewrite for all paths to `index.html` except for path * containing a file extension. */ static readonly SINGLE_PAGE_APPLICATION_REDIRECT: CustomRule; /** * The source pattern for a URL rewrite or redirect rule. * * @see https://docs.aws.amazon.com/amplify/latest/userguide/redirects.html */ readonly source: string; /** * The target pattern for a URL rewrite or redirect rule. * * @see https://docs.aws.amazon.com/amplify/latest/userguide/redirects.html */ readonly target: string; /** * The status code for a URL rewrite or redirect rule. * * @see https://docs.aws.amazon.com/amplify/latest/userguide/redirects.html * * @default PERMANENT_REDIRECT */ readonly status?: RedirectStatus; /** * The condition for a URL rewrite or redirect rule, e.g. country code. * * @see https://docs.aws.amazon.com/amplify/latest/userguide/redirects.html * * @default - no condition */ readonly condition?: string; constructor(options: CustomRuleOptions); } /** * Custom response header of an Amplify App. */ export interface CustomResponseHeader { /** * If the app uses a monorepo structure, the appRoot from the build spec to apply the custom headers to. * @default - The appRoot is omitted in the custom headers output. */ readonly appRoot?: string; /** * These custom headers will be applied to all URL file paths that match this pattern. */ readonly pattern: string; /** * The map of custom headers to be applied. */ readonly headers: { [key: string]: string; }; } /** * Available hosting platforms to use on the App. */ export declare enum Platform { /** * WEB - Used to indicate that the app is hosted using only static assets. */ WEB = "WEB", /** * WEB_COMPUTE - Used to indicate the app is hosted using a combination of * server side rendered and static assets. */ WEB_COMPUTE = "WEB_COMPUTE", /** * WEB_DYNAMIC - Used to indicate the app is hosted using a fully dynamic architecture, where requests are processed at runtime by backend compute services. */ WEB_DYNAMIC = "WEB_DYNAMIC" } /** * The type of cache configuration to use for an Amplify app. */ export declare enum CacheConfigType { /** * AMPLIFY_MANAGED - Automatically applies an optimized cache configuration * for your app based on its platform, routing rules, and rewrite rules. */ AMPLIFY_MANAGED = "AMPLIFY_MANAGED", /** * AMPLIFY_MANAGED_NO_COOKIES - The same as AMPLIFY_MANAGED, * except that it excludes all cookies from the cache key. */ AMPLIFY_MANAGED_NO_COOKIES = "AMPLIFY_MANAGED_NO_COOKIES" }