- vừa được xem lúc

AWS AppSync

0 0 4

Người đăng: Hoang Minh Dai

Theo Viblo Asia

AWS AppSync là một dịch vụ do AWS cung cấp, giúp xây dựng các ứng dụng thời gian thực với GraphQL. Dưới đây là kiến thức chi tiết về AWS AppSync:


1. Khái niệm cơ bản

  • GraphQL API: AppSync cung cấp một giao diện API GraphQL, cho phép truy vấn và cập nhật dữ liệu từ các nguồn khác nhau.
  • Realtime Updates: Hỗ trợ WebSocket để cung cấp khả năng cập nhật thời gian thực, hữu ích trong các ứng dụng cần thông báo hoặc đồng bộ dữ liệu.
  • Backend Managed Service: AWS AppSync quản lý cơ sở hạ tầng backend, giúp phát triển ứng dụng nhanh chóng mà không cần quá lo lắng về server.

2. Các tính năng chính

a. GraphQL APIs

  • Truy vấn (Query): Lấy dữ liệu từ backend.
  • Biến đổi (Mutation): Cập nhật hoặc ghi dữ liệu vào backend.
  • Đăng ký (Subscription): Theo dõi các thay đổi dữ liệu và nhận thông báo thời gian thực.

b. Data Sources

AWS AppSync hỗ trợ tích hợp với nhiều nguồn dữ liệu khác nhau:

  • DynamoDB: Cơ sở dữ liệu NoSQL hiệu năng cao.
  • RDS/Aurora: Cơ sở dữ liệu quan hệ (MySQL/PostgreSQL).
  • AWS Lambda: Tạo logic nghiệp vụ thông qua serverless.
  • HTTP Endpoints: Kết nối API REST hoặc các dịch vụ bên ngoài.
  • Elasticsearch/OpenSearch: Cung cấp tính năng tìm kiếm và phân tích dữ liệu.

c. Authentication & Authorization

AppSync hỗ trợ nhiều phương thức bảo mật:

  • AWS IAM: Dành cho ứng dụng nội bộ sử dụng tài khoản AWS.
  • API Keys: Dành cho các ứng dụng không yêu cầu bảo mật chặt.
  • Cognito User Pools: Tích hợp với hệ thống xác thực của ứng dụng.
  • OIDC (OpenID Connect): Dành cho các nhà cung cấp danh tính bên thứ ba.

d. Realtime Subscriptions

  • Hỗ trợ cập nhật tức thì khi dữ liệu thay đổi.
  • Sử dụng giao thức WebSocket để duy trì kết nối.

e. Caching

  • AppSync hỗ trợ bộ nhớ đệm để cải thiện hiệu suất, giảm tải truy vấn nguồn dữ liệu.

f. Offline Support

  • Với AppSync SDK, ứng dụng có thể hoạt động offline. Các thay đổi sẽ được đồng bộ khi ứng dụng trực tuyến trở lại.

3. Lợi ích

  • Nhanh chóng triển khai: Không cần quản lý server, backend được quản lý bởi AWS.
  • Tích hợp dễ dàng: Hỗ trợ tích hợp nhiều dịch vụ AWS.
  • Realtime Ready: Dễ dàng triển khai các ứng dụng thời gian thực.
  • Bảo mật mạnh mẽ: Tích hợp với các phương thức bảo mật của AWS.
  • Scalability: Tự động mở rộng theo nhu cầu ứng dụng.

4. Cách thức hoạt động

a. Kiến trúc cơ bản

  1. Client gửi truy vấn GraphQL đến AppSync.
  2. AppSync phân tích và thực thi truy vấn bằng cách:
    • Gửi yêu cầu đến các nguồn dữ liệu (DynamoDB, Lambda, HTTP).
    • Trả dữ liệu phản hồi về client.
  3. Với các subscription, AppSync lắng nghe sự kiện và gửi thông báo đến client khi dữ liệu thay đổi.

b. Tương tác với Data Sources

  • Mapping Templates: Sử dụng Apache Velocity Template Language (VTL) để ánh xạ giữa GraphQL và nguồn dữ liệu.

c. Pipeline Resolvers

  • Cho phép xử lý truy vấn phức tạp với nhiều nguồn dữ liệu.

5. Ứng dụng phổ biến

  • Ứng dụng chat thời gian thực.
  • Dashboard dữ liệu cập nhật tự động.
  • Ứng dụng di động hỗ trợ offline và đồng bộ dữ liệu.
  • Hệ thống phân tích dữ liệu với Elasticsearch.
  • Website thương mại điện tử.

6. Triển khai AppSync

a. Bước cơ bản

  1. Tạo GraphQL Schema: Xác định kiểu dữ liệu, truy vấn, mutation và subscription.
  2. Kết nối nguồn dữ liệu: Cấu hình DynamoDB, Lambda, hoặc các nguồn khác.
  3. Cấu hình bảo mật: Lựa chọn phương thức xác thực phù hợp.
  4. Deploy ứng dụng: Sử dụng AWS Management Console, AWS CLI hoặc AWS SDK.

b. Công cụ hỗ trợ

  • Amplify Framework: Hỗ trợ cấu hình AppSync và các dịch vụ AWS dễ dàng hơn.
  • AWS CLI: Dùng để quản lý dịch vụ từ dòng lệnh.
  • AWS CloudFormation/SAM: Triển khai tự động qua mẫu cấu hình.

7. Chi phí

  • API Requests: Tính phí dựa trên số lượng yêu cầu (truy vấn, mutation, subscription).
  • Realtime Updates: Phí theo số lượng kết nối WebSocket và tin nhắn gửi.
  • Data Caching: Có phí thêm nếu bật bộ nhớ đệm.

8. Học AppSync

a. Tài liệu chính thức

b. Tutorials & Videos

  • AWS YouTube Channel.
  • AWS Amplify Workshops.

c. Tools

  • Postman hoặc GraphQL Playground để thử nghiệm API.
  • Amplify CLI để thiết lập nhanh môi trường.

9. Hướng dẫn chi tiết triển khai AWS AppSync

Dưới đây là các bước triển khai AppSync từ cơ bản đến hoàn thiện, bao gồm cấu hình GraphQL API, kết nối với nguồn dữ liệu, và triển khai ứng dụng mẫu.


1. Chuẩn bị

a. Yêu cầu trước

  • Tài khoản AWS: Đảm bảo bạn có quyền quản trị.
  • AWS CLI: Cài đặt và cấu hình CLI với lệnh:
    aws configure
    
  • GraphQL Knowledge: Hiểu cơ bản về GraphQL (Query, Mutation, Subscription).

b. Tài nguyên dự kiến

  • DynamoDB: Lưu trữ dữ liệu mẫu.
  • AWS Lambda (Tùy chọn): Xử lý logic nghiệp vụ tùy chỉnh.

2. Tạo GraphQL API trên AppSync

  1. Truy cập AWS AppSync:

  2. Chọn kiểu API:

    • Chọn Start from scratch để tạo API mới.
    • Đặt tên (VD: MyAppSyncAPI) và nhấn Create.
  3. Xác định GraphQL Schema:

    • Truy cập tab Schema trong AppSync Console.
    • Dán schema mẫu:
      type Todo { id: ID! title: String! description: String completed: Boolean
      } type Query { getTodos: [Todo]
      } type Mutation { addTodo(title: String!, description: String, completed: Boolean): Todo
      } schema { query: Query mutation: Mutation
      }
      
    • Nhấn Save Schema.

3. Kết nối nguồn dữ liệu

a. Tạo bảng DynamoDB

  1. Truy cập DynamoDB Console, chọn Create Table.
  2. Cấu hình bảng:
    • Table name: TodosTable.
    • Partition key: id (String).
    • Nhấn Create Table.

b. Liên kết với AppSync

  1. Quay lại AppSync Console, chọn tab Data Sources.
  2. Nhấn Create Data Source:
    • Name: TodosDynamoDB.
    • Data source type: DynamoDB Table.
    • Table name: Chọn TodosTable.
    • IAM Role: AppSync sẽ tạo tự động.
  3. Nhấn Create.

c. Tạo Resolver

  1. Truy cập tab Resolvers.
  2. Kết nối schema với DynamoDB:
    • getTodos:
      • Chọn Query.getTodos, nhấn Attach.
      • Chọn Data source: TodosDynamoDB.
      • Chọn Resolver template: Use a DynamoDB scan operation.
    • addTodo:
      • Chọn Mutation.addTodo, nhấn Attach.
      • Chọn Data source: TodosDynamoDB.
      • Chọn Resolver template: Use a DynamoDB put operation.
    • Nhấn Save Resolver.

4. Kiểm tra GraphQL API

  1. Truy cập tab Queries trong AppSync Console.
  2. Sử dụng GraphQL Playground:
    • Thêm Todo:
      mutation { addTodo(title: "Learn AppSync", description: "Study AWS AppSync tutorial", completed: false) { id title description completed }
      }
      
    • Lấy danh sách Todos:
      query { getTodos { id title description completed }
      }
      

5. Bảo mật API

a. Chọn phương thức bảo mật

  • Truy cập tab Settings, chọn Authorization:
    • API Key: Đơn giản, sử dụng cho thử nghiệm.
    • AWS IAM: Dành cho ứng dụng nội bộ.
    • Cognito User Pools: Xác thực người dùng.
    • OIDC: Kết nối nhà cung cấp danh tính bên ngoài.

b. Tạo API Key (Demo)

  • Chọn API Key, nhấn Create API Key.
  • Sao chép và lưu lại API Key để sử dụng trong ứng dụng.

6. Triển khai ứng dụng frontend

a. Cài đặt AWS Amplify

  1. Cài Amplify CLI:
    npm install -g @aws-amplify/cli
    
  2. Cấu hình Amplify:
    amplify configure
    
  3. Thêm AppSync vào dự án:
    amplify add api
    
    • Chọn GraphQL.
    • Cung cấp schema hoặc nhập URL của AppSync API.

b. Sử dụng AppSync SDK

  1. Cài SDK:
    npm install aws-appsync graphql graphql-tag
    
  2. Cấu hình API client:
    import AWSAppSyncClient from "aws-appsync";
    import gql from "graphql-tag"; const client = new AWSAppSyncClient({ url: "YOUR_APPSYNC_API_URL", region: "YOUR_AWS_REGION", auth: { type: "API_KEY", apiKey: "YOUR_API_KEY", },
    }); const ADD_TODO = gql` mutation AddTodo($title: String!, $description: String) { addTodo(title: $title, description: $description) { id title } }
    `; client.mutate({ mutation: ADD_TODO, variables: { title: "Test Todo", description: "AppSync Example" },
    });
    

7. Bổ sung Subscription

a. Thêm Subscription vào Schema

Cập nhật schema:

type Subscription { onTodoAdded: Todo @aws_subscribe(mutations: ["addTodo"])
} schema { query: Query mutation: Mutation subscription: Subscription
}

b. Kết nối Client với Subscription

const SUBSCRIBE_TODO_ADDED = gql` subscription { onTodoAdded { id title description } }
`; client.subscribe({ query: SUBSCRIBE_TODO_ADDED }).subscribe({ next: (data) => console.log("New Todo:", data),
});

8. Hoàn tất

  • AppSync đã được thiết lập với đầy đủ tính năng Query, Mutation, và Subscription.
  • Kết hợp frontend (React, Angular, hoặc Vue.js) để tạo ứng dụng hoàn chỉnh.

Bình luận

Bài viết tương tự

- vừa được xem lúc

PDF Export, cẩn thận với những input có thể truyền vào

Giới thiệu. Dạo gần đây mình tình cờ gặp rất nhiều lỗi XSS, tuy nhiên trang đó lại có sử dụng dữ liệu người dùng input vào để export ra PDF.

0 0 66

- vừa được xem lúc

Giới thiệu về AWS Batch

Khi sử dụng hệ thống cloud service, điều chúng ta thường phải quan tâm đến không chỉ là hiệu suất hoạt động (performance) mà còn phải chú ý đến cả chi phí bỏ ra để duy trì hoạt động của hệ thống. Chắn hẳn là hệ thống lớn hay nhỏ nào cũng đã từng phải dùng đến những instance chuyên để chạy batch thực

0 0 144

- vừa được xem lúc

Tìm hiểu về AWS KMS

1. AWS KMS là gì. Ở KMS bạn có thể lựa chọn tạo symetric key (khóa đối xứng) hoặc asymetric key (khóa bất đối xứng) để làm CMK (Customer Master Key). Sau khi tạo key thì có thể thiết đặt key policy để control quyền access và sử dụng key.

0 0 66

- vừa được xem lúc

AWS VPC cho người mới bắt đầu

Tuần này, tôi trình bày lại những gì tôi đã học được về Virtual Private Cloud (VPC) của Amazon. Nếu bạn muốn xem những gì tôi đã học được về AWS, hãy xem Tổng quan về DynamoDB và Tổng quan về S3. VPC là gì. Những điều cần lưu ý:.

0 0 84

- vừa được xem lúc

AWS Essentials (Phần 6): Guildline SNS Basic trên AWS

Tiếp tục với chuỗi bài viết về Basic AWS Setting, chúng ta tiếp tục tìm hiểu tiếp tới SNS (Simple Notification Service). Đây là một service của AWS cho phép người dùng setting thực hiện gửi email, text message hay push notification tự động tới mobile device dựa trên event người dùng setting phía AWS

0 0 145

- vừa được xem lúc

Sử dụng Amazon CloudFront Content Delivery Network với Private S3 Bucket — Signing URLs

Trong nhiều trường hợp, thì việc sử dụng CDN là bắt buộc. Mình đã trải nghiệm với một số CDN nhưng cuối cùng mình lựa chọn sử dụng AWS CloudFront.

0 0 118