AWS AppSync

Learn via video courses

Overview

We can create apps more quickly and more efficiently, thanks to AWS AppSync, a fully managed GraphQL API service. Real-time data synchronization, offline programming, and serverless architecture are all aspects of AppSync. Several characteristics and advantages might be used. Let's first gain a basic understanding of the concepts discussed in this post before learning more about AWS AppSync.

What is AWS AppSync?

AWS AppSync is a serverless GraphQL service that provides a robust, scalable GraphQL interface for application developers to combine data from multiple sources. It improves application performance and enables us to build applications faster.

GraphQL speeds up app performance by making it easier to retrieve data. You may access, alter, and mix data from numerous data sources in a single network request, and you can query only the data you need for your application.

GraphQL enables faster development because back-end developers can provide simplified data access through a unified API. As a result, front-end developers always have access to the data they need to add application features quickly.

With AWS AppSync, your applications scale automatically with built-in security, caching, and fine-grained access control with no servers to manage. Your costs are lower, and you can focus on your code, not infrastructure.

GraphQL Overview

The development of GraphQL, a query language, and a server-side runtime for your API, made it possible for applications to retrieve data from servers. The most recent method for client-server communication, called GraphQL, aims to make it easier for programmers to create online apps.

A language for data queries is GraphQL. You cannot query a specific type of data storage with GraphQL, in contrast to the majority of query languages (such as SQL) (such as a MySQL database). Instead, you query data from several sources using GraphQL. GraphQL is supported by your existing code and data instead of being dependent on any one database or storage engine.

For each GraphQL action, the client defines how to format the data when the server provides it. This approach is declarative and self-documenting. The client can inquire solely for the information it needs and in the format, it requires, thanks to this.

GraphQL has three major operations :

  1. Query :
    fetch/GET data, read-only. Used for getting data from the API.
  2. Mutation :
    write, followed by a fetch. Used for changing data via the API.
  3. Subscription :
    long-lived connection for receiving data from the API.

GraphQL Working :

Design your GraphQL Schema :
GraphQL exposes these top-level operations via a schema comprising two types, root types (query, mutation, or subscription) or user-defined types. Application developers will design a schema to define the capabilities of their GraphQL API, which a client application will communicate with.

Connect your resolvers to data sources :
After a schema is designed and defined, the fields on the types (root or user-defined type) must return some data. This is done with the help of a GraphQL resolver. A Resolver function is a function that either calls out to a data source or invokes a trigger to return some value. Resolvers can have many data sources, such as NoSQL databases, relational databases, or search engines. You can aggregate data from multiple data sources and return identical types, mixing and matching to meet your needs.

Write your query and ask for what you want:
After a schema is connected to a resolver function, a client application can issue a GraphQL query, mutation, or subscription.

Concepts of AppSync

Data Source

It is a storage system or a trigger that can be accessed or triggered to perform the GraphQL queries. An IAM role with appropriate policies and permissions is required to access or start the data source. The client application state is managed by the system or trigger defined in a data source.

Examples of data sources are NoSQL databases (DynamoDB), relational databases(Amazon Aurora), AWS Lambda functions, and HTTP APIs.

GraphQL Proxy

The GraphQL Proxy is a component that manages the GraphQL engine, which processes queries and resolves them into logical actions or triggers. Your data sources are batch loaded by the data resolution process, which is known as the Data Loader. The tactics for conflict identification and resolution are also managed by this component.

Operation

GraphQL operations are supported by three in AWS AppSync. The first is a query (read-only fetch), the second is a mutation (write followed by a fetch), and the third is a subscription (long-lived requests that receive data in response to events).

Resolver

Resolvers in AppSync translate GraphQL requests and fetches information from your AWS resources. It is a function that calls the data source or invokes a trigger to return some value. It is a logical function that converts the data types specified in GraphQL Schema to the already defined/underlying storage system protocol. This function runs and executes only if the user is authorized to invoke it. Resolvers contain transformation and execution logic along with the mapping templates.

Unit Resolver

The default resolver type is a unit resolver. A GraphQL query can be executed against a single data source using a Unit resolver.

Pipeline Resolver

  • A Pipeline resolver is used to invoke a series of Function objects serially. A pipeline resolver is comprised of a series of functions. Each function is executed in sequential order.
  • A pipeline resolver may be used to execute a GraphQL query across many data sources. Developers may now combine operations (referred to as Functions) and carry them out sequentially thanks to pipeline resolvers.

Function

A function illustrates a single operation that can be used across pipeline resolvers. Functions comprise repetitive and redundant logic and can be reused again with GraphQL Proxy. Functions are included with request-response mapping templates, a data source name, and a version.

Action

  • The AWS AppSync specification only specifies one operation. A mutation led to this action, which is a notice to associated subscribers. Following a GraphQL subscription, clients become subscribers through a handshake procedure.
  • With managed GraphQL subscriptions, AWS AppSync can push data updates over WebSockets to millions of clients, making AppSync ideal for real-time data use cases.

Identity

Information about the caller is contained in the identification. There should be a set of credentials that must be passed along for authorization whenever a request is made to the GraphQL proxy. Identity is nothing more than a representation of the user or caller who has used this set of credentials.

AWS AppSync Client

AppSync Client is where the GraphQL operations are defined. AppSync Client performs the authorization of requests before they are sent to the GraphQL proxy. This client automatically signs the requests.

AWS AppSync Features

Unified Data Access

  • GraphQL APIs :
    The GraphQL APIs in AWS AppSync makes it easier and more convenient to access and query the data from the data sources. The performance of the program is enhanced by this feature. A GraphQL schema, which comprises fields defined to return the data, defines each GraphQL API. To retrieve the data requested in the client application via a GraphQL query, mutation, or subscription, this schema is linked to the GraphQL resolver. Here, the user may define the schema for how the data should be organized and delivered. You can only obtain the relevant and required data from the data sources thanks to this structure.

  • Caching data :
    With this caching feature, you can cache the frequently used data to improve the client app performance. The data will be retrieved at faster speeds and low latency as it will be stored in high-speed memory caches. Caching avoids re-fetching the resources from the data sources each time they are requested or queried. This will reduce the amount of time taken to fetch the required data, which in turn improves the performance. AWS AppSync also enables you to customize the cache data fields to selectively obtain the data in a few seconds, which helps in more excellent and optimal performance.

  • Offline data synchronization and Offline access :
    Offline data synchronization is the feature of AWS AppSync, allowing users to interact and update the data, even when the device is offline. AWS AppSync uses Amplify DataStore to ease the process of building apps that need offline support and low-latency scenarios. The Amplify DataStore is an on-device datastore that helps synchronize data between the devices and the client apps. AppSync allows the data to be accessed and altered when the mobile device is in an offline state.

Real-Time Data

  • Real-time data access :
    AWS AppSync enables developers to manage and synchronize app data in real-time across devices and also delivers quick updates across clients and devices. Using GraphQL subscriptions, you can specify data that should be accessible and updated in real-time.

  • Subscription filters :
    Subscription filters enable real-time complex data filtering. They can be defined in the GraphQL Schema. Here you can specify the required filters for your data using filter expressions and create real-time scenarios.

  • AppSync Pub/Sub APIs :
    AWS AppSync Pub/Sub APIs is easy to create real-time scenarios by automatically publishing data updates to subscribed API consumers. This Publisher-Subscriber model is a better option for creating APIs if you are unaware of GraphQL. Without complication, you can make this API using the AWS AppSyncs PubSub API wizard.

Configuration and Settings

  • Security :
    AWS AppSync provides multiple ways to authenticate users to GraphQL APIs. The standard authentication methods include Amazon Cognito user pools, API tokens, AWS IAM, and OpenID Connect.
  • Configure Custom domain names :
    Custom Domain Name feature lets users/consumers use their domain names with their AppSync APIs to access GraphQL and real-time endpoints.
  • Monitoring, Logging, and Tracing :
    You can monitor your AppSync GraphQL APIs using CloudWatch logs, tracing can be performed using AWS X-Ray, and logging AppSync API calls can be done using CloudTrail.

How Does AppSync Work?

AppSync involves developing APIs by giving us the leverage of creating flexible, extensible, real-time, and secure APIs.

how-appsync-works

AppSync stays in the middle of Client Apps and the AWS services, which are the back-end services. All back-end AWS services are connected to client apps via App Sync.

AWS AppSync acts as a "Facilitator" because it is the glued connector between the client applications and AWS services that can be used in our applications through the app sync.

To the left, we have all kinds of client applications. We could have Enterprise, Web, Mobile, Real-time dashboards, IoT Devices, etc. In the middle is the AppSync Facilitator, which allows connections between client applications on the left and the services on the right. The Services to the right will act as data sources. They can include NoSQL databases (DynamoDB), relational databases(Amazon Aurora), Amazon Elasticsearch Service, AWS Lambda functions, HTTP APIs, and many other things.

So AppSync securely accesses and combines the data from data sources. When we put data into the databases/sources, there needs to be some structure. Hence we use GraphQL Schemas to lay out the format of the data that we are trying to create, and within that, we have resolvers that resolve the data types that we are making in our schema to the classes that we have put and received in our data source.

AWS AppSync is important for developers who want to create extensible, secure, real-time applications.

Benefits of Using AppSync

  • time effective :
    You may save a lot of time when developing a new GraphQL API by skipping the construction of your GraphQL resolvers and data-source connections with AppSync. Additionally, AppSync will manage most of the back-end work, saving you the majority of your time. Without having to worry about the intricate architecture of your website or app, you can easily concentrate on it.

  • Fast-Setup :
    Using AWS AppSync is very easy and fast. You can quickly build API with the go. You can go through the dashboard, navigate and start creating all APIs from the AWS Management Console. To design APIs and their connections, you can also use the AppSync CLI using Amplify and the command line interface on our local machine.

  • Scalable :
    AppSync will adjust its scaling based on user and traffic volume. Whether it is a small-scale application or a huge e-commerce website makes no difference. AppSync will effectively complete the task.

  • Unified Secure Access :
    AWS offers dependable and effective secure data sources. AWS Lambda functions, NoSQL databases, relational databases, HTTP APIs, and other APIs are just a few examples of the various sorts of data sources you may use. Because AWS handles everything, you don't need to develop a security mechanism before starting the application. In addition, AppSync gives you the option to specify your data's security system utilizing various concurrent authentication techniques.

  • Real-time applications :
    AWS AppSync allows real-time GraphQL subscriptions, a great way to build applications. Using these consistently presents the most up-to-date state of the data. Millions of devices can take these subscriptions, and any change is reflected across all the clients in real time.

  • Offline Access :
    Offline access is a benefit of AWS AppSync. For all requests and queries to be processed even when the device is not connected to the Internet, it syncs the application data to the devices. Amazon AppSync automatically syncs just the updates that took place while an offline device was disconnected, not the whole data set when the device is reconnected.

Drawbacks to Using AppSync

With the benefits of AWS AppSync, come to a few drawbacks, and you should consider the following carefully before using AppSync.

Learning :
This can be perceived in both ways as it can also serve as a boon for someone. To use AppSync and most of its functionality, we need to use Amplify Framework, a specialized GraphQL tool. Using this will bring the maximum benefit of using AWS AppSync. This might be a long process considering that learning Amplify Framework comes on the list, but if you are aware of this service, you are good to go!‍

Data Sources outside AWS are not supported :
Relational databases (Amazon Aurora Serverless), AWS Lambda, Amazon DynamoDB, Amazon OpenSearch Service, and HTTP endpoints are all supported as data sources by AWS AppSync. Even so, you might need to invest more effort in developing a data connection layer in your AWS Lambda functions if you're utilizing a data source that AppSync doesn't support by default to access your data stores in AppSync.

Vendor lock-in with AWS AppSync :
When switching vendors is too expensive, a scenario known as vendor lock-in occurs, and the consumer is virtually forced to stick with the original provider. You must devote a lot of work to developing a suitable service that you control if you want to switch away from AppSync.

Less Control and Transparency :
As AppSync is a fully managed service, debugging your code can cause trouble. Also, there is less transparency as you don't get access to performance settings for your GraphQL API layer. This might be an issue if your API Layer is your company's frontline interface for your customers, and you will not have control over the performance.

AWS AppSync Pricing

The AWS AppSync free tier includes 250,000 GraphQL queries or data modifications, 250,000 real-time updates, and 600,000 connection minutes during the first 12 months after your AWS account is created. Note that API caching in AWS AppSync is not eligible for the AWS Free Tier.

Beyond the free tier, there are no minimum prices or requirements for service consumption, you just pay for what you use. For query and data modification activities, caching, and real-time changes on your data, you are charged individually. The costs are as follows :

aws-appsync-pricing

For Caching, you can optionally provide a dedicated cache for your AWS AppSync GraphQL APIs. After you select the instance type, you will be charged the following hourly rates without any long-term commitments.

For more information related to pricing, refer to AWS AppSync Pricing

Conclusion

  • AWS AppSync is a fully managed serverless solution that simplifies building modern web and mobile applications.
  • It provides a GraphQL interface for the developers to combine data from multiple sources, including Amazon DynamoDB, AWS Lambda, and HTTP APIs.
  • AWS AppSync GraphQL APIs simplify application development, improve application performance, and enable us to build applications faster by providing a single endpoint to securely query or update data from multiple databases, microservices, and APIs.
  • AppSync provides unified secure access, it is scalable, time efficient, faster to set up, and has built-in real-time subscriptions and offline functionality.
  • A high learning curve, vendor lock-in, lack of compatibility for databases not hosted by AWS, and less control and transparency are some of its other drawbacks.
  • The costs are lower. Therefore is no need to worry about the infrastructure. The users can focus on the code.