# Amplify

## Icon

![Amplify Icon](https://icon.icepanel.io/AWS/svg/Front-End-Web-Mobile/Amplify.svg)

## About

* A service that provides a set of tools to make web/mobile applications.
* It is like `elastic bean stalk` of mobile and web applications.
* A typical application needs features such as data storage, authentication etc.
* AWS amplify becomes a one stop shop for all this with front-end libraries support for `React`, `Vue`, `iOS`, `Android` etc.
* All this can be done using Amplify components `Amplify CLI` or `Amplify Studio`.
* It incorporates AWS best practices for reliability, security, scalability.
* There are made of different components listed as follows.

### Amplify studio

* Visually build a full stack app both front-end and back end

### Amplify CLI

* Configure an Amplify backend with a guided CLI workflow.
* `amplify init` command initalizes the basic skeleton.
* Through commands you can add new features like `Authentication` i.e., through `amplify add auth`
* When auth is added by above command, authentication is implemented using `Amazon Cognito`.
  * Features like User registration, Account Recovery and other operation comes out of the box.
  * It supports MFA, Social Sign-in etc.
  * Pre build UI components are also available.

### Amplify Libraries

* Connect your App to AWS services like Cognito, S3 and more.

### Amplify hosting

* Host secure, reliable, fast web apps or websites via the AWS content delivery network.
* Provides the following,
  * CI/CD pipeline.
  * Pull request Previews
  * Custom Domains
  * Monitoring
  * Redirects and Custom headers
  * Password protection

## Important features

### `Authentication`

* It leverages `Amazon Cognito`.
* User registration, authentication, account recovery & other operations.
* Support MFA, Social Sign-In etc.
* Prebuilt UI components.
* Fine-grained authorization.

### `Datastore`

* Leverages Amazon AppSync and Amazon DynamoDB.
* Provides option to work with local data and automatic synchronization to the cloud without complex code.
* Powered by `GraphQL`.
* Offline and real-time capabilities.
* Visually model data with `Amplify Studio`.

### Testing

#### Unit Test

* Allows to run test in build phase of application.

#### E2E Test

* Can run tests in test phase of Amplify, before deploying.
* This allows to do regression before pushing code to production.
* Use the test step in `amplify.yml` file to run any test commands at build time.
* Its integrated with Cypress testing framework for E2E test.
  * This provides UI report for your tests

## References

* Choose your favorite UI framework and [get started](https://docs.amplify.aws/).
