# AWS Amplify Construct Library
<!--BEGIN STABILITY BANNER-->---
![cfn-resources: Stable](https://img.shields.io/badge/cfn--resources-stable-success.svg?style=for-the-badge)
> All classes with the `Cfn` prefix in this module ([CFN Resources](https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_lib)) are always stable and safe to use.
![cdk-constructs: Experimental](https://img.shields.io/badge/cdk--constructs-experimental-important.svg?style=for-the-badge)
> The APIs of higher level constructs in this module are experimental and under active development.
> They are subject to non-backward compatible changes or removal in any future version. These are
> not subject to the [Semantic Versioning](https://semver.org/) model and breaking changes will be
> announced in the release notes. This means that while you may use them, you may need to update
> your source code when upgrading to a newer version of this package.
---
<!--END STABILITY BANNER-->
The AWS Amplify Console provides a Git-based workflow for deploying and hosting fullstack serverless web applications. A fullstack serverless app consists of a backend built with cloud resources such as GraphQL or REST APIs, file and data storage, and a frontend built with single page application frameworks such as React, Angular, Vue, or Gatsby.
## Setting up an app with branches, custom rules and a domain
To set up an Amplify Console app, define an `App`:
```python
import aws_cdk.aws_codebuild as codebuild
amplify_app = amplify.App(self, "MyApp",
source_code_provider=amplify.GitHubSourceCodeProvider(
owner="<user>",
repository="<repo>",
oauth_token=SecretValue.secrets_manager("my-github-token")
),
build_spec=codebuild.BuildSpec.from_object_to_yaml({
# Alternatively add a `amplify.yml` to the repo
"version": "1.0",
"frontend": {
"phases": {
"pre_build": {
"commands": ["yarn"
]
},
"build": {
"commands": ["yarn build"
]
}
},
"artifacts": {
"base_directory": "public",
"files": -"**/*"
}
}
})
)
```
To connect your `App` to GitLab, use the `GitLabSourceCodeProvider`:
```python
amplify_app = amplify.App(self, "MyApp",
source_code_provider=amplify.GitLabSourceCodeProvider(
owner="<user>",
repository="<repo>",
oauth_token=SecretValue.secrets_manager("my-gitlab-token")
)
)
```
To connect your `App` to CodeCommit, use the `CodeCommitSourceCodeProvider`:
```python
import aws_cdk.aws_codecommit as codecommit
repository = codecommit.Repository(self, "Repo",
repository_name="my-repo"
)
amplify_app = amplify.App(self, "App",
source_code_provider=amplify.CodeCommitSourceCodeProvider(repository=repository)
)
```
The IAM role associated with the `App` will automatically be granted the permission
to pull the CodeCommit repository.
Add branches:
```python
# amplify_app: amplify.App
master = amplify_app.add_branch("master") # `id` will be used as repo branch name
dev = amplify_app.add_branch("dev",
performance_mode=True
)
dev.add_environment("STAGE", "dev")
```
Auto build and pull request preview are enabled by default.
Add custom rules for redirection:
```python
# amplify_app: amplify.App
amplify_app.add_custom_rule({
"source": "/docs/specific-filename.html",
"target": "/documents/different-filename.html",
"status": amplify.RedirectStatus.TEMPORARY_REDIRECT
})
```
When working with a single page application (SPA), use the
`CustomRule.SINGLE_PAGE_APPLICATION_REDIRECT` to set up a 200
rewrite for all files to `index.html` except for the following
file extensions: css, gif, ico, jpg, js, png, txt, svg, woff,
ttf, map, json, webmanifest.
```python
# my_single_page_app: amplify.App
my_single_page_app.add_custom_rule(amplify.CustomRule.SINGLE_PAGE_APPLICATION_REDIRECT)
```
Add a domain and map sub domains to branches:
```python
# amplify_app: amplify.App
# master: amplify.Branch
# dev: amplify.Branch
domain = amplify_app.add_domain("example.com",
enable_auto_subdomain=True, # in case subdomains should be auto registered for branches
auto_subdomain_creation_patterns=["*", "pr*"]
)
domain.map_root(master) # map master branch to domain root
domain.map_sub_domain(master, "www")
domain.map_sub_domain(dev)
```
## Restricting access
Password protect the app with basic auth by specifying the `basicAuth` prop.
Use `BasicAuth.fromCredentials` when referencing an existing secret:
```python
amplify_app = amplify.App(self, "MyApp",
source_code_provider=amplify.GitHubSourceCodeProvider(
owner="<user>",
repository="<repo>",
oauth_token=SecretValue.secrets_manager("my-github-token")
),
basic_auth=amplify.BasicAuth.from_credentials("username", SecretValue.secrets_manager("my-github-token"))
)
```
Use `BasicAuth.fromGeneratedPassword` to generate a password in Secrets Manager:
```python
amplify_app = amplify.App(self, "MyApp",
source_code_provider=amplify.GitHubSourceCodeProvider(
owner="<user>",
repository="<repo>",
oauth_token=SecretValue.secrets_manager("my-github-token")
),
basic_auth=amplify.BasicAuth.from_generated_password("username")
)
```
Basic auth can be added to specific branches:
```python
# amplify_app: amplify.App
amplify_app.add_branch("feature/next",
basic_auth=amplify.BasicAuth.from_generated_password("username")
)
```
## Automatically creating and deleting branches
Use the `autoBranchCreation` and `autoBranchDeletion` props to control creation/deletion
of branches:
```python
amplify_app = amplify.App(self, "MyApp",
source_code_provider=amplify.GitHubSourceCodeProvider(
owner="<user>",
repository="<repo>",
oauth_token=SecretValue.secrets_manager("my-github-token")
),
auto_branch_creation=amplify.AutoBranchCreation( # Automatically connect branches that match a pattern set
patterns=["feature/*", "test/*"]),
auto_branch_deletion=True
)
```
## Adding custom response headers
Use the `customResponseHeaders` prop to configure custom response headers for an Amplify app:
```python
amplify_app = amplify.App(self, "App",
source_code_provider=amplify.GitHubSourceCodeProvider(
owner="<user>",
repository="<repo>",
oauth_token=SecretValue.secrets_manager("my-github-token")
),
custom_response_headers=[amplify.CustomResponseHeader(
pattern="*.json",
headers={
"custom-header-name-1": "custom-header-value-1",
"custom-header-name-2": "custom-header-value-2"
}
), amplify.CustomResponseHeader(
pattern="/path/*",
headers={
"custom-header-name-1": "custom-header-value-2"
}
)
]
)
```
## Deploying Assets
`sourceCodeProvider` is optional; when this is not specified the Amplify app can be deployed to using `.zip` packages. The `asset` property can be used to deploy S3 assets to Amplify as part of the CDK:
```python
import aws_cdk.aws_s3_assets as assets
# asset: assets.Asset
# amplify_app: amplify.App
branch = amplify_app.add_branch("dev", asset=asset)
```
Raw data
{
"_id": null,
"home_page": "https://github.com/aws/aws-cdk",
"name": "aws-cdk.aws-amplify",
"maintainer": "",
"docs_url": null,
"requires_python": "~=3.7",
"maintainer_email": "",
"keywords": "",
"author": "Amazon Web Services",
"author_email": "",
"download_url": "https://files.pythonhosted.org/packages/56/4a/713e93bf409ae1c97817fd9f4e39063de06aa96005adce73971181e54768/aws-cdk.aws-amplify-1.203.0.tar.gz",
"platform": null,
"description": "# AWS Amplify Construct Library\n\n<!--BEGIN STABILITY BANNER-->---\n\n\n![cfn-resources: Stable](https://img.shields.io/badge/cfn--resources-stable-success.svg?style=for-the-badge)\n\n> All classes with the `Cfn` prefix in this module ([CFN Resources](https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_lib)) are always stable and safe to use.\n\n![cdk-constructs: Experimental](https://img.shields.io/badge/cdk--constructs-experimental-important.svg?style=for-the-badge)\n\n> The APIs of higher level constructs in this module are experimental and under active development.\n> They are subject to non-backward compatible changes or removal in any future version. These are\n> not subject to the [Semantic Versioning](https://semver.org/) model and breaking changes will be\n> announced in the release notes. This means that while you may use them, you may need to update\n> your source code when upgrading to a newer version of this package.\n\n---\n<!--END STABILITY BANNER-->\n\nThe AWS Amplify Console provides a Git-based workflow for deploying and hosting fullstack serverless web applications. A fullstack serverless app consists of a backend built with cloud resources such as GraphQL or REST APIs, file and data storage, and a frontend built with single page application frameworks such as React, Angular, Vue, or Gatsby.\n\n## Setting up an app with branches, custom rules and a domain\n\nTo set up an Amplify Console app, define an `App`:\n\n```python\nimport aws_cdk.aws_codebuild as codebuild\n\n\namplify_app = amplify.App(self, \"MyApp\",\n source_code_provider=amplify.GitHubSourceCodeProvider(\n owner=\"<user>\",\n repository=\"<repo>\",\n oauth_token=SecretValue.secrets_manager(\"my-github-token\")\n ),\n build_spec=codebuild.BuildSpec.from_object_to_yaml({\n # Alternatively add a `amplify.yml` to the repo\n \"version\": \"1.0\",\n \"frontend\": {\n \"phases\": {\n \"pre_build\": {\n \"commands\": [\"yarn\"\n ]\n },\n \"build\": {\n \"commands\": [\"yarn build\"\n ]\n }\n },\n \"artifacts\": {\n \"base_directory\": \"public\",\n \"files\": -\"**/*\"\n }\n }\n })\n)\n```\n\nTo connect your `App` to GitLab, use the `GitLabSourceCodeProvider`:\n\n```python\namplify_app = amplify.App(self, \"MyApp\",\n source_code_provider=amplify.GitLabSourceCodeProvider(\n owner=\"<user>\",\n repository=\"<repo>\",\n oauth_token=SecretValue.secrets_manager(\"my-gitlab-token\")\n )\n)\n```\n\nTo connect your `App` to CodeCommit, use the `CodeCommitSourceCodeProvider`:\n\n```python\nimport aws_cdk.aws_codecommit as codecommit\n\n\nrepository = codecommit.Repository(self, \"Repo\",\n repository_name=\"my-repo\"\n)\n\namplify_app = amplify.App(self, \"App\",\n source_code_provider=amplify.CodeCommitSourceCodeProvider(repository=repository)\n)\n```\n\nThe IAM role associated with the `App` will automatically be granted the permission\nto pull the CodeCommit repository.\n\nAdd branches:\n\n```python\n# amplify_app: amplify.App\n\n\nmaster = amplify_app.add_branch(\"master\") # `id` will be used as repo branch name\ndev = amplify_app.add_branch(\"dev\",\n performance_mode=True\n)\ndev.add_environment(\"STAGE\", \"dev\")\n```\n\nAuto build and pull request preview are enabled by default.\n\nAdd custom rules for redirection:\n\n```python\n# amplify_app: amplify.App\n\namplify_app.add_custom_rule({\n \"source\": \"/docs/specific-filename.html\",\n \"target\": \"/documents/different-filename.html\",\n \"status\": amplify.RedirectStatus.TEMPORARY_REDIRECT\n})\n```\n\nWhen working with a single page application (SPA), use the\n`CustomRule.SINGLE_PAGE_APPLICATION_REDIRECT` to set up a 200\nrewrite for all files to `index.html` except for the following\nfile extensions: css, gif, ico, jpg, js, png, txt, svg, woff,\nttf, map, json, webmanifest.\n\n```python\n# my_single_page_app: amplify.App\n\n\nmy_single_page_app.add_custom_rule(amplify.CustomRule.SINGLE_PAGE_APPLICATION_REDIRECT)\n```\n\nAdd a domain and map sub domains to branches:\n\n```python\n# amplify_app: amplify.App\n# master: amplify.Branch\n# dev: amplify.Branch\n\n\ndomain = amplify_app.add_domain(\"example.com\",\n enable_auto_subdomain=True, # in case subdomains should be auto registered for branches\n auto_subdomain_creation_patterns=[\"*\", \"pr*\"]\n)\ndomain.map_root(master) # map master branch to domain root\ndomain.map_sub_domain(master, \"www\")\ndomain.map_sub_domain(dev)\n```\n\n## Restricting access\n\nPassword protect the app with basic auth by specifying the `basicAuth` prop.\n\nUse `BasicAuth.fromCredentials` when referencing an existing secret:\n\n```python\namplify_app = amplify.App(self, \"MyApp\",\n source_code_provider=amplify.GitHubSourceCodeProvider(\n owner=\"<user>\",\n repository=\"<repo>\",\n oauth_token=SecretValue.secrets_manager(\"my-github-token\")\n ),\n basic_auth=amplify.BasicAuth.from_credentials(\"username\", SecretValue.secrets_manager(\"my-github-token\"))\n)\n```\n\nUse `BasicAuth.fromGeneratedPassword` to generate a password in Secrets Manager:\n\n```python\namplify_app = amplify.App(self, \"MyApp\",\n source_code_provider=amplify.GitHubSourceCodeProvider(\n owner=\"<user>\",\n repository=\"<repo>\",\n oauth_token=SecretValue.secrets_manager(\"my-github-token\")\n ),\n basic_auth=amplify.BasicAuth.from_generated_password(\"username\")\n)\n```\n\nBasic auth can be added to specific branches:\n\n```python\n# amplify_app: amplify.App\n\namplify_app.add_branch(\"feature/next\",\n basic_auth=amplify.BasicAuth.from_generated_password(\"username\")\n)\n```\n\n## Automatically creating and deleting branches\n\nUse the `autoBranchCreation` and `autoBranchDeletion` props to control creation/deletion\nof branches:\n\n```python\namplify_app = amplify.App(self, \"MyApp\",\n source_code_provider=amplify.GitHubSourceCodeProvider(\n owner=\"<user>\",\n repository=\"<repo>\",\n oauth_token=SecretValue.secrets_manager(\"my-github-token\")\n ),\n auto_branch_creation=amplify.AutoBranchCreation( # Automatically connect branches that match a pattern set\n patterns=[\"feature/*\", \"test/*\"]),\n auto_branch_deletion=True\n)\n```\n\n## Adding custom response headers\n\nUse the `customResponseHeaders` prop to configure custom response headers for an Amplify app:\n\n```python\namplify_app = amplify.App(self, \"App\",\n source_code_provider=amplify.GitHubSourceCodeProvider(\n owner=\"<user>\",\n repository=\"<repo>\",\n oauth_token=SecretValue.secrets_manager(\"my-github-token\")\n ),\n custom_response_headers=[amplify.CustomResponseHeader(\n pattern=\"*.json\",\n headers={\n \"custom-header-name-1\": \"custom-header-value-1\",\n \"custom-header-name-2\": \"custom-header-value-2\"\n }\n ), amplify.CustomResponseHeader(\n pattern=\"/path/*\",\n headers={\n \"custom-header-name-1\": \"custom-header-value-2\"\n }\n )\n ]\n)\n```\n\n## Deploying Assets\n\n`sourceCodeProvider` is optional; when this is not specified the Amplify app can be deployed to using `.zip` packages. The `asset` property can be used to deploy S3 assets to Amplify as part of the CDK:\n\n```python\nimport aws_cdk.aws_s3_assets as assets\n\n# asset: assets.Asset\n# amplify_app: amplify.App\n\nbranch = amplify_app.add_branch(\"dev\", asset=asset)\n```\n\n\n",
"bugtrack_url": null,
"license": "Apache-2.0",
"summary": "The CDK Construct Library for AWS::Amplify",
"version": "1.203.0",
"project_urls": {
"Homepage": "https://github.com/aws/aws-cdk",
"Source": "https://github.com/aws/aws-cdk.git"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "f0896af4b6a5877d31d36e740e328aa84516f8f97384a2b3bf5233baa5ac8cb2",
"md5": "53a71b4f543fbb1d30a837844b6e5b4b",
"sha256": "db46d7778b6d8e0eddf1e7870cd2dbe569b554e208af424e76d7e9fe0918facf"
},
"downloads": -1,
"filename": "aws_cdk.aws_amplify-1.203.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "53a71b4f543fbb1d30a837844b6e5b4b",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "~=3.7",
"size": 177578,
"upload_time": "2023-05-31T22:52:22",
"upload_time_iso_8601": "2023-05-31T22:52:22.530303Z",
"url": "https://files.pythonhosted.org/packages/f0/89/6af4b6a5877d31d36e740e328aa84516f8f97384a2b3bf5233baa5ac8cb2/aws_cdk.aws_amplify-1.203.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "564a713e93bf409ae1c97817fd9f4e39063de06aa96005adce73971181e54768",
"md5": "f5b323bd7183cd37eeecc8d4ce7f2ff7",
"sha256": "d57b59cd29bcbcd7d82e517176480b99831fd054a1855b37174cef5fa0a0e4ea"
},
"downloads": -1,
"filename": "aws-cdk.aws-amplify-1.203.0.tar.gz",
"has_sig": false,
"md5_digest": "f5b323bd7183cd37eeecc8d4ce7f2ff7",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "~=3.7",
"size": 178608,
"upload_time": "2023-05-31T23:00:24",
"upload_time_iso_8601": "2023-05-31T23:00:24.368333Z",
"url": "https://files.pythonhosted.org/packages/56/4a/713e93bf409ae1c97817fd9f4e39063de06aa96005adce73971181e54768/aws-cdk.aws-amplify-1.203.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-05-31 23:00:24",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "aws",
"github_project": "aws-cdk",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "aws-cdk.aws-amplify"
}